ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

如何把 ECDICT 免费英汉词典数据库变成你的专属查词引擎:76 万词条实战指南

如何把 ECDICT 免费英汉词典数据库变成你的专属查词引擎:76 万词条实战指南 如何把 ECDICT 免费英汉词典数据库变成你的专属查词引擎76 万词条实战指南【免费下载链接】ECDICTFree English to Chinese Dictionary Database项目地址: https://gitcode.com/gh_mirrors/ec/ECDICT你有没有遇到过这种尴尬写读书工具时用户输入gave你的词典里只有give想给学生做一套四级词汇表手里的数据却连这词是不是四级都不知道翻遍市面上的开源词典数据不是收词太少就是一堆裸 CSV连个音标字段都没有。如果你也在做背单词 App、翻译插件或文本分析工具可以直接用ECDICT 免费英汉双解词典数据库——76 万词条每条记录自带音标、中英双解、词性比例、考试大纲标签、BNC 与当代语料库双重词频排名还预先把动词时态、名词复数全部算好存进了字段里。这篇文章带你用半小时把这份数据跑起来再花点时间吃透它最值钱的三个机制。第一步拉代码十五分钟跑通第一个查询先拉仓库项目只有一层目录东西不多git clone https://gitcode.com/gh_mirrors/ec/ECDICT cd ECDICTECDICT/ ├── ecdict.csv # 基础版数据76 万词条UTF-8 编码 ├── stardict.7z # 完整版压缩数据222 万收词 ├── lemma.en.txt # BNC 语料库词干数据库8.4 万词根 ├── stardict.py # 核心编程接口DictCsv / StarDict / DictMySQL / LemmaDB ├── dictutils.py # 词典合并、差异、mdx/stardict 导出工具 ├── linguist.py # WordNet / NodeBox 封装 ├── resemble.txt # 近义词辨析文本数据 └── wordroot.txt # 词根词缀学习资料JSON核心就一个文件stardict.py纯标准库实现Python 2/3 通吃。先跑通第一个查询# demo1.py from stardict import DictCsv d DictCsv(ecdict.csv) w d.query(perceive) print(w[phonetic]) # [pəsiːv] print(w[translation]) # 中文释义每行一条 print(w[tag]) # cet4 cet6 ky toefl ielts ← 考试标签 print(w[exchange]) # d:perceived/p:perceived/3:perceives/i:perceiving print(词条总数:, d.count()) # 770611亲测这段在项目目录下直接python3 demo1.py就能跑出结果。查一个词返回一个 Python 字典字段一眼能看懂字段含义示例值phonetic音标[pəsiːv]definition英文释义每行一条vt. to become aware of ...translation中文释义每行一条vt. 察觉感觉理解认知tag考试大纲标签空格分隔zk gk cet4 cet6 ky toefl ielts grebnc英国国家语料库词频排名2776frq当代语料库词频排名2165collins柯林斯星级0~52oxford是否牛津 3000 核心词0/1exchange词形变化d:perceived/p:perceived/3:perceives/i:perceiving这里有个坑CSV 文件 300 多 MB本地反复打开很慢。README 里作者也明确说本地使用 csv 很痛苦。项目为此提供了全局转换函数一条命令把 CSV 转成 SQLite# demo2.py import stardict stardict.convert_dict(ecdict.db, ecdict.csv)注意参数顺序是目标在前、源在后。转完再打开查询是毫秒级from stardict import StarDict db StarDict(ecdict.db) # 按 .db 后缀自动走 SQLite print(db.query(perceive)[translation])拆开看三个最值钱的设计时态、词干、模糊匹配ECDICT 真正和普通词典拉开差距的是下面这三个数据机制。理解了它们你才知道怎么把数据用出花来。1. exchange 字段所有时态、复数、比较级预先算好exchange字段格式是类型:单词/类型:单词冒号前的字母代表词形类型类型含义例子p过去式perceivedd过去分词perceivedi现在分词perceiving3第三人称单数perceivesr形容词比较级bettert形容词最高级bests名词复数boxes0原型 Lemmaperceived → perceive这个字段是按 BNC 语料库加 NodeBox / WordNet 语言工具包生成的覆盖了几乎所有动词的四种时态。这意味着你的 App 查perceived时可以直接告诉用户这是 perceive 的过去式完全不用自己写变换算法。自己写规则判断词尾 -ed/-ing 的方案我试过遇到took、went、teeth这种不规则变化直接崩溃数据库查询才是可靠方案。2. LemmaDB 词干库把 gave 还原成 givelemma.en.txt是作者扫描 BNC 语料库全部 1 亿词条生成的词干数据库stardict.py里的LemmaDB类负责加载它。它支持双向查询正查衍生词、反查词根。# demo3.py from stardict import LemmaDB lm LemmaDB() lm.load(lemma.en.txt) def lemmatize(words): 一批词变体 → 原型词列表 return [lm.word_stem(w)[0] for w in words] print(lemmatize([gave, taken, looked, teeth])) # [give, take, look, tooth] # 反方向查 take 的所有变体 print(lm.get(take)) # [took, taken, taking, takes] print(词根数量:, lm.stem_size(), 衍生词数量:, lm.word_size()) # 词根数量: 84487 衍生词数量: 102034为什么说数据库优先、算法兜底因为 95% 的情况数据库直接命中命中不了的才去跑词尾推断。在词频统计场景里这个先后顺序决定了你的结果准不准。3. sw 字段连字符、空格、大小写全都不再是问题每条记录里有个隐藏字段swstrip-word是把单词里非字母数字的字符全去掉并转小写后的结果def stripword(word): return (.join([n for n in word if n.isalnum()])).lower() print(stripword(long-time)) # longtime调用match()时传第三个参数True就启用模糊匹配d DictCsv(ecdict.csv) print(d.match(long-time, limit6, stripTrue)) # [(407634, longtime), (407120, long time ago), (407387, long-time burning oil), # (407388, long-time load), (407121, long timer), (407389, long-timer)]long-time、long time、longtime这三种形态在词典里往往分散在不同词条普通词典你输入其中一个就查不出另外两个。用sw匹配就能把它们一网打尽——这正好覆盖了用户拼写不规范的真实场景。三个真实场景从背单词到翻译插件场景一给 Anki 批量生成带考试标签的记忆卡片很多人用 Anki 背单词痛点是要把四级词表从海量词典里筛出来。ECDICT 的tag字段就是为这个设计的# anki_cards.py from stardict import StarDict db StarDict(ecdict.db) def gen_cards(exam, limit50): 筛出指定考试的词生成 Anki 卡片正反面 cards [] for _, word in db: # 遍历全部词条 data db.query(word) if exam in (data[tag] or ).split(): front fh1{word}/h1p[{data[phonetic]}]/p back data[translation].replace(\n, br) cards.append((front, back)) if len(cards) limit: break return cards cards gen_cards(cet4, 50) print(cards[0])再进一步bnc和frq两个词频字段可以帮你做去重合比如想背托福但跳过四六级词汇把 tag 里同时含toefl和cet4的词剔除即可——这是很多词典数据做不到的。场景二翻译插件的三级回退查询给编辑器写翻译插件时用户敲什么词都可能遇到。一个健壮的查询链应该是精确查询 → 词干还原再查 → 模糊匹配兜底# translate.py from stardict import DictCsv, LemmaDB dict_db DictCsv(ecdict.csv) lemma_db LemmaDB() lemma_db.load(lemma.en.txt) def lookup(word): # 第一级精确查询 data dict_db.query(word) if data and data[translation]: return data # 第二级还原成原型再查gave → give stems lemma_db.word_stem(word) if stems: data dict_db.query(stems[0]) if data: return data # 第三级模糊匹配 sw 字段返回候选列表 return dict_db.match(word, limit5, stripTrue) print(lookup(perceives))这个三级回退在真实插件里基本能覆盖 99% 的输入而且每一级都有明确的语义精确、形态、近似。场景三统计一篇文章里的生词密度给阅读 App 加生词标记功能时需要先算每个单词的词频等级。双词频的价值在这里体现得淋漓尽致# freq_analysis.py import re from stardict import StarDict db StarDict(ecdict.db) def word_frequency(text): words re.findall(r[a-zA-Z], text.lower()) stats {} for w in words: if w in stats: continue data db.query(w) if not data: continue stats[w] (data[bnc], data[frq]) # (传统词频, 当代词频) return stats stats word_frequency(The quay was crowded with sailors reading about Taliban.) print(stats[quay]) # (8907, 22357) 传统高频、现代低频 print(stats[taliban]) # (None, 6089) 现代高频、传统语料库未收录同一批数据bnc帮你判断读 19 世纪名著时这个词熟不熟frq帮你判断读今天的科技新闻时熟不熟。做一个名著阅读模式和外刊阅读模式的双模式生词标亮就用这两个字段切换权重。避坑指南新手最容易翻车的四个地方Q1用 Excel 直接打开 ecdict.csv 全是乱码必乱。文件是 UTF-8 编码Excel 默认按 GBK 解析。正确姿势Excel 菜单 → 数据 → 从文本/CSV → 选择文件 → 文件原始格式选 UTF-8 → 逗号分隔。或者干脆别用 Excel直接用 Python 接口。Q2查词为什么大小写不敏感设计如此。DictCsv内部把单词统一转小写后建索引SQLite 表字段也带COLLATE NOCASE。你查Perceive和perceive结果一样这是有意的写业务代码时别去纠结。Q3query_batch返回结果和传入顺序对不上对得上但有个细节传入的 key 会被转成小写做匹配返回值按你传入 key 的顺序排列查不到的位置是None。批量查词后记得过滤Noneresults [r for r in db.query_batch([perceive, not_a_word]) if r]Q4MySQL 连不上DictMySQL依赖MySQLdb模块得先pip install mysqlclient或按平台装对应的 MySQLdb。连接串支持两种写法字典参数或 URL 字符串from stardict import DictMySQL mysql_dict DictMySQL(mysql://root:passwordlocalhost/ecdict)进阶玩法二次开发与词典生态性能层面SQLite 建表时就已经内置了word、sw等索引见stardict.py里的CREATE INDEX日常查询不需要你再建索引。如果数据量继续膨胀ecdict.7z是 222 万收词的完整版转换逻辑完全一样。日常修订的双库工作流README 推荐做法亲测好用维护一个小 CSV 文件存你的自定义修订查询时先查小 CSV查不到再查大 SQLite 库修订稳定后用dictutils.py或convert_dict一次性合并进大库。# dual_db.py import stardict small stardict.DictCsv(custom.csv) big stardict.StarDict(ecdict.db) def query_anywhere(word): data small.query(word) or big.query(word) return data导出成字典软件格式stardict.tools里封装了export_stardict生成.idx/.dict/.ifo三件套用 DictEditor 转星际译王词典和export_mdict生成 mdx 源文件用 MdxBuilder 转 GoldenDict/欧陆/DeepL 可加载的 mdx。dictutils.py里还有Resemble类可以解析resemble.txt里的近义词辨析数据比如 quite/rather/pretty/fairly 的区别合并进你的自定义词典。这些正是简明英汉字典增强版的生成路径。参与贡献数据层故意用 CSV 而不是二进制格式就是为了让你能直接改文本提 PR。修订流程是先在你自己的小 CSV 里改 → 用一段时间验证没问题 → 合并回主库或提交 CSV 差异。stardict.tools提供了discrepancy_export/discrepancy_import这对函数专门导出两个词典之间的差异、再把修订导入回主库。这份数据适合谁用一句话总结凡是需要结构化英汉词典数据的场景ECDICT 都是零成本的第一选择。做背单词类 App / Anki 插件考试标签 双词频 词形变化直接给你排好版做阅读器 / 翻译工具词干还原 sw 模糊匹配解决用户输入的任意形态做文本分析 / NLP 预处理8.4 万词根的词干库是现成的、比规则算法可靠得多的归并方案做桌面 / 移动端离线词典SQLite 毫秒级查询200 多 MB 完全塞得进本地。仓库里wordroot.txt词根词缀资料和resemble.txt近义词辨析还是额外的学习素材装进你的词典 App 里就能直接提升内容深度。现在就去把代码拉下来跑一遍上面的 demo1.py你会在五分钟内完成第一次查词自由。【免费下载链接】ECDICTFree English to Chinese Dictionary Database项目地址: https://gitcode.com/gh_mirrors/ec/ECDICT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表