英语内容处理与自适应教学速查(CPU 服务器部署 · 英语学习场景)¶
版本基线: spaCy 3.8.x + en_core_web_sm 3.8.0(MIT,CPU 优化管线)· NLTK 3.10.3(Apache-2.0,3.9.x 系列有大量未修复 CVE,禁用)· Stanza 1.15.0(2026-10-01,Apache-2.0)· textstat 0.7.13(2026-02-18,MIT)· WordNet 3.1(Princeton 最后版本,项目已停止开发,BSD 风格许可)/ Open English WordNet 2025 Plus(2025-12,en-word.net,BSD 风格,活跃)· ECDICT(skywind3000,MIT,全量约 77 万词条,2026-10 仍有提交,8.6k stars)· LanguageTool 6.8(2026-05-05,LGPL-2.1+,无官方 Docker 镜像)· Anki 26.09.3(2026-09,AGPL-3.0-or-later)· Moodle 5.3 LTS(2026-10-03,GPL-3.0+)· Open edX 当前命名版本 Verawood(AGPL-3.0)· Canvas LMS(AGPL-3.0,Instructure 维护)· DeepTutor v1.6.15(HKUDS,2026-10-19,Apache-2.0)(核对日期 2026-11-11,来源:官网 / GitHub Releases / PyPI / moodle.org)
宿主机约束(必读): Windows Server,2×Xeon Gold 6138(40 核 80 线程)、256GB 内存。无独立 GPU,纯 CPU 推理。所有服务以 Docker 容器部署,产物只存
F:\EricLiu\下;模型/词典数据统一放F:\EricLiu\AppDocs\EnglishLearn\labs\models\。分册分工: 中文 NLP(分词/HanLP/jieba、Ollama 本地 LLM、Dify/RAG)见 NLP 分册——本册只做英语场景;口语链路(TTS 朗读→跟读→评测打分)见 TTS / ASR / SOE 分册;插图/情景配图见 ImageGen 分册。
1. 选型对比¶
1.1 A 块:英语内容处理¶
| 项目 | 定位 | 许可证 | 维护状态 | CPU 部署 | 适用范围与限制 |
|---|---|---|---|---|---|
| spaCy + en_core_web_sm/md | 工业级英语 NLP 管线:分词/POS/依存/NER/词形还原 | MIT(库与模型均 MIT) | 活跃(en_core_web 3.8.0,官方标注 CPU 优化) | ✅ sm 约 50MB、md 约 40MB+20k 词向量,单文档毫秒级 | 英语首选。lemma/POS/句法直接支撑生词提取与难度分析;sm 精度够用,md 多了词向量可做相似词推荐 |
| NLTK | 教学级 NLP 工具箱 + 语料库(含 WordNet 接口) | Apache-2.0(语料各自许可,多为可再分发/非商用,逐 corpus 看 README) | 活跃但 3.10 是安全加固线:3.9.x 有 32 条未修复 advisory(含 RCE),必须 ≥3.10.3 | ✅ 纯 Python,极轻 | WordNet 查询/词干还原/教学演示好用;生产解析性能不如 spaCy;语料需 nltk.download 预先落到统一目录 |
| Stanza | Stanford 神经管线(60+ 语种,英语精度高于 spaCy 一档) | Apache-2.0 | 活跃(1.15.0,2026-10-01) | ✅ CPU 可跑但比 spaCy 慢(torch 依赖) | 需要更高英语依存/形态分析精度时选配;模型随首用下载,注意离线化 |
| textstat | 可读性公式集:Flesch Reading Ease、Flesch-Kincaid Grade、SMOG、Gunning Fog、Dale-Chall、Coleman-Liau 等 | MIT | 活跃(0.7.13,2026-02-18;依赖 pyphen/nltk/cmudict) | ✅ 毫秒级 | 分级阅读核心工具:给文章算年级难度→匹配学员水平;公式按英语设计(英文音节统计用 cmudict),只做英语场景 |
| WordNet 3.1 / Open English WordNet | 英文词汇语义网络(synset 同义词集、上下位关系) | BSD 风格 | Princeton 已停止开发(3.1 为最后版本,仅数据库文件);社区续作 Open English WordNet 活跃(2025 Plus 版,约 16.2 万词 / 12 万 synset) | ✅ 数据文件,随 NLTK/spaCy 加载 | 同义词/联想/难度标注的语义底座;生产建议用 OEWN(仍在更新),Princeton 版仅作兼容 |
| ECDICT | 开源英汉双解词典数据库:音标、双语释义、BNC/当代词频、四六级/雅思/托福/GRÉ 考试标注、柯林斯星级、牛津 3000 | MIT | 活跃(2017 年至今持续维护,2026-10 仍有提交) | ✅ CSV/SQLite,查询毫秒级 | 生词本/查词主力:全量约 77 万词条(stardict.7z),mini 版约 10 万;自带 lemma.en.txt 词形还原表(gave→give、teeth→tooth) |
| LanguageTool(自建 server) | 开源语法/拼写/风格检查(25+ 语种,英语规则最深),HTTP API | LGPL-2.1-or-later | 活跃(6.8,2026-05-05;母公司 LanguageTooler) | ✅ Java,内存约 1.2GB(双语加载后);n-gram 混淆词检测英文需额外约 8GB 词频数据(建议 SSD) | 语法批改主力。注意:①无官方镜像,用社区镜像(见 §2.1);②AI/LLM 规则仅云端 Premium 独有,自建只有开源规则;③自 2026-03 起官方浏览器扩展改 Premium-only,但指向自建 server 仍免费可用 |
| LLM 生词/例句生成 | 用本地 LLM 按 CEFR 等级生成例句、填空、同义改写 | Ollama 模型各自许可 | 随 NLP 分册(Ollama) | ✅ qwen 2–7B 量化 CPU 可跑,单例句 2–10 秒 | 例句/讲解生成主力;输出必须过 LanguageTool 复检(LLM 会产出语法瑕疵例句) |
1.2 B 块:LMS 与自适应学习¶
| 项目 | 定位 | 许可证 | 维护状态 | CPU 部署 | 适用范围与限制 |
|---|---|---|---|---|---|
| Moodle | 世界最广泛部署的开源 LMS(约 14.8 万注册站点):课程/测验/成绩册/插件生态(~1500 插件) | GPL-3.0-or-later | 极活跃;5.3 LTS(2026-10-03),支持至 2027-10,安全补丁至 2029-10;PHP 8.3+ | ✅ PHP+MySQL/MariaDB,Docker 单容器起步,2C4G 可跑小班 | LMS 首选:测验引擎+成绩册+班级管理全都有;界面偏重、教师上手成本高;自适应要靠插件/外部服务补 |
| Canvas LMS 开源版 | Instructure 主力 LMS 的开源核心,Rails 栈 | AGPL-3.0 | 维护中(随 Instructure 主线更新) | ⚠️ 可自建但组件重(Rails+Postgres+Redis+Canvas Jobs),运维复杂度高于 Moodle | 有 Ruby 工程能力才考虑;本库场景不推荐,记档备查 |
| Open edX | MOOC 级平台(edx 平台开源版),当前命名版本 Verawood | AGPL-3.0 | 活跃 | ❌ 体量大:Django+ Tutor 容器编排+多服务,吃资源吃人力 | 如实标注:体量过大,单机教学场景回避;只有要做"对外开放的 MOOC 平台"才考虑 |
| Anki(桌面/AnkiDroid)+ 自建 sync server | 间隔重复记忆卡(FSRS/SRS 算法),生态成熟 | AGPL-3.0-or-later | 活跃(26.09.3,2026-09;Rust 内核) | ✅ sync server 内置于官方 anki pip 包(python -m anki.syncserver),内存 <512MB;社区 Docker 镜像可用 |
生词本复习引擎首选:ECDICT+LLM 生成卡片→导入 Anki;server 只做同步无 Web 复习界面(复习在客户端);server 版本要贴近客户端版本(协议在演进) |
| DeepTutor(HKUDS) | 开源 AI 学习工作台:RAG 问答/测验生成/逐题讲解/掌握度追踪,支持 Ollama 等本地 provider | Apache-2.0 | 非常活跃(v1.6.15,2026-10-19;42k+ stars,发版以天计) | ✅ Docker 单容器(官方 GHCR 镜像),模型侧接 NLP 分册 Ollama | LLM 自适应练习的现成开源方案(搜到的最成熧行)——文档问答+自动出题+批改链路齐全;面向"文档驱动学习",英语教材喂进去即可出题 |
| 其他 LLM 自适应练习项目(learning-tutor 类) | Ollama+LangChain 自适应出题/难度调节的小型开源项目 | MIT | 多为个人项目(如 RyanMaxiemus/learning-tutor,10 commits),成熟度低 | ✅ | 参考其"答错→降难度→针对性出题"的 prompt/流程设计即可,不建议直接生产部署 |
| 自建路径:Dify/RAG + 测验引擎 | 用 NLP 分册 Dify 搭"生词/语法薄弱点→RAG 检索教材→LLM 出题→判分→回写薄弱点"流水线 | Dify 基于 Apache-2.0(附条目化限制,见 NLP 分册) | 随 NLP 分册 | ✅ | 没有现成成熟英语自适应项目时的兜底方案,设计见 §3.3 |
1.3 限制与回避(选型红线)¶
- NLTK 3.9.x 及以下:32 条未修复 advisory(CVE-2026-78683 unsafe pickle RCE、CVE-2026-71513 等)——回避,必须 3.10.3+。
- LanguageTool 云端/Premium 特性:AI 改写规则、高级英语错误检测为专有,自建 server 拿不到;官方浏览器扩展自 2026-03 起 Premium-only(自建 server 例外);LibreOffice 官方扩展已停更(6.4,2024-04),替代品 WritingTool——不要指望云端功能。
- LanguageTool 官方 Docker 镜像不存在:README 只列社区镜像(erikvl87/languagetool 更新放缓,meyay/languagetool 跟随官方 tag 重建且更新及时)——选 meyay。
- Anki sync server:无 Web 复习界面;HTTP 明文(公网必须套 HTTPS 反代);版本要跟随客户端。不要为了"更可靠"自建而放弃 AnkiWeb 的易用性,自建理由是隐私与全本地化。
- Open edX:单机 CPU 场景体量与运维成本远超收益——回避。
- Canvas LMS:AGPL 无问题但 Rails 全家桶运维重,且开源版与商业版功能有差异——本库场景回避,备查。
- MoodleCloud / Moodle Workplace:托管/商业版非开源,不计入本册。
- Princeton WordNet:已停止开发(官网明示 no longer developed)——生产用 Open English WordNet。
- 纯 LLM 直出例句/批改:无语法复检与词库校验会有事实/语法错误——必须走"LLM 生成→LanguageTool 复检→ECDICT 校验词条存在"三段流水线。
推荐结论(英语学习闭环): - 内容处理首选 = spaCy en_core_web_sm(句法/生词提取)+ textstat(分级)+ ECDICT(查词/词频/考试标注)+ LanguageTool 6.8 自建(语法批改)。 - 选配 = Stanza 1.15.0(需更高解析精度时)、Open English WordNet 2025(同义词语义底座)、DeepTutor(现成 LLM 出题工作台,接 Ollama)。 - 复习引擎首选 = Anki + 自建 sync server(AGPL,官方 pip 包开箱即用)。 - LMS 选配 = Moodle 5.3 LTS(要正式班级/成绩册时上,否则 Anki+自建小应用够用)。 - 回避 = Open edX(体量)、Canvas LMS(运维重)、NLTK 3.9.x(CVE)、LanguageTool 云端依赖、社区 learning-tutor 类小项目直接上生产。
2. 安装部署要点¶
2.1 LanguageTool Docker(语法批改服务)¶
# docker-compose.yml,放 F:\EricLiu\AppDocs\EnglishLearn\labs\docker\languagetool\
services:
languagetool:
image: meyay/languagetool:latest # 跟随官方 6.8 tag 重建的社区镜像;生产 pin 具体版本号
container_name: languagetool
ports: ["127.0.0.1:8102:8010"]
environment:
- langdet-langmodels-fasttext-enabled=true
# 开启英文 n-gram 混淆词检测(约 8GB 数据,首次启动自动下载到容器内;建议持久化+SSD)
- Java_Xms=256m
- Java_Xmx=1g
volumes:
- F:\EricLiu\AppDocs\EnglishLearn\labs\models\languagetool:/mnt/data # n-gram/缓存持久化
cpus: 4
deploy:
resources:
limits: { memory: 3G }
restart: unless-stopped
# 调用验证(v2/check)
curl -s -X POST http://127.0.0.1:8102/v2/check \
-d "language=en-US" \
-d "text=She go to school every day." | python -m json.tool
# 返回 matches[].message/replacements —— 直接作为语法批改反馈
要点:内存基线约 550MB,双语常驻约 1.2GB;首次启动含 fastText 语言检测模型下载约需 1 分钟。AI 规则云端独有,自建规则库只有开源规则,够用于学生作文批改(拼写/主谓一致/时态/标点/基础风格)。
2.2 Anki sync server¶
# 方式一:官方 pip 包(最简,无 Docker)
pip install anki==26.09.3
SYNC_USER1=student1:pass123 SYNC_BASE=/f/EricLiu/AppDocs/EnglishLearn/labs/anki-data \
python -m anki.syncserver # 监听 8080
# 方式二:社区 Docker 镜像
docker run -d --name anki-sync -p 127.0.0.1:27701:27701 \
-v F:\EricLiu\AppDocs\EnglishLearn\labs\anki-data:/data \
-e SYNC_USER1=student1:pass123 \
michiwerner/anki-sync-docker # 默认 ANKI_VERSION=26.08.1,可用 build-arg 指定 26.09.3
客户端配置:Anki 桌面版 → 首选项 → 网络 → 自同步服务器 URL 填 http://<host>:27701/(AnkiDroid 同);iOS 局域网权限需打开。server 版本与客户端版本差不要超过一个大的发布代次;公网暴露必须走 HTTPS 反代(阶段 A Nginx 网关),否则仅限内网/Tailscale。数据落 labs\anki-data\。
2.3 轻量 LMS(Moodle 5.3 LTS,选配)¶
# docker-compose.yml(官方 moodle-lms/moodle Docker 支持起步;生产建议 bitnami/moodle 或自建镜像)
services:
moodle:
image: bitnami/moodle:5.3
ports: ["127.0.0.1:8103:8080"]
environment:
- MOODLE_DATABASE_TYPE=mariadb
- MOODLE_DATABASE_HOST=mariadb
- MOODLE_DATABASE_NAME=moodle
- MOODLE_DATABASE_USER=moodle
- MOODLE_DATABASE_PASSWORD=change-me
volumes:
- F:\EricLiu\AppDocs\EnglishLearn\labs\moodle-data:/bitnami/moodle
- F:\EricLiu\AppDocs\EnglishLearn\labs\moodle-mariadb:/bitnami/mariadb
cpus: 4
deploy:
resources:
limits: { memory: 4G }
restart: unless-stopped
仅当需要正式班级/成绩册/SCORM 课件时部署;轻量需求用 Anki + 自建练习应用即可。PHP 8.3+,升级要沿 5.3 LTS 分支点版本走(安全支持至 2029-10)。
2.4 内容处理 Python 栈(pip)¶
pip install spacy==3.8.* textstat==0.7.13 nltk==3.10.3 stanza==1.15.0
python -m spacy download en_core_web_sm # MIT,CPU 优化
# NLTK 语料(wordnet/cmudict/停用词)预先统一落到 labs\models\nltk_data\
python - <<'EOF'
import nltk
nltk.download('wordnet', download_dir=r'F:\EricLiu\AppDocs\EnglishLearn\labs\models\nltk_data')
nltk.download('cmudict', download_dir=r'F:\EricLiu\AppDocs\EnglishLearn\labs\models\nltk_data')
nltk.download('omw-1.4', download_dir=r'F:\EricLiu\AppDocs\EnglishLearn\labs\models\nltk_data')
EOF
# ECDICT:clone https://github.com/skywind3000/ECDICT,取 stardict.7z(全量约 77 万词条)
# 解出 stardict.csv 后用仓库自带 stardict.py 转 SQLite,落 labs\models\ecdict\ecdict.db
3. 实验路径:英语自适应学习闭环设计¶
闭环:阅读分级 → 生词本 → AI 例句/语法批改 → 跟读评测(对接 SOE 分册),四环节互相喂数据。
3.1 阅读分级(textstat + spaCy)¶
- 文章入库时跑
textstat.flesch_reading_ease / flesch_kincaid_grade / dale_chall,映射 CEFR 档位(FRE 90+≈A2、70–89≈B1、50–69≈B2,经验映射需人工校准)。 - spaCy 提取 lemma → 查 ECDICT 词频/柯林斯星级/考试标注 → 统计"超纲词占比"作为第二维度。
- 按学员当前档位推荐文章(超纲词占比 <10% 的最低难度起步)。
3.2 生词本 + AI 例句(ECDICT + LLM)¶
- 学员点词/长按选词 → ECDICT 查释义+词频+标注 → LLM 按"该词 CEFR 档位 + 学员等级 + 前后文词义"生成 3 条例句与填空。
- 例句过 LanguageTool
/v2/check复检,有 match 的句子重生成(守则第 3 条:不把未复检内容直接给学员)。 - 生成 Anki 卡片(正面例句挖空/反面释义+音标+标签)→ 经 sync server 进学员牌组;FSRS 自动排复习。
3.3 自适应练习与语法批改(Dify/RAG 自建设计 + DeepTutor)¶
- 现成方案(选配):DeepTutor Docker(
ghcr.io/hkuds/deeptutor,端口 3782)+ 设置里接 NLP 分册 Ollama —— 教材 PDF 入知识库,直接获得 RAG 问答、测验生成、逐题讲解、掌握度追踪。 - 自建路径(无现成成熟英语自适应开源项目时的兜底,走 NLP 分册 Dify):
- 画像层:SQLite/PG 存学员错题(词/语法点/题型/时间),维护"薄弱语法点"与"超纲词表"两张表。
- 出题层:Dify 工作流 = 取薄弱点 → RAG 检索教材/例句库 → LLM 生成 3–5 题(难度=薄弱点权重)→ LanguageTool 规则校验题目自身语法 → 输出 JSON(题干/选项/答案/考点)。
- 批改层:客观题程序判分;主观造句/作文 → LanguageTool 出规则性批注 + LLM 出"讲解性反馈"(两个来源分开标注)。
- 闭环:错题回写画像层,下轮出题自动聚焦。
- 语法点知识库用 RAG 而非让 LLM 自由发挥,降低幻觉(Grammarly/Grammar 判分类通用启发)。
3.4 跟读评测(对接 SOE 分册)¶
- TTS 分册把生词例句/课文段落合成为朗读音频 → 学员跟读录音。
- ASR 分册 faster-whisper
word_timestamps=True出词级时间戳 → SOE 分册打分(准确度/流利度/发音)。 - 打分低的词回写 §3.2 生词本并加"发音弱"标签 → Anki 卡片追加 TTS 音频字段,形成"读不准→多听多读"循环。
4. 排障¶
| 症状 | 原因 | 处置 |
|---|---|---|
| LanguageTool 容器启动慢/超时 | 首次下载 n-gram/语言检测模型 | 首启耐心等待(约 1 分钟+);n-gram 数据持久化到 labs\models\languagetool\,二次启动秒级 |
| LanguageTool 批改"漏报"明显 | 自建只有开源规则(Premium/AI 规则云端独有) | 预期内;规则性反馈+LLM 讲解性反馈双通道补足(§3.3) |
| spaCy/NLTK 首次运行联网下载语料 | 依赖运行时拉资源 | 预先下载到 labs\models\,容器设 NLTK_DATA 指过去;spaCy 模型用 whl 本地安装 |
| LLM 例句有语法错/词典查无此词 | 纯生成无校验 | 强制三段流水线:LLM→LanguageTool 复检→ECDICT 校验,任一失败重生成 |
| Anki 客户端连不上 sync server | server 与客户端版本差距过大 / URL 尾斜杠缺失 | server 与客户端同步升级;URL 末尾带 /;查容器日志确认 27701 监听 |
| Anki 同步大媒体包失败 | 默认 payload 限制 | 镜像设 MAX_SYNC_PAYLOAD_MEGS(如 100+);媒体走局域网同步 |
| Moodle 内存/CPU 吃紧 | 容器无限制 | compose 限 4C/4G;小班场景够用;更重负载不如放弃 Moodle 用 Anki+自建 |
| textstat 音节统计异常 | en 路径需 cmudict | 确认 nltk_data 含 cmudict 并设置 NLTK_DATA |
| Windows 路径挂载失败 | Docker Desktop 路径格式 | compose 用 F:\EricLiu\... 原生写法;bash 操作用 /f/EricLiu/... |
5. AI 操作守则¶
- 先读后写:改配置/代码前先读现有文件;词典/模型/语料只放
F:\EricLiu\AppDocs\EnglishLearn\labs\models\,产物只写F:\EricLiu\下,禁止写 C 盘。 - 版本固定:生产一律 pin 版本(本册基线 2026-11-11 核对)。NLTK 必须 ≥3.10.3(安全线);LanguageTool 镜像 pin 具体版本;Anki server 跟随客户端版本。升级前查 Releases changelog。
- 内容准确性:所有 AI 生成内容(例句、题目、讲解)上线给学员前必须经 LanguageTool/词典校验;可读性分级映射 CEFR 用人工标注样本校准,禁止把估算当事实。
- 儿童数据隐私:学员(尤其未成年)录音、作文、错题记录全部留在本机
F:\EricLiu\下,禁止上传任何外部服务/云 API;跟读音频临时文件用完即删(同 ASR 分册守则);不采集不必要的个人信息,日志不落原文敏感字段。 - 离线优先:容器内禁止运行时在线拉模型/语料/词典;下载走联网机 →
labs\models\人工同步。 - 资源隔离:LanguageTool 4C/3G、Moodle 4C/4G、Anki server <1C/512M;与 TTS/ASR/SOE 并存时按 AppDocs 总纲资源预算(≤48 vCPU / ≤150G)留余量。
- 诚实上报:服务健康检查与响应携带真实耗时;分级/批改准确率用人工标注验证后再上报。
- 破坏性操作需确认:删除学员数据、重建 Anki/Moodle 数据卷前必须向用户确认。