孩子刚上高中,英语老师要求背诵3900多个单词。为了让孩子快速记住这些单词,我觉得光靠看是不够的,还得听。所以,我把老师发的单词表中的每个单词转化为MP3格式的语音文件,每个文件包含单词的拼写、中文意思,并重复三遍加强记忆。每个文件大约20-30秒,文件大小在100-160KB之间。然后,我将每50个MP3文件合并成一个大文件,时长大约10分钟。每天让孩子多听几遍,强化记忆。我当年准备GRE考试时也是用类似的方法,只是那时没有现在这么方便的技术。现在看来完全可以降维打击,现在可以开始行动了!先上代码,单词表格式如下。
序号 | 单词 | 音标 | 中文意思 |
1 | a(an) | /ə,eɪ(ən)/ | art.一(个、件……) |
2 | abandon | /əˈbændən/ | v.抛弃,舍弃,放弃 |
3 | ability | /əˈbɪlɪtɪ/ | n.能力;才能 |
4 | able | /ˈeɪb(ə)l/ | a.能够;有能力的 |
5 | abnormal | /æbˈnɔːm(ə)l/ | a.反常的,变态的 |
6 | aboard | /əˈbɔːd/ | prep.上(船,飞机,火车,汽车等) |
7 | abolish | /əˈbɔlɪʃ/ | v.废除,废止 |
8 | abortion | /əˈbɔːʃ(ə)n/ | v.人工流产,堕胎 |
import pandas as pd
import os
import re
import pyttsx3
from gtts import gTTS
import warnings
# 忽略 FutureWarning
warnings.simplefilter(action='ignore', category=FutureWarning)
# 词性缩写与对应的中文解释
part_of_speech_dict = {
"nvt.": ",名词和及物动词,", # 添加 nvt. 处理
"vn.": ",动名词,", # 添加 nvt. 处理
"pron.": ",代词,",
"modalv.": ",情态动词,",
"int.": ",感叹词,",
"num.": ",数词,",
"a.": ",形容词,",
"v.": ",动词,",
"*n.": ",特殊名词,",
"n.": ",名词,",
"ad.": ",副词,",
"prep.": ",介词,",
"art.": ",冠词,",
"vi.": ",不及物动词,",
"vt.": ",及物动词,",
"conj.": ",连词,",
"&": ",和,",
"/": ",或,"
}
# 初始化 pyttsx3
engine = pyttsx3.init()
# 设置语速为默认值的较慢值
engine.setProperty('rate', 150)
# 选择一个声音(可以调试不同的声音)
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[0].id) # 选择合适的声音,voices[0] 是默认男声
# 设置引擎选择(gtts 或 pyttsx3)
use_gtts = True # True 切换为 gTTS 要出国 ,False 切换为 pyttsx3 本地方式快,但效果要差点
# 读取Excel文件
excel_file = '3500词.xlsx' # 替换为你的 Excel 文件路径
df = pd.read_excel(excel_file)
# 遍历每一行,将单词、音标、中文意思合并成一个字符串朗读并保存为 MP3
for index, row in df.iterrows():
number = str(row[0]) # 序号
word = str(row[1]) # 单词
word = word.strip()
if index >= 1830:
continue
# 使用正则表达式将括号内的内容替换为逗号分隔的内容
word = re.sub(r'\(([^)]+)\)', r' \1', word)
# 只保留空格和26个字母,去除其他符号
word = re.sub(r'[^a-zA-Z\s,]', '', word)
word = word.replace(",", " ")
phonetic = str(row[2]) # 音标
meaning = str(row[3]) # 中文意思
# 处理词性缩写,支持替换多个词性组合
for key, value in part_of_speech_dict.items():
meaning = meaning.replace(key, value)
# 去除meaning开头和结尾的空格
meaning = meaning.strip()
# 查找最后一个 "词" 并替换为 "词 意思是"
meaning = meaning[::-1].replace("词", "词 ,意思是,"[::-1], 1)[::-1]
# 检查是否有以括号开头的内容,并将括号内的内容移到句子的后面
match = re.match(r'^\(([^)]+)\)(.*)', meaning)
if match:
bracket_content = match.group(1)
remaining_content = match.group(2).strip()
meaning = f"{remaining_content} ({bracket_content})"
# 将单词按字母逐字朗读
spelled_first_word = word.split()[0]
spelled_word = ','.join(list(spelled_first_word))
# 组合成要朗读的文本
text = f"单词 {spelled_first_word}, {spelled_word}, {meaning} , {spelled_first_word} , {spelled_first_word}, {spelled_first_word}"
# 保存为 MP3 文件,文件名使用 4 位数字格式化
mp3_folder = "mp3"
if(use_gtts is True):
mp3_folder="gtts_mp3"
else:
mp3_folder = "mstts_mp3"
mp3_filename = f'{int(number):04}_{spelled_first_word}.mp3'
# 创建 mp3 文件夹,如果不存在
if not os.path.exists(mp3_folder):
os.makedirs(mp3_folder)
mp3_filepath = os.path.join(mp3_folder, mp3_filename)
mp3_filepath = mp3_filepath.replace(",", "_")
# 根据选择使用 gTTS 或 pyttsx3
if use_gtts:
# 使用 Google Text-to-Speech (gTTS)
tts = gTTS(text=text, lang='zh')
tts.save(mp3_filepath)
else:
# 使用 pyttsx3
engine.save_to_file(text, mp3_filepath)
engine.runAndWait()
print(mp3_filename, "saved")
print("所有单词、音标及中文释义已成功转换。")
这样就会生成mp3文件了,大约1-2个小时就可以生成完成。
对于高中生来说,一次背诵多少英文单词最合适,因人而异,但通常建议每次背诵 10-20 个单词 较为合适。这一数量能够有效避免记忆过载,确保学生能够理解并掌握单词的意思和用法,而不仅仅是机械记忆。
具体建议:
- 分批次学习:将单词分成小组(如 10-20 个),每次集中精力学习其中一组,记忆效果会更好。
- 间隔复习:通过 艾宾浩斯遗忘曲线 理论,间隔复习已学过的单词,能够加深记忆。复习频率可以是:
- 1天后复习
- 3天后复习
- 1周后复习
- 结合例句学习:背单词时尽量结合例句和上下文,这样不仅能记住单词的拼写,还能记住其用法和搭配。
- 多感官学习:通过 听、说、读、写 四个维度结合背诵,例如朗读单词、拼写单词、用单词造句等,多维度学习有助于长时间记忆。
在 Python 中,您可以使用 pydub
库将多个 MP3 文件合并成一个音频文件。pydub
提供了简单的音频处理功能,包括音频合并、裁剪、格式转换等。
首先,您需要安装 pydub
和 ffmpeg
:
。如果没有安装 ffmpeg
,您可以通过以下方式安装:
- Windows: 下载 ffmpeg 并将其添加到系统路径中。
- macOS: 使用 Homebrew 安装:
brew install ffmpeg
- Linux: 使用包管理器安装,如
sudo apt install ffmpeg
下面就将生成的mp3文件每20个一组合成一个大文件(大约1.5mb左右),时长5分钟左右,相当于一首歌曲的长度,反复听也不会太累。生成代码:
import os
from pydub import AudioSegment
from itertools import islice
# 具体建议:
#
# 分批次学习:将单词分成小组(如 10-20 个),每次集中精力学习其中一组,记忆效果会更好。
# 间隔复习:通过 艾宾浩斯遗忘曲线 理论,间隔复习已学过的单词,能够加深记忆。复习频率可以是:
# 1天后复习
# 3天后复习
# 1周后复习
# 结合例句学习:背单词时尽量结合例句和上下文,这样不仅能记住单词的拼写,还能记住其用法和搭配。
# 多感官学习:通过 听、说、读、写 四个维度结合背诵,例如朗读单词、拼写单词、用单词造句等,多维度学习有助于长时间记忆。
# 文件夹路径
mp3_folder = 'mp3'
result_folder = 'results'
FILENUMBER = 20
# 生成一段 1 秒的静音
silent_segment = AudioSegment.silent(duration=1000) # 1000 毫秒 = 1 秒
# 如果结果文件夹不存在,则创建
if not os.path.exists(result_folder):
os.makedirs(result_folder)
# 按每 FILENUMBER 个文件进行分组的辅助函数
def grouper(iterable, n):
it = iter(iterable)
return iter(lambda: tuple(islice(it, n)), ())
# 获取 /mp3 文件夹下所有文件,并按编号排序
mp3_files = [f for f in os.listdir(mp3_folder) if f.endswith('.mp3')]
mp3_files.sort(key=lambda x: int(x.split('_')[0])) # 按文件名中的编号排序
# 遍历每组 FILENUMBER 个文件
for group_idx, group in enumerate(grouper(mp3_files, FILENUMBER), start=1):
# 读取第一个文件
combined = AudioSegment.from_mp3(os.path.join(mp3_folder, group[0]))
# 逐个合并其他文件,并在每个文件前增加 1 秒的静音
for mp3_file in group[1:]:
audio = AudioSegment.from_mp3(os.path.join(mp3_folder, mp3_file))
combined += silent_segment + audio
# 获取当前组的第一个和最后一个文件名(不包括扩展名)
first_file = os.path.splitext(group[0])[0]
last_file = os.path.splitext(group[-1])[0]
first_file=first_file.replace('.mp3', '')
last_file = last_file.replace('.mp3', '')
# 保存合并后的文件到 result_folder,每组保存为一个新的 MP3 文件
output_filename = os.path.join(result_folder, f"{first_file}_to_{last_file}.mp3")
combined.export(output_filename, format="mp3")
print(f"MP3 文件组 {group_idx} 已成功合并为 {output_filename}")