为什么语料工作常用 Python?
Python是一种编程语言;用Python写的脚本是一组按顺序执行的程序指令。例如,把100份双语文件的标题汇总成一张表,可以交给脚本重复处理。Python负责执行指令;文件是否选对、译文是否可用,仍需核对。
Python 的优势
- 语法较简洁,可结合示例认识常见写法
- 有现成的“库”,分别负责下载网页、提取正文等工作
- 跨平台:Windows / Mac / Linux 均可运行
- AI可起草脚本,结果仍需用已知材料检验
常见写法
1. 变量:给数据贴标签
变量是程序中保存数据时使用的名字。corpus_name = "NYT 双语新闻库"表示把这个名称保存下来,后面可用corpus_name引用。等号在这里表示赋值。
corpus_name = "NYT 双语新闻库"
pair_count = 1250
is_bilingual = True
读法:corpus_name保存语料库名称;pair_count保存数量1250;is_bilingual表示是否为双语材料。
2. 字符串:文本数据
语料处理的对象几乎都是字符串(str)。用单引号或双引号包裹;中文字符与英文字符一样,都是字符串的一部分。
source = "The flight was delayed due to weather."
target = "航班因天气原因延误。"
# len() 返回字符串的字符个数
print(len(source)) # 输出: 38
3. 列表:有序的数据集合
列表用方括号 [] 表示,可存放多个句对、多个文件名等。索引从 0 开始:items[0] 是第一个元素。
字典怎样保存一组原译文
{"source": "Hello.", "target": "你好。"}是一条字典记录;source和target是名称,也叫“键”,后面的文字是“值”。pair["source"]表示取出这条记录的原文。
pairs = [
{"source": "Hello.", "target": "你好。"},
{"source": "Goodbye.", "target": "再见。"}
]
first_pair = pairs[0]
print(first_pair["source"]) # 输出: Hello.
4. for 循环:逐条处理
当需要对列表中每一项做相同操作时,用 for ... in ... 循环。注意缩进(通常 4 个空格)表示「属于循环体内的语句」。
for pair in pairs:
src = pair["source"]
tgt = pair["target"]
print(f"原文: {src} | 译文: {tgt}")
读法:对于 pairs 中的每一个 pair,取出原文与译文并打印。语料脚本中最常见的结构就是 for 循环遍历句对。
5. 函数:可反复使用的操作
函数把一项操作写成可反复使用的步骤。def定义步骤,return交回结果。示例函数接收一段文字,返回字符数;len()是Python自带的计数函数。
函数和库各做什么
库是一组现成工具:requests获取网页,BeautifulSoup提取网页内容,json读写记录。
使用现成工具的写法
import让脚本使用一个库,例如import json。json随Python自带;其他库可能需要安装。pip是安装Python库的工具,例如pip install requests。安装不会自动处理翻译材料。
def count_chars(text):
"""返回文本的字符数(含空格与标点)"""
return len(text)
n = count_chars("Parallel corpus")
print(n) # 输出: 15
6. 文件读写与 encoding='utf-8'
编码规定文字如何存成文件、再被读出。示例采用UTF-8。例如,“跑道”应读成原来的两个汉字;若显示为乱码,要先核对文件编码,不能直接当作缺字删除。
# 读取文本文件
with open("corpus.txt", "r", encoding="utf-8") as f:
content = f.read()
# 写入文本文件
with open("output.txt", "w", encoding="utf-8") as f:
f.write("清洗后的语料内容")
with open(...) as f: 是固定写法:打开文件、用完自动关闭。
"r" 表示只读,"w" 表示写入(会覆盖原文件)。
技术示例中的常见写法
if表示“符合条件才做”,例如译文为空时提示回查;raise ValueError表示报错并停止当前处理;#后是供人阅读的注释,不会执行。None表示没有结果,True/False表示真或假。
读懂两个典型脚本
JSON是一种保存记录的文本格式:metadata记录材料信息,content保存三条句对。把文件读取成程序能使用的记录,称为解析;显示几条供人查看,称为预览。读取和预览都不会自动校对译文。
{
"metadata": { "title": "示例新闻句对", "lang_pair": "en-zh" },
"content": [
{ "source": "Markets opened higher on Monday.", "target": "周一市场高开。" },
{ "source": "Analysts remain cautious.", "target": "分析师仍持谨慎态度。" },
{ "source": "Oil prices fell sharply.", "target": "油价大幅下挫。" }
]
}
示例 A:读取 JSON 并打印前 3 个句对
import json
# ① 打开并读取 JSON 文件(UTF-8 编码)
with open("corpus.json", "r", encoding="utf-8") as f:
data = json.load(f)
# ② 从 data 中取出 content 列表(所有句对)
pairs = data["content"]
# ③ 只查看前 3 条:列表切片 [0:3] 表示索引 0 到 2
for pair in pairs[0:3]:
print("—" * 40)
print("原文:", pair["source"])
print("译文:", pair["target"])
示例说明:
import json— 引入 Python 标准库,用于解析 JSON 文件json.load(f)— 把文件内容解析为 Python 字典datadata["content"]— 用键名"content"取出句对列表pairs[0:3]— 切片,只循环前 3 条(预览大文件时常用)pair["source"]— 每条句对是字典,用键取原文或译文
示例 B:遍历全部句对,统计总字符数
import json
with open("corpus.json", "r", encoding="utf-8") as f:
data = json.load(f)
pairs = data["content"]
# 累加器:初始为 0
total_chars = 0
for pair in pairs:
total_chars += len(pair["source"])
total_chars += len(pair["target"])
print(f"句对数量: {len(pairs)}")
print(f"原文+译文总字符数: {total_chars}")
示例说明:
total_chars = 0:先把总数设为0,再把每条句对的字符数加进去+=— 等价于total_chars = total_chars + len(...)- 字符数可说明文本规模,不能直接说明译文质量。例如,“Do not open.”漏译成“打开。”,统计仍可正常完成。字符数也不等于英文词数或翻译报价字数。
f"...":把计算结果放进显示文字中,例如“共3条句对”
笔译练习:整理结果能否用来核对
用途:为财经报道翻译挑选译例。
材料共有3条原译文,结果A列出如下:
| 原文 | 译文 |
|---|---|
| Markets opened higher on Monday. | 周一市场高开。 |
| Analysts remain cautious. | 分析师仍持谨慎态度。 |
| Oil prices fell sharply. | 油价大幅下挫。 |
结果B只有统计说明:“共3条;已统计原文和译文的字符数。”
请判断:哪份结果便于核对译文?仅凭结果B,能否确认材料完整、译文准确?
参考答案
结果A提供原文和译文,便于逐条核对。结果B只能说明程序报告的数量和统计状态;没有具体内容,无法确认是否漏掉信息、配错原译文或译错意思。结果A也需结合语境判断能否采用。