GRECIS = Graduate Reading Corpus Intelligence System.
GRECIS 是一个面向考研英语阅读的本地语料分析与精读系统。它把考研真题、外刊文章和本地授权语料统一存入 SQLite,完成文章质量筛选、领域识别、词汇分级、熟词生义识别、固定表达抽取和句式分析,并提供网页精读台以及 Markdown、Anki 和红宝书式复习资料导出。
这个项目的目标很明确:把“能读”的文章,变成“能背、能复习、能继续扩展”的语料系统。
它不追求把所有词都塞进词表,而是优先保留考研大纲词、美国英语常用进阶词、GRE 拓展词、专业术语、熟词生义和真题常见搭配,同时剔除专名、异常拼写、噪音词和低价值文本。
当前版本已经把核心成品纳入仓库,便于共享和迭代:
data/grecis.sqliteoutput/redbook/*.md
项目主要来自两个现实需求:
- 考研英语阅读需要的是稳定、可复习的高质量输入,不是泛泛的词频表。
- 很多外刊语料虽然多,但分类粗糙、噪音大、学术科技类堆积严重,直接拿来背诵效率不高。
所以 GRECIS 采用“真题优先 + 外刊补充 + 自动筛选 + 结构化导出”的方式,尽量把语料变成适合复习的内容。
当前 SQLite 语料库规模如下:
- 388 篇文章
- 388 份分析结果
- 13,875 个词汇项
- 12,731 个搭配
- 1,491 个熟词生义
- 7,945 个句式模式
- 13 份红宝书 Markdown 成品
主要存储位于 data/grecis.sqlite,文章导出位于 output/markdown/articles/,红宝书位于 output/redbook/。
管理面板位于 dashboard/,提供阅读台、暗色模式、悬停查词、分级词汇高亮、个人词汇标记、阅读进度、手动或自动扩充语料、模型设置和重新分析等功能。
- Python 3.11–3.13
- uv
- Node.js 22.13.0 或更高版本
- npm
先确认本机版本:
uv --version
python --version
node --version
npm --version管理面板由本地 Python 语料服务和网页界面组成。
Windows 用户可以直接双击项目根目录的:
start-dashboard.bat
脚本会在后台静默运行 Python 语料服务和网页开发服务;等待两者就绪后,自动在默认浏览器中打开 http://localhost:3000/,不会留下多个终端窗口。如果前端依赖尚未安装,脚本会先自动执行 npm ci。
后台服务的日志保存在 output/dashboard/。关闭面板时,双击根目录的 stop-dashboard.bat;它只会结束由一键启动脚本记录的前后端进程。手动启动时,请在两个服务终端中分别按 Ctrl+C。
也可以按下面的步骤手动启动。
终端一,在项目根目录安装 Python 依赖并启动语料服务:
uv sync
uv run grecis-web服务默认监听 http://127.0.0.1:8765,并从 data/grecis.sqlite 动态查询文章、词汇、分析记录、阅读进度和掌握度。
终端二,在项目根目录安装并启动网页:
cd dashboard
npm ci
npm run dev启动成功后,终端会显示本地地址,默认是:
http://localhost:3000/
在浏览器中打开该地址即可使用。开发模式支持热更新,修改 dashboard/app/ 下的页面或样式后无需重新启动。
结束使用时,分别在两个运行服务的终端按 Ctrl+C。
如果只想在本地稳定使用,不需要热更新,先在终端一启动 Python 语料服务:
uv run grecis-web再在终端二构建并启动网页:
cd dashboard
npm ci
npm run build
npm run start构建完成后,根据终端显示的地址在浏览器中打开;默认仍为 http://localhost:3000/。
以后代码和依赖没有变化时,可以直接运行:
cd dashboard
npm run start如果更新了 package-lock.json,建议重新执行 npm ci 和 npm run build。
- 鼠标在英文单词上停留 0.5 秒,可以查看本地词典链路返回的释义。
- 正文中的分析候选词带有灰色下划线;考研核心、常用进阶、GRE 拓展、专业术语和熟词生义使用不同的荧光底色。
- 点击词汇分级图例,可以单独开启或关闭各级荧光底色;选择会保存在当前设备。
- 点击正文单词会打开标记面板,可选择“待掌握”“似曾相识”“已掌握”对应的下划线颜色,也可以取消个人下划线。
- 个人标记会加入词汇簿,并按掌握程度在其他文章中沿用。
- 阅读进度随正文滚动位置单向增长,并自动写回本地数据库。
- 右上角可以切换悬停查词、专注模式和暗色模式。
- 语料库支持对当前数据库中的全部文章进行分页、全文搜索和领域筛选。
- “加入文章”支持粘贴正文、提取网页正文,也支持按本地来源配置自动发现、筛选和分析文章。
- 词汇簿同时展示 NLP/LLM 候选词和个人词汇,支持分页、搜索和掌握度筛选。
- 左下角“模型与 API”可以修改模型、API Key 和接口地址;保存后由 Python 写入
config/local.yaml。 - “测试真实连接”会实际请求所选模型,连接失败时会显示具体错误,不再固定返回成功。
- 右侧“重新进行 LLM + NLP 分析”会调用项目现有的 Python 分析链路,并将结果写回 SQLite。
文章、词汇和分析记录均来自 data/grecis.sqlite,没有硬编码在网页中。分析候选词保存在 vocabulary 表,个人词汇和掌握度分别保存在 personal_vocabulary 与 word_mastery 表,阅读进度保存在 reading_progress 表。网页只读取“是否已配置 API Key”,不会读取或回显密钥正文。
执行 npm ci 前,应先在运行开发服务的终端按 Ctrl+C,确认旧的 npm run dev 已经退出。否则 node.exe 或 workerd.exe 可能占用 lightningcss.win32-x64-msvc.node,导致 EPERM: operation not permitted, unlink。
如果安装已经失败,并且随后出现“vinext 不是内部或外部命令”,说明 node_modules 可能只清理了一部分。先关闭仍在运行的 Dashboard 开发服务,在任务管理器中结束命令行指向本项目 dashboard 目录的 node.exe 和 workerd.exe,然后在项目根目录执行:
Remove-Item -LiteralPath .\dashboard\node_modules -Recurse -Force
cd dashboard
npm ci
npm run dev不要在开发服务运行期间重复执行 npm ci。
语料获取顺序是:
真题 PDF / 本地语料
↓
外刊源抓取
↓
正文清洗
↓
质量评分
↓
SQLite 入库
↓
本地 NLP / 可选 LLM 分析
↓
红宝书 / Markdown / Anki 导出
常用命令:
uv run grecis ingest-pastpapers
uv run grecis ingest-exam data/my_kaoyan_passages.jsonl
uv run grecis build-corpus --second-tier-limit 100 --third-tier-limit 20
uv run grecis analyze
uv run grecis export-redbook
uv run grecis export-patterns如果你只想更新某个来源:
uv run grecis fetch-sources --source "The Guardian" --limit 100
uv run grecis update-corpus --source "The Atlantic" --limit 100 --use-llm如果你要做复习使用:
uv run grecis curate-corpus
uv run grecis export配置文件 / 环境变量
↓
真题 PDF / 本地语料 / 外刊 URL / RSS / archive / search
↓
正文提取与清洗
↓
文章质量评分与过滤
↓
SQLite 去重入库
↓
本地 NLP 分析
↓
可选 LLM 深度分析
↓
Markdown 知识库 / Anki TSV / 红宝书
src/grecis/
├── cli.py # 命令行入口
├── config.py # YAML/JSON/环境变量配置
├── db.py # SQLite 存储、聚合查询、LLM 结果入库
├── dictionary.py # 词典、缓存、短语 LLM fallback
├── export.py # Markdown 和 Anki 导出
├── ingest.py # JSONL/URL/archive/search/RSS 导入
├── llm.py # Chat Completions 分析
├── models.py # Article / AnalysisResult 数据结构
├── nlp.py # 本地词频、领域、熟词生义、句式识别
├── pastpapers.py # pastpapers.cn PDF 真题导入
├── quality.py # 文章质量评分
├── redbook.py # 高质量红宝书生成
├── topics.py # 从真题反向抽取外刊搜索主题
└── wordlists.py # 高考、考研、SUBTLEX-US 与 GRE 本地词表分级
SQLite 默认路径是:
data/grecis.sqlite
主要表包括:
articlesanalysesvocabularycollocationspolysemysentence_patternsword_masterypersonal_vocabularyreading_progress
文章元数据放在 metadata_json,包括来源、citation、PDF URL、质量分和质量原因等。
红宝书导出由 src/grecis/redbook.py 负责,当前策略是:
- 种子词条优先保留
- 高频短语、熟词生义和考研核心术语优先保留
- 生僻专业词、噪音词、专名和异常缩写剔除
- 未知领域不再默认归入“学术科技”,而是进入泛学术核心词或待复核附录
- 每个章节有容量上限,避免单章膨胀
- 句型先归一为稳定分类,再按结构模板聚合和跨类别多样化选样
- 句型例句优先选择真题、长度适中且正文污染较少的完整句子
只更新句型复习资料时,可使用:
uv run grecis export-patterns普通本地重分析会保留数据库中已有的 LLM 结果;只有新的非空 LLM 结果才会替换旧结果。
词典入口在 src/grecis/dictionary.py。
查询顺序是:
data/dict_cache.json
↓
本地 MDX 词典
↓
Youdao Suggest API + DictionaryAPI.dev
↓
短语 LLM fallback
↓
负缓存
短语通常是词典查不到的主力,所以默认允许 LLM fallback;普通单词则默认不走 LLM fallback。
- 在
config/sources.yaml里增加外刊来源。 - 用
uv run grecis ingest-exam ...导入本地授权语料。 - 用
uv run grecis fetch-sources或uv run grecis build-corpus扩充文章池。 - 用
uv run grecis analyze和uv run grecis export-redbook生成新的结果。
- 想改分类,动
src/grecis/redbook.py和src/grecis/db.py - 想改词典和缓存,动
src/grecis/dictionary.py - 想改 LLM 分析,动
src/grecis/llm.py - 想改本地 NLP,动
src/grecis/nlp.py
uv sync --extra dev
uv run pytest
uv run ruff check .如果你要继续扩展成完整项目,推荐沿着“导入 -> 分析 -> 过滤 -> 导出”的链路逐步改,不要先堆 UI。
项目用于本地学习和研究。外刊和真题材料可能受版权保护:
- 不建议公开分发全文语料库
- 红宝书中尽量保存短摘录、URL 和 citation
- 付费墙内容只保存你有权访问和保存的材料
- 管理面板基于 Cloudflare vinext 的 App Router starter 搭建。
- 考研大纲词表改编自 exam-data/NETEMVocabulary,原始数据采用 CC BY-NC-SA 4.0。
- 美国英语常用 20K 词表改编自 words/subtlex-word-frequencies,该项目基于 SUBTLEX-US 频率数据并采用 ISC 许可证。
- GRE 拓展词表改编自 0xDkXy/GRE_vocabulary_3000,采用 MIT 许可证;只有不在本地美国英语常用 20K 中的词才归入 GRE 拓展级。
派生词表的处理方式和许可说明见 data/WORDLISTS.md。