一、问题的提出
在日常语言学习与教学中,语料库是一个不可或缺的工具。它可以帮助我们查找高频词,获取搭配信息、例句信息、关键词信息等。由于建库过程操作步骤多,有时还要用到图片识别、格式转化、文本清理等技巧,很多人往往都止步在第一个环节。
今天我们就一步一步来学习建立一个四级语料库,用于四级考试的备考和教学。我们手头已经准备好一些四级考试的真题 Word 版,需要将它们从一个个文件夹中提取出来,清理加工后,以 txt 格式保存在一个文件夹下面。这个过程中,我们可能会遇到下面的问题:
- 文件夹里层级过多,不便于统一管理;
- 文件名不规范,夹杂着多余的信息或无关的符号;
- 文本内部存在冗余,如段首段尾空格、大量空行等;
手工处理文本耗时耗力,如果用多个工具处理又可能导致软件之间的不兼容性而产生误差,影响后面的数据分析结果。这时,我们完全可以借助 Python 这个“瑞士军刀”来批量处理这些问题,可以让语料库建设更高效、更专业。本文将结合实践,介绍如何用 Python 的 pathlib 和正则表达式来完成:
- 批量收集 Word 文本并转化为 txt;
- 清理语料文本的冗余信息;
- 自动化重命名文件,保持一致性和可读性。
二、批量收集、转化和清理 Word 文件
在语料库建设中,我们常常需要将 docx 转化为 txt 进行存储,以便进行后续的分词、词频统计。现在的情况是四级真题在多个子目录当中,且与试题解析、真题 PDF 文件混在一起,我们现在就要把一个个真题 docx 文件提取、转化、清理、保存。
四级真题文件夹
现在有了 DeepSeek 等大模型的加持,我们只需详细描述我们的要求,就可以轻松让 DeepSeek 生成我们想要的代码,比如我们给出了下面的提示词:
Python 代码,用 pathlib,遍历 backup 文件夹下的目录和子目录,提取其中的 docx 文件,文件名包括【四级】这个关键词,但不包括【解析】这个关键词,提取到当前四级 word 文件夹下,再转化为 txt 同名文件,清除其中的段前空格,段尾空格,空段等内容。
提示词展示
大模型给我们很快展示出一串代码,我们可以复制、下载到本地,粘贴到四级真题文件夹下面,运行这段程序,Python 会遍历 backup 文件夹及其子目录,提取包含“四级”,但不包含“解析”的 docx 格式文件,输出到【四级 word】文件夹下面,并转化为 txt 格式,在转化过程中顺便删除了段前段尾的空格、空段,进行初步的文本整理。代码展示如下:
from pathlib import Path
from docx import Documentdef clean_text(text: str) -> str:"""去除段前段尾空格"""return text.strip()def docx_to_txt(docx_path: Path, txt_path: Path):"""将 docx 转换为 txt"""try:doc = Document(docx_path)lines = []for para in doc.paragraphs:cleaned = clean_text(para.text)if cleaned: # 去掉空行lines.append(cleaned)txt_content = "\n".join(lines)with open(txt_path, "w", encoding="utf-8") as f:f.write(txt_content)print(f"转换成功: {docx_path.name} -> {txt_path.name}")except Exception as e:print(f"转换失败: {docx_path} 错误: {e}")def main():base_dir = Path("backup") # 要遍历的根目录out_dir = Path("四级word") # 输出目录out_dir.mkdir(exist_ok=True)# 遍历所有子目录for docx_file in base_dir.rglob("*.docx"):name = docx_file.nameif "四级" in name and "解析" not in name:txt_path = out_dir / (docx_file.stem + ".txt")docx_to_txt(docx_file, txt_path)if __name__ == "__main__":main()
一段代码可以完成多个流程的操作,大大节省了我们的时间,避免复制粘贴过程中的误操作。效果展示如下:
代码运行展示
三、文件名的规范统一
在收集到所有四级真题文本的 txt 格式后,我们发现文件名不统一,需要进行统一的修改,如果一个人工改很容易出题,此时我们仍然可以借助大模型生成 Python 代码来解决。比如,我们想删除所有文件名中【英语】这个词,就可以采用下面大模型生成的代码:
from pathlib import Path
def rename_txt_files():for txt_file in Path(".").glob("*.txt"):old_name = txt_file.stem # 不带后缀new_name = old_name.replace("英语", "") # 去掉关键词“四级”new_file = txt_file.with_name(new_name + txt_file.suffix)if txt_file != new_file:txt_file.rename(new_file)print(f"{txt_file.name} -> {new_file.name}")
if __name__ == "__main__":
rename_txt_files()
建成的初步效果如下:
又如,我们还想把不规则的日期 2020 年 12 月试卷.txt 统一改成 2020.12 试卷.txt。我们仍然向大模型清楚地表达我们的要求,得到了如下代码,轻松实现文件夹的遍历,文件名的批量修改,文件的最终保存,最终形成命名规范、格式统一的小型四级真题语料库。
import re
from pathlib import Path
def rename_txt_files():for txt_file in Path(".").glob("*.txt"):old_name = txt_file.stem# 去掉英文new_name = re.sub(r"[A-Za-z]", "", old_name)# 替换“2020年12月”成“2020.12”new_name = re.sub(r"(\d{4})年(\d{1,2})月",lambda m: f"{m.group(1)}.{int(m.group(2)):02d}",new_name)new_file = txt_file.with_name(new_name + txt_file.suffix)if txt_file != new_file:txt_file.rename(new_file)print(f"{txt_file.name} -> {new_file.name}")if __name__ == "__main__":rename_txt_files()
文件名统一
程序运行后效果展示:
四、语料库文本的清洗
收集到文本后,我们下一步还要继续清理每一个文本,此时可以用 Emeditor 或者 EditPad 来进行正则替换,也可以继续使用 Python 来清理文本。
文本内容展示
比如:我要清除每一个文本中以中文开头的一行,因为这一行往往是中文文件名,然后清理以【温馨提示】开头的段落。于是,就有了下面的提问:
文本格式清理
给出的代码如下,可以看出人工智能通过 re 正则模块实现了文本批量清理,我们甚至连一行代码都不需要写,就可以完成这项任务。
from pathlib import Path
import re
def clean_txt_file(txt_path: Path):"""清理文本文件"""lines = []with open(txt_path, "r", encoding="utf-8") as f:for line in f:stripped = line.strip()if not stripped:continue # 跳过空行# 如果以中文开头,跳过这一行if re.match(r"^[\u4e00-\u9fff]", stripped):continue# 如果以【温馨提示】开头,跳过这一行if stripped.startswith("温馨提示"):continuelines.append(stripped)# 写回文件with open(txt_path, "w", encoding="utf-8") as f:f.write("\n".join(lines))
def main():folder = Path("四级word")for txt_file in folder.glob("*.txt"):clean_txt_file(txt_file)print(f"已清理: {txt_file.name}")
if __name__ == "__main__":main()
通过这个案例可以看到,在大模型的辅助下,我们可以编写高效的 Python 代码辅助我们进行文本的收集、清理和归档等操作,全程不需要其它软件的介入。有些步骤甚至可以一次性完成,无需拆分操作。
文件在经过 Python 脚本处理后,层级更清晰、命名更规范,段落紧凑,适合直接进入语料库工具进行分析。
整个过程自动化,研究者只需准备描述自己的请求,明确操作的对象、位置、任务信息,就可以一次运行脚本,就能完成大量繁琐的手工工作。
这正体现了 Python 在翻译技术和语料库建设中的价值:让研究者把精力放在语言和翻译问题本身,而不是文件管理的细枝末节。
让我们摒弃编程难学的偏见,积极拥抱技术,提升我们语言学习和教学中的信息素养!
关注我,一起学习 Python 在语言学习和翻译教学中的应用!