english-words如何一键生成全套词表文件?gen.sh与create_json.py数据流水线源码深度剖析
【免费下载链接】english-words:memo: A text file containing 479k English words for all your dictionary/word-based projects e.g: auto-completion / autosuggestion项目地址: https://gitcode.com/gh_mirrors/en/english-words
english-words 是一个包含 47 万+ 英语单词的开源词表词库项目,通过 scripts/gen.sh 一条命令即可从原始词表一键生成 words_alpha.txt 纯字母词表、words_dictionary.json 英汉速查 JSON 词典和全套 zip 压缩包。本文将深度剖析这条「排序去重 → 过滤 → JSON 转换 → 打包」的数据流水线,带你看懂每一行脚本背后的设计意图,让你的自动补全、拼写检查、单词消消乐项目直接受益。
5 条命令看懂 english-words 数据流水线全景
整个生成流程被封装在 scripts/gen.sh 中,核心逻辑只有 5 行:
sort -u words.txt -o words.txt cp words.txt words_alpha.txt python3 scripts/create_json.py words_alpha.txt > words_dictionary.json find . -type f -name "words*" -maxdepth 1 -execdir zip '{}.zip' '{}' \;一句话概括它的职责:输入一份原始词表,输出三种格式、三种大小、开箱即用的成品词库。
| 产物文件 | 内容 | 规模 | 适用场景 |
|---|---|---|---|
| words.txt | 全量词表(已排序去重) | 约 46.6 万行 | 数据库导入、语料训练 |
| words_alpha.txt | 仅纯字母单词 | 约 37 万行 | 自动补全、拼写校验 |
| words_dictionary.json | words_alpha 的 JSON 版本 | 约 6.6 MB | Python 高速查词 |
| 三个 *.zip 包 | 对应文件的压缩版 | 合计约 3.3 MB | 快速下载分发 |
流水线第一步:sort -u 让词表「有序且唯一」
sort -u words.txt -o words.txt这是整个流水线的地基。words.txt 原始数据来自 infochimps 词库 与 Moby Word II(Gutenberg 编号 3201) 等公开词源,天然存在大量重复行。sort -u一步完成两件事:
-u(unique):自动去重,保证每个单词只出现一次;sort(字母序):让词表严格有序——有序词表不仅方便人工抽查,还能用二分查找实现 O(log n) 的快速单词校验。
流水线第二步:cp + grep 提取「纯字母词表」
cp words.txt words_alpha.txt grep -v '[[:alpha:]]*' words_alpha.txt注意这一步的取巧之处:words_alpha.txt是words.txt的副本,而 words.txt 在排序后,纯字母单词恰好整体排在数字、符号、混合格式词的前面(例如2、10-point、3D这类词条会沉底)。项目维护者据此约定:只需截取前 37 万行「纯字母段」,就得到了一份不含数字和符号的高质量词表,也就是 README 中推荐的「快速方案」words_alpha.txt。
grep -v那一行则充当「质检探针」——把仍夹带非字母字符的行打印出来供人工核对,属于流水线里的一道防错关卡。
💡 使用建议:做自动补全、拼写检查请选 words_alpha.txt;做语料库、词频统计请选 words.txt。
流水线第三步:create_json.py 把词表变成 O(1) 速查字典
scripts/create_json.py 是流水线里唯一的 Python 脚本,全文逻辑不到 10 行,却解决了一个关键痛点——查词速度:
words = open(sys.argv[1]) word_list = words.readlines() json_words = {word.rstrip(): "1" for word in word_list} print(json.dumps(json_words, indent=4))它的设计思路非常巧妙:
- 词典即数据库:把每个单词作为 key、统一赋值为
"1",生成形如{"a": 1, "aa": 1, "aaa": 1}的 JSON 结构,加载后就是一个 Python dict,单词存在性判断从「遍历列表」升级为哈希O(1) 查询; - 零依赖:只用了标准库
sys+json,任何装了 Python 3 的机器都能直接跑,无需 pip 安装任何包; - 流式输出:直接
print到 stdout,由 gen.sh 用>重定向写入 words_dictionary.json,脚本本身不落盘、不污染工作区。
项目还附带了一个演示脚本 read_english_dictionary.py,展示了最精简的消费方式——加载词表为 set,然后用'fate' in english_words这样一行代码完成单词校验,这正是该 JSON 词库面向的目标用法。
流水线第四步:find + zip 一键打包分发
find . -type f -name "words*" -maxdepth 1 -execdir zip '{}.zip' '{}' \;最后一步用find精确定位根目录下所有words*文件,逐个压缩为同名 zip。配合执行前的rm *.zip(清理旧包),保证了每次运行都产出干净的、与源文件完全同步的压缩包,不会出现「zip 里还是旧词表」的发布事故。这也是为什么仓库中 words.zip、words_alpha.zip、words_dictionary.zip 三个压缩包与源文件一一对应。
如何一键运行这套词表生成器?
环境要求很简单:Linux/macOS 命令行 + Python 3 + zip 工具。
第 1 步:获取项目
git clone https://gitcode.com/gh_mirrors/en/english-words cd english-words第 2 步:执行生成脚本
bash scripts/gen.sh运行完毕后,根目录即产出全套成品词表文件。若想单独重跑某一步,脚本头部注释也写明了独立用法,例如:python3 scripts/create_json.py words_alpha.txt(见 create_json.py 第 28-29 行)。
数据流水线设计小结:新手最值得借鉴的 3 个套路
| 套路 | 在英文词表项目中的体现 | 可迁移经验 |
|---|---|---|
| 单入口脚本编排 | gen.sh 串联 5 条命令 | 用 Shell 脚本把「多步数据加工」固化为一条命令 |
| 幂等可重跑 | 先rm旧 zip 再重新打包 | 每次全量重建,避免增量状态污染 |
| 零依赖转换层 | create_json.py 只用标准库 | 数据格式转换脚本保持极简,谁都能跑 |
这套「sort 去重 → 规则过滤 → 字典化 → 打包分发」的极简流水线,没有任何复杂框架,却把一个 47 万词的原始语料加工成了多格式、可直接落库投产的英语词表产品——这正是它成为众多拼写检查、自动补全、单词学习类项目首选词源的原因。
【免费下载链接】english-words:memo: A text file containing 479k English words for all your dictionary/word-based projects e.g: auto-completion / autosuggestion项目地址: https://gitcode.com/gh_mirrors/en/english-words
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考