将高中老师布置的3500词.xlsx转化为mp3让孩子去听

孩子刚上高中,英语老师要求背诵3900多个单词。为了让孩子快速记住这些单词,我觉得光靠看是不够的,还得听。所以,我把老师发的单词表中的每个单词转化为MP3格式的语音文件,每个文件包含单词的拼写、中文意思,并重复三遍加强记忆。每个文件大约20-30秒,文件大小在100-160KB之间。然后,我将每50个MP3文件合并成一个大文件,时长大约10分钟。每天让孩子多听几遍,强化记忆。我当年准备GRE考试时也是用类似的方法,只是那时没有现在这么方便的技术。现在看来完全可以降维打击,现在可以开始行动了!先上代码,单词表格式如下。

序号单词音标中文意思
1a(an)/ə,eɪ(ən)/art.一(个、件……
2abandon/əˈbændən/v.抛弃,舍弃,放弃
3ability /əˈbɪlɪtɪ/n.能力;才能
4able/ˈeɪb(ə)l/a.能够;有能力的
5abnormal/æbˈnɔːm(ə)l/a.反常的,变态的
6aboard /əˈbɔːd/prep.上(船,飞机,火车,汽车等)
7abolish /əˈbɔlɪʃ/v.废除,废止
8abortion /əˈ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 个单词 较为合适。这一数量能够有效避免记忆过载,确保学生能够理解并掌握单词的意思和用法,而不仅仅是机械记忆。

具体建议:

  1. 分批次学习:将单词分成小组(如 10-20 个),每次集中精力学习其中一组,记忆效果会更好。
  2. 间隔复习:通过 艾宾浩斯遗忘曲线 理论,间隔复习已学过的单词,能够加深记忆。复习频率可以是:
    • 1天后复习
    • 3天后复习
    • 1周后复习
  3. 结合例句学习:背单词时尽量结合例句和上下文,这样不仅能记住单词的拼写,还能记住其用法和搭配。
  4. 多感官学习:通过 听、说、读、写 四个维度结合背诵,例如朗读单词、拼写单词、用单词造句等,多维度学习有助于长时间记忆。

在 Python 中,您可以使用 pydub 库将多个 MP3 文件合并成一个音频文件。pydub 提供了简单的音频处理功能,包括音频合并、裁剪、格式转换等。

首先,您需要安装 pydubffmpeg

。如果没有安装 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}")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值