ECDICT 开源英汉词典数据库实战指南:一文读懂查询、词形还原与三格式选型
【免费下载链接】ECDICTFree English to Chinese Dictionary Database项目地址: https://gitcode.com/gh_mirrors/ec/ECDICT
你写一个背单词 App,本地想内嵌一套英汉词典,翻遍网上资料却踩了三个坑:要么词条太少连四级词汇都缺,要么没有音标没有词性标注,要么词典格式封闭没法塞进自己的程序里。如果你正卡在这种"想要一份干净、可编程、带词频等级的英汉词典数据"的处境,那 ECDICT 这款免费开源英汉词典数据库就是为你准备的答案。它收录了超过 76 万条英汉词条,附带 BNC 与当代语料库双重词频、考试大纲标签、完整词形变化,并提供 CSV、SQLite、MySQL 三种存储格式和统一的 Python 编程接口,是搭建翻译工具、语言学习产品与文本分析管线时最省心的数据底座。
一分钟摸清数据长什么样
ECDICT 的核心数据是一张扁平的词条表,每个单词一行,列的含义非常直观。以ecdict.mini.csv里的记录为例,你一眼就能看明白各字段的作用:
| 字段 | 含义 | 典型值 |
|---|---|---|
| word | 单词 | 'hood |
| phonetic | 音标 | hʊd |
| translation | 中文释义 | n. 罩;风帽;面罩 |
| pos | 词性占比 | n:46/v:54 |
| tag | 考试标签 | cet4 cet6 toefl ielts |
| bnc / frq | 传统 / 当代词频 | 8906 / 21000+ |
| exchange | 词形变化 | p:perceived/d:perceived/... |
| oxford / collins | 牛津3000 / 柯林斯星级 | 1 / 5 |
每个词条还隐藏了一个sw(strip-word)字段:把单词里所有非字母数字的字符去掉并转小写,比如long-time会变成longtime。这个字段是后面模糊匹配功能的关键,我们稍后会细讲。
五分钟跑通第一个查询
仓库根目录的stardict.py是唯一的入口文件,同时实现了三个类:DictCsv读写 CSV、StarDict读写 SQLite、DictMySQL读写 MySQL。三个类接口完全一致,切换存储格式时不用改业务代码。
# 拉取仓库(含 ecdict.csv 与全套工具) git clone https://gitcode.com/gh_mirrors/ec/ECDICT下面这段代码演示最基础的单词查询,输出音标、中文释义和两种词频:
from stardict import DictCsv # 加载 CSV 基础版本(76 万词条),首次载入会构建内存索引 dict = DictCsv('ecdict.csv') # 查询任意单词,返回一个 Python 字典 info = dict.query('ability') print(info['phonetic']) # 音标 print(info['translation']) # 中文释义 print(info['bnc'], info['frq']) # BNC 排名与当代语料库排名 print(info['tag']) # 属于哪些考试大纲如果你不想每次等 CSV 加载,花十几秒把数据转成本地 SQLite 即可,之后查询基本无感:
from stardict import StarDict, DictCsv # 把 CSV 逐条注册进 SQLite 数据库文件 csv_dict = DictCsv('ecdict.csv') db = StarDict('my_ecdict.db') for _, word in csv_dict: data = csv_dict[word] db.register(word, data, commit=False) db.commit()三个最值得深挖的卖点
卖点一:Exchange 字段,一个字段装下全部词形变化
传统词典只收录原形,用户输入perceived往往查不到。ECDICT 用exchange字段把动词时态、形容词比较级、名词复数全部记录在案,编码规则一目了然:p过去式、d过去分词、i现在分词、3三单、r比较级、t最高级、s复数、0词干原型。
# 查询一个不规则动词的完整变形 info = dict.query('perceive') print(info['exchange']) # 输出形如:d:perceived/p:perceived/3:perceives/i:perceiving # 即过去分词 perceived、过去式 perceived、三单 perceives、现在分词 perceiving有了它,你的 App 查词时可以直接展示"过去式/复数/比较级"全套信息,背单词卡片也能自动生成变体题,这是绝大多数开源词典数据给不了的能力。
卖点二:LemmaDB,把变体还原成原型的最可靠方案
做词频统计时,goes、went、gone如果不归并成go,统计结果就是碎的。网上流行的规则算法(砍-ed、砍-ing)准确率堪忧,而 ECDICT 直接提供了基于 BNC 语料库一亿词条生成的词干数据库lemma.en.txt,收录了 18 万+ 词形,归属 8.4 万+ 个词干组。
from stardict import LemmaDB # 加载词干数据库并做归并查询 lemma = LemmaDB() lemma.load('lemma.en.txt') # 把文档里抓到的变形词还原为原型 stems = [lemma.word_stem(w) for w in ['went', 'giving', 'children']] print(stems) # 输出 ['go', 'give', 'child']word_stem返回的是该词的所有可能原型,配合频率信息即可选出最合理的那个。官方建议把数据库查询作为首选,算法兜底放第二层。
卖点三:sw 字段驱动的模糊匹配,连写错都能帮你找到
用户输入long-time,词典里只有longtime或long time,严格匹配必然失败。ECDICT 用sw字段解决了这个痛点:match方法开启fuzzy后,会按去符号后的 key 去匹配,一次性把long-time、longtime、long time全部召回。
# 模糊匹配:无论用户怎么连写、加连字符都能命中 hits = dict.match('long-time', limit=10, fuzzy=True) print(hits) # 输出 long-time、longtime、long time 及其派生词这个机制参考了 Mdx 词典的容错设计,作为"查不到时的兜底搜索"非常实用。
两个贴近真实业务的落地场景
场景一:做一款分级背词 App
利用tag和词频字段,可以一键筛出"四级范围内但词频靠后"的冷门词,或"托福独有、与六级不重合"的词,给用户做差异化推荐:
def pick_words(dict_obj, tag_name, max_rank): """按考试标签 + 当代词频上限筛选单词""" result = [] for _, word in dict_obj: data = dict_obj[word] if tag_name in (data.get('tag') or ''): if data.get('frq') and data['frq'] <= max_rank: result.append(word) return result[:500] # 拉取当代语料库中排名前 1 万的四级词汇 words = pick_words(dict, 'cet4', 10000)场景二:做翻译插件的前置归一化
翻译插件先查缓存词库,失败后用LemmaDB还原原型再查一次,最后才走模糊匹配,三阶段显著提升命中率,减少对在线 API 的依赖:
def smart_query(word): """三级查询:原形 -> 词干还原 -> 模糊匹配""" hit = dict.query(word) if hit: return hit stem = lemma.word_stem(word) if stem and stem[0] != word: return dict.query(stem[0]) fuzzy = dict.match(word, limit=1, fuzzy=True) return dict.query(fuzzy[0][1]) if fuzzy else None三种格式怎么选:速度、内存与并发的取舍
| 对比维度 | CSV(DictCsv) | SQLite(StarDict) | MySQL(DictMySQL) |
|---|---|---|---|
| 单次查询 | 毫秒级(内存索引) | 最快 | 受网络影响 |
| 首次加载 | 需要全量读入内存 | 无需 | 无需 |
| 内存占用 | 高 | 低 | 低 |
| 并发 | 单进程 | 只读并发友好 | 读写并发 |
| 适合场景 | 脚本调试、数据修订 | 桌面 App、离线工具 | 多端在线服务 |
实战建议:开发期用 CSV 看差异、方便提 PR;本地日常使用一律转 SQLite,快且省内存;如果要做成在线查询服务或有团队协作写库的需求,再上 MySQL。需要强调的是,仓库根目录的ecdict.csv是基础版,完整大数据集在stardict.7z压缩包里。
常见坑与避坑清单
- 别用 Excel 直接双击打开
ecdict.csv,会乱码。要用"数据 → 从文本导入",指定逗号分隔和 UTF-8 编码。 - 修订数据时,建议小 CSV 配大 SQLite 双库同查:新词先写进小 CSV 试用,稳定后再合并进大库。
detail字段是 JSON 文本,读写时stardict.py会自动做序列化和反序列化,别手动改字符串格式。- 提交词条贡献时记得用 CSV 格式,方便维护者看 diff 和 patch。
生态与未来
围绕 ECDICT 已经长出了一条小生态:dictutils.py提供词典差异导出/导入、CSV 与 SQLite/MySQL 互转、StarDict 与 MDX 格式导出;linguist.py封装了 WordNet 和 NodeBox 的语言处理能力;wordroot.txt收录了大量词根词缀资料,resemble.txt是近义词辨析笔记,都是背单词产品的优质素材。它也被 T.vim、Trans.nvim 等编辑器翻译插件集成,社区持续在为核心两万词的释义准确性做修订。
写在最后
一句话总结 ECDICT 的价值:一份数据,三种格式,一把 Python 接口,覆盖查询、词形、词干、模糊匹配四大刚需。从个人脚本到生产级服务,它都能当那块最稳的地基。去 clone 一份仓库,先把stardict.py跑起来,再按你的业务挑一种格式落地——十分钟后,你的词典功能就能上线了。
【免费下载链接】ECDICTFree English to Chinese Dictionary Database项目地址: https://gitcode.com/gh_mirrors/ec/ECDICT
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考