# Etymology-Rag **Repository Path**: williamsucas/etymology-rag ## Basic Information - **Project Name**: Etymology-Rag - **Description**: Etymology Intelligent RAG Project - English Vocabulary Knowledge Graph Visualization System 词源智能RAG项目 - 英语词汇知识图谱可视化系统 英 - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: feature/morphology-databases - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-11 - **Last Updated**: 2026-11-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: 玩转英语词汇, 智能体, AI ## README # EtymologyRAG · 词源智能 RAG **输入一个英文单词,把它的词源链、同源词族、语义关系、搭配与真实语料一起摊开。** 后端是一个只读的 SQLite 词库 + Flask API,前端是一份不需要构建的静态页面。 > 当前版本:**V11.121**(`frontend/vue_latest/js/app.js` 里的 `APP_VERSION` 是唯一版本源) > 许可:**AGPL-3.0-or-later** —— 见 [LICENSE](LICENSE) > 🧊 **已冻结(2026-10-24)**:自 V11.121 起不再开发。这份是桌面主项目代码;后续要做安卓版时另立工程,不改这里的任何一行。 | | | |---|---| | 词条 | 2,380,743 行(`words`) | | 语义关系 | 4,940,254 条(`relations`)+ 5,156,540 条分类(`relation_categories`) | | 主库体积 | 4.32 GiB(`data/unified_db/vocabulary.db`) | | 后端 | Python 3 + Flask(37 个 `.py`(含 `ai/` 包 3 个)/ 31 个路由) | | 前端 | 23 个 `window.createXxxModule` 模块 + `app.js` + `api.js` / `constants.js` / `utils.js`,**无打包器** | | 前端依赖 | Vue **3.5.44** / Cytoscape **3.28.1**,**本地固定副本**(`frontend/vue_latest/vendor/`)—— 断网可用 | | 守卫脚本 | 43 个 `tests/check_*.py` + 3 个 `tests/check_*.js`(无头 `vm` 门)+ 8 个 `tests/test_*.py` + 1 个无头前端 harness | | 交付加密 | 九个只读库可用 SQLCipher 页级加密(`build/windows/encrypt_data.py`),密钥**不在仓库** | --- ## 1. 运行环境 | 项 | 要求 | |---|---| | 操作系统 | Windows 10 1809+ / 11 x64(打包目标);Linux / macOS 源码可跑,未做安装包 | | Python | **3.10+**;开发与打包实测 **3.12.10 x64** | | 依赖 | 见 `requirements.txt`(Flask / flask-cors / requests / networkx) | | 词库 | **不在仓库里**,见第 2 节 | ```bat python -m venv venv venv\Scripts\python.exe -m pip install -r requirements.txt ``` > `requirements.txt` 只列**运行时**依赖。`data_processing/` 下重建词库需要 > `nltk` / `wiktextract` / `lupa` / `joblib` 等重包,**不建议**装进同一个 venv > —— PyInstaller 会把它们一起拖进安装包(`.spec` 里已列进 `excludes`)。 --- ## 2. 词库:这是跑起来的前提 仓库**只放代码**,不放数据。`data/` 已被 `.gitignore` 忽略,主库一个文件就 4.32 GiB。 ``` data\ ├─ unified_db\vocabulary.db 主库(4.32 GiB,词条 / 关系 / 义项标签) ├─ ecdict.db 英汉词典(74.8 MB) ├─ collocations.db 搭配与语料统计(145 MB) ├─ word_family.db 词族与词频(81.2 MB) ├─ oewn.db Open English WordNet(41.8 MB) ├─ wordfreq.db 词频排序(9.6 MB) ├─ cmudict.db 美式音标(5.2 MB) ├─ polarity.db 情感极性(1.8 MB) └─ degree_scale.db 程度量级(84 KB) ``` 三条取数据的路: 1. **拿现成的词库包**(推荐):项目的 Release 里提供 `EtymologyRAG-Data-*.exe` (Inno 安装包,**2026.11 版实测 833 MiB**,装的是 9 个库、不是整棵 `data\`)。 它**默认装到 `%LOCALAPPDATA%\EtymologyRAG\data`** —— 便携版(exe 旁边)、 Inno 版、MSIX 版三条路都从这个位置读库,所以先装程序还是先装词库都可以。 例外:如果程序是用 Inno 包**装到自定义目录**的(比如为了省 C 盘选 `D:\RAG`), 词库包会跟随过去,装成 `<程序目录>\data`(`launcher` 的候选第 1 条); 老位置已有词库时**不会搬**,避免一份 4.57 GB 变两份。 手动版也行:把这 9 个库按同样结构拷到那个目录即可。 2. **自己重建**:`data_processing/` 下的脚本 + 原始语料(Brown / OANC / ECDICT / Open English WordNet 等,见 `docs/EXTERNAL_DATA_SOURCES.md`)。**需要几十 GB 磁盘 与数小时算力**,普通使用者不要走这条。 3. **只跑前端看界面**:没有词库时服务会以 503 回应查询接口,但页面本身能打开。 > 程序如何找到词库:`launcher.py` 按 **① exe 旁边的 `data\` → ② `%LOCALAPPDATA%\EtymologyRAG\data` > → ③ `%LOCALAPPDATA%\Programs\EtymologyRAG\data`(老路径)** 依次探测,谁有主库接谁; > `--data-dir` / `ETYMOLOGY_DATA_DIR` 仍然优先。`--selftest` 会打出 `data_source` 与 > `data_candidates` 两行,回答「我词库到底装哪了」。 > 装了词库包的话,`data\DATA_VERSION.json` 记着 9 个库的字节数与 sha256 —— > 报障时先看它(`make_data_version.py --check` 可核对有没有被换过)。 > ⚠️ **`data\vocab_user.db` 与 `data\translation_tm.db` 是「用户可写数据」** > (单词本、翻译记忆)。程序运行时会自动接管到 `%LOCALAPPDATA%\EtymologyRAG`。 > 发布词库时**绝不能**把它们打进去 —— 那等于把自己的单词本发给所有用户。 ### 词库可以是密文(V11.83 起) 交付层的九个只读库可以选择用 **SQLCipher 页级加密**(`build/windows/encrypt_data.py`)。 程序**按文件头判**,不看配置:头 16 字节是 `SQLite format 3\0` 就是明文,否则走 sqlcipher3。 所以明文库与密文库可以同时存在,同一个 exe 都能读。 密文库需要一把密钥,三级查找(**顺序固定**): `ETYMOLOGY_DB_KEY` 环境变量 → 程序目录的 `dbkey.hex`(打包版在 `_internal\`)→ 用户目录 `%LOCALAPPDATA%\EtymologyRAG\dbkey.hex`。密钥本身**永远不进仓库** (`.gitignore` 已挡 `dbkey.hex` / `build/private/`),丢了就只能重新发一份词库。 排障看 `--selftest` 的三行:`db_kind`(plain / encrypted)/ `db_key`(present + 来源)/ `db_driver`(sqlite3 / sqlcipher3)。细节见 `docs/DB_ENCRYPTION.md`。 --- ## 3. 从源码直接运行 ```bat :: ① 常规启动(需要显式给 --db 与 --port) venv\Scripts\python.exe web_service\web_api.py --db data\unified_db\vocabulary.db --port 5099 :: ② 桌面入口(推荐):自动把 data\ 接到词库、自动挑空闲端口、就绪后开浏览器 venv\Scripts\python.exe web_service\launcher.py :: ③ 自检:打印四根路径出口 + 主库是否可读(打包后排查"数据到底在哪") venv\Scripts\python.exe web_service\launcher.py --selftest ``` 浏览器打开 即可。 页面**不依赖外网**:Vue 与 Cytoscape 是仓库里的固定副本(`frontend/vue_latest/vendor/`), 断网、CDN 被墙、公司防火墙拦 CDN 都能打开。**不要再往 `index.html` 里加 `http(s)://` 的 `