This Project is now stopped updating.
Words In Head 是一个功能丰富的单词学习命令行程序,简单有效,支持多种学习模式,如快速查看、练习、听写和学习。程序具备语音朗读功能,支持中英文发音,并且能够缓存语音文件以提高性能。同时,它允许用户选择不同的单词本(word book)和学习单元,还可以切换英语发音(英音/美音)。
- 多种学习模式:提供快速查看、练习、听写和学习四种学习模式,满足不同学习需求。
- 语音朗读:支持中英文语音朗读,可选择英音或美音。
- 语音缓存:将语音文件缓存到本地,减少重复生成语音的时间。
- 错误记录与复习:在学习过程中记录错误的单词和短语,并循环练习直到全部掌握。
- 多单词本支持:可以加载多个单词本,并选择不同的学习单元。
- 配置文件支持:通过配置文件灵活管理单词本和学习内容。
colorama:用于终端颜色输出。edge-tts:用于语音合成。pygame:用于音频播放。tabulate:用于表格输出。tqdm:用于进度条显示。
settings.json:配置语音相关设置,如默认语音模型、英语发音(英音/美音)、听写延迟等。profiles目录:存放单词本的配置文件,支持手动和自动生成单词列表。
为避免因系统中存在多个Python版本导致调用错误,推荐创建启动文件并使用Python绝对路径:
-
Windows 系统:
在程序根目录创建start.bat文件,内容如下(需替换为你的Python安装路径):@echo off "C:\Program Files\Python313\python.exe" main.py # 替换为你的Python绝对路径 pause # 程序结束后暂停,方便查看报错信息
双击
start.bat即可运行。 -
Linux/macOS 系统:
在程序根目录创建start.sh文件,内容如下(需替换为你的Python安装路径):#!/bin/bash /usr/local/bin/python3 main.py # 替换为你的Python绝对路径 read -p "按回车退出..." # 程序结束后暂停,方便查看报错信息
赋予执行权限并运行:
chmod +x start.sh ./start.sh
若需安装依赖库,同样建议使用绝对路径确保环境正确(以Windows为例):
"C:\Program Files\Python313\python.exe" -m pip install colorama edge-tts pygame tabulate tqdm(Linux/macOS 替换为对应的Python绝对路径,如 /usr/local/bin/python3 -m pip install ...)
- 选择单词本和学习单元:程序启动后,会显示可用的单词本和学习单元,输入对应的序号选择要学习的内容。
- 选择学习模式:进入学习单元后,可选择快速查看、练习、听写或学习模式。
- 其他操作:
a:返回上一页。b:回到首页。c:改变英语发音(英音/美音)。d:清空语音缓存。q:退出程序。
单词库以JSON格式存储,需放置在项目根目录的 data 文件夹中,核心结构如下:
- 整体是一个对象(Object),用
{}包裹。 - 内部包含多个自定义键值对,键名可根据需求自定义(如按单元分组用
"unit1""unit2",按部分分组用"part1""part2"等)。
每个自定义键的值是一个对象(Object),包含以下可选键:
words:存储单词的数组(Array),若没有单词可省略。phrases:存储短语的数组(Array),若没有短语可省略。
words 数组中的每个元素是一个对象(Object),必须包含以下字段:
word:单词的拼写。meaning:中文释义。part_of_speech:词性(如"n."表示名词,"v."表示动词)。phonetic_symbol:音标(你能看得懂的音标,如/ˈæpl/)。
扩展说明:
可根据需求添加自定义字段(如 example 例句、synonym 同义词等),程序在展示详细信息时会自动显示这些字段。
phrases 数组中的每个元素是一个对象(Object),仅需包含以下必填字段:
phrase:短语的拼写。meaning:中文释义。
可选字段(完全按需添加,不强制):
part_of_speech:词性(如"phr."表示短语)。phonetic_symbol:音标。example:例句等扩展信息。
{
"unit1": {
"words": [
{
"word": "apple",
"meaning": "苹果",
"part_of_speech": "n.",
"phonetic_symbol": "/ˈæpl/",
"example": "I eat an apple every day."
},
{
"word": "run",
"meaning": "跑",
"part_of_speech": "v.",
"phonetic_symbol": "/rʌn/"
}
],
"phrases": [
{
"phrase": "run out of",
"meaning": "用完,耗尽"
// 无任何可选字段,符合基础要求
},
{
"phrase": "look forward to",
"meaning": "期待",
"example": "I look forward to your reply."
// 仅添加例句,无词性和音标
}
]
},
"part2": {
"words": [
{
"word": "book",
"meaning": "书",
"part_of_speech": "n.",
"phonetic_symbol": "/bʊk/"
}
]
// 此处省略phrases,表示该部分无短语
}
}- 键名(如
unit1part2)可自定义,但后续配置文件中需使用相同的键名调用对应内容。 - 单词的字段名(如
wordmeaningpart_of_speechphonetic_symbol)需严格匹配,否则程序可能无法正确识别。 - 短语仅强制要求
phrase和meaning,其他字段(词性、音标等)均为可选,不影响程序运行。 - 空值处理:若某部分无单词或短语,可直接省略
words或phrases键。
每个 profile 文件对应一个单词本(word book),需放在项目根目录的 profiles 文件夹中。文件名可根据单词本主题自定义(如 school_vocab_word_book.json、daily_expressions_word_book.json)。
- 单词本(word book):整个
profile文件代表一个单词本,包含多个「组」或直接可学习的「元素」。 - 组(group):
content数组中的一个配置项,用于归类多个学习内容,通常有明确的名称(如「基础单元」「重点短语」)。 - 元素(element):组内的具体学习内容,由单词库中的单元组合而成(如合并
unit1和unit2形成的学习单元)。
文件最外层为一个对象(Object),包含以下两个键:
book_name:字符串类型,表示单词本的名称(如「小学英语单词本」)。content:数组类型,包含多个配置项(每个配置项为一个「组」或直接可学习的「元素」)。
每个配置项是一个对象,分为「带分组的配置」和「无分组的直接学习元素」两种类型:
适用于需要归类的学习内容,需指定 name(组名称)和 generate_method(生成方式)。
适用于按规则自动组合单个单词库中的单元(不支持跨文件),直接通过 data_file_name 和 unit_keys 定义内容,无需额外嵌套 name 和 content 层级,结构如下:
{
"name": "组名称(如「入门单元1-2」)",
"generate_method": "auto",
"content": { // 直接定义内容,无额外嵌套
"data_file_name": "单词库文件名(位于data目录,如primary_vocab.json)",
"unit_keys": ["unit1", ["unit2", "unit3"]], // 支持字符串/数组/嵌套数组
"connection": "连接词(可选,默认'and',如'和')"
}
}参数说明:
data_file_name:指定单个单词库文件(仅支持一个文件,不跨文件)。unit_keys:该文件中需要包含的单元键,格式支持:- 字符串:单个单元(如
"unit1")。 - 数组:多个独立单元(如
["unit1", "unit2"])。 - 嵌套数组:合并多个单元为一组(如
["unit1", ["unit2", "unit3"]],表示「unit1、unit2和unit3」)。
- 字符串:单个单元(如
connection:嵌套数组中合并单元的连接词(如用「-」则显示「unit2 - unit3」),是会自动在两侧加空格的。
适用于灵活聚合多个单词库中的单元(支持跨文件组合),也适用于指定特殊的元素。配置结构需包含元素名称和具体来源配置,层级如下:
{
"name": "组名称(如「跨教材核心词」)",
"generate_method": "manual",
"content": { // 可写单个元素对象,或数组(包含多个元素对象)
"name": "元素名称(如「小学+初中基础词」)",
"content": [ // 可以是数组形式,聚合多个单词库的单元。也可以是单个集合。
{
"data_file_name": "单词库文件名1(如primary_vocab.json)",
"unit_keys": "unit4" // 单个单元(字符串)
},
{
"data_file_name": "单词库文件名2(如common_phrases.json)",
"unit_keys": ["daily", "travel"] // 多个单元(数组)
},
{
"data_file_name": "单词库文件名3",
"unit_keys": ["unit1", "unit2", "unit3"]
}
]
}
}content 中(其中一个)元素参数说明:
name(元素名称):用于标识该元素的名称(如「日常用语+考试高频词」),必填。content(元素内容):可以是数组,可以是对象,数组每个元素是一个对象,包含:data_file_name:单词库文件名(位于data目录)。unit_keys:该文件中需要包含的单元键,支持字符串(单个单元)、数组(多个单元)
适用于无需分组、点击后直接进入学习的内容,必须设置 name: null ,建议不写 generate_method,content内的元素写法与 manual 下差不多:
{
"name": null,
"content": { // 数组也行,多个元素平铺
"name":"学习u1", // 此处与 manual 下元素设置一样。
"content": {
"data_file_name": "grade_1_vocab",
"unit_keys": "u1"
}
}
}{
"book_name": "初一英语单词本",
"content": [
{
"name": "初一上各单元单词",
"generate_method": "auto",
"content": {
"data_file_name": "grade_7_second_semester_vocab.json",
"unit_keys": [
"unit1",
"unit2",
"unit3",
"unit4",
"unit5",
"unit6",
"unit7",
"unit8"
]
}
},
{
"name": "初一下各单元单词",
"generate_method": "auto",
"content": {
"data_file_name": "grade_7_first_semester_vocab.json",
"unit_keys": [
"unit1",
"unit2",
"unit3",
"unit4",
"unit5",
"unit6",
"unit7",
"unit8"
]
}
},
{
"name": "初一上百词大过关",
"generate_method": "manual",
"content": [
{
"name": "初一上U1-U4百词大过关",
"content": {
"data_file_name": "grade_7_second_semester_vocab.json",
"unit_keys": [
"unit1",
"unit2",
"unit3",
"unit4"
]
}
},
{
"name": "初一上U5-U8百词大过关",
"content": {
"data_file_name": "grade_7_second_semester_vocab.json",
"unit_keys": [
"unit5",
"unit6",
"unit7",
"unit8"
]
}
}
]
},
{
"name": "初一下百词大过关",
"generate_method": "manual",
"content": [
{
"name": "初一下U1-U4百词大过关",
"content": {
"data_file_name": "grade_7_first_semester_vocab.json",
"unit_keys": [
"unit1",
"unit2",
"unit3",
"unit4"
]
}
},
{
"name": "初一下U5-U8百词大过关",
"content": {
"data_file_name": "grade_7_first_semester_vocab.json",
"unit_keys": [
"unit5",
"unit6",
"unit7",
"unit8"
]
}
}
]
}
]
}main.py:程序入口,负责初始化命令行程序和处理用户交互。word_learner.py:单词学习核心功能模块,提供学习、听写和浏览等功能。voice_player_with_cache.py:支持语音缓存的语音播放器,负责语音合成和播放(短语默认不朗读,有音标时触发)。handle_configuration_files.py:处理配置文件,解析单词本和学习内容。handle_word_books.py:解析所有单词本的内容。settings.json:配置文件,存储语音和其他设置。data/:存放单词库JSON文件的目录。profiles/:存放单词本配置文件的目录。voice_cache/:存放语音缓存文件的目录,用于存储生成的语音文件以提高性能。audios/:存放内置音频文件(如听写开始提示音dictation_audio-ready_go.wav)。
- 确保
profiles目录下的配置文件格式正确,否则可能会导致程序报错。 - 语音缓存文件存储在
voice_cache目录下,可定期清理以释放磁盘空间。 - 听写功能需要
audios/dictation_audio-ready_go.wav文件,如果该文件缺失,可能会影响听写开始提示音的播放。
如果你发现任何问题或有改进建议,请在代码库的 Issues 页面提交问题,或提交 Pull Request 贡献代码。