跳转至

英语内容处理与自适应教学速查(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)

  1. 文章入库时跑 textstat.flesch_reading_ease / flesch_kincaid_grade / dale_chall,映射 CEFR 档位(FRE 90+≈A2、70–89≈B1、50–69≈B2,经验映射需人工校准)。
  2. spaCy 提取 lemma → 查 ECDICT 词频/柯林斯星级/考试标注 → 统计"超纲词占比"作为第二维度。
  3. 按学员当前档位推荐文章(超纲词占比 <10% 的最低难度起步)。

3.2 生词本 + AI 例句(ECDICT + LLM)

  1. 学员点词/长按选词 → ECDICT 查释义+词频+标注 → LLM 按"该词 CEFR 档位 + 学员等级 + 前后文词义"生成 3 条例句与填空。
  2. 例句过 LanguageTool /v2/check 复检,有 match 的句子重生成(守则第 3 条:不把未复检内容直接给学员)。
  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 分册)

  1. TTS 分册把生词例句/课文段落合成为朗读音频 → 学员跟读录音。
  2. ASR 分册 faster-whisper word_timestamps=True 出词级时间戳 → SOE 分册打分(准确度/流利度/发音)。
  3. 打分低的词回写 §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 操作守则

  1. 先读后写:改配置/代码前先读现有文件;词典/模型/语料只放 F:\EricLiu\AppDocs\EnglishLearn\labs\models\,产物只写 F:\EricLiu\ 下,禁止写 C 盘。
  2. 版本固定:生产一律 pin 版本(本册基线 2026-11-11 核对)。NLTK 必须 ≥3.10.3(安全线);LanguageTool 镜像 pin 具体版本;Anki server 跟随客户端版本。升级前查 Releases changelog。
  3. 内容准确性:所有 AI 生成内容(例句、题目、讲解)上线给学员前必须经 LanguageTool/词典校验;可读性分级映射 CEFR 用人工标注样本校准,禁止把估算当事实。
  4. 儿童数据隐私:学员(尤其未成年)录音、作文、错题记录全部留在本机 F:\EricLiu\ 下,禁止上传任何外部服务/云 API;跟读音频临时文件用完即删(同 ASR 分册守则);不采集不必要的个人信息,日志不落原文敏感字段。
  5. 离线优先:容器内禁止运行时在线拉模型/语料/词典;下载走联网机 → labs\models\ 人工同步。
  6. 资源隔离:LanguageTool 4C/3G、Moodle 4C/4G、Anki server <1C/512M;与 TTS/ASR/SOE 并存时按 AppDocs 总纲资源预算(≤48 vCPU / ≤150G)留余量。
  7. 诚实上报:服务健康检查与响应携带真实耗时;分级/批改准确率用人工标注验证后再上报。
  8. 破坏性操作需确认:删除学员数据、重建 Anki/Moodle 数据卷前必须向用户确认。