自己在做三元组翻译时,因为种种原因不得不采取手动复制粘贴的方法,一共25w条三元组数据,在将其拆分成实体1-联系-实体2三个列表后,我发现实体1有很多关键词是重复的,而联系也有很多是重复的,我便想采用以下办法,避免重复翻译,减少复制粘贴次数,唉…
1. 将关键词列表去重 ,25w的“实体1”只剩2w5,“联系”从25w只剩下1w
去重过程参考我之前的记录,链接地址
或直接参考以下代码:
def remove_duplicates(path):
with open(path, 'r', encoding = 'utf-8') as f:
lines = f.readlines()
unique_lines = set(lines)
with open(path, 'w', encoding = 'utf-8') as f:
f.writelines(list(unique_lines))
remove_duplicates("想要去重的文件名.txt")
2. 将不重复的关键词手动复制粘贴翻译
这就是纯体力活,复制粘贴在翻译引擎中即可,将翻译复制粘贴在新文件中,为了过会跟关键词合并起来
3. 将关键词和翻译组合,形成类似“字典”的文件
使用以下代码将关键词和手动复制粘贴好的翻译组合起来,形成自己的翻译表:
with open("三元组1已去重.txt", "r", encoding = 'utf-8') as f1, open("三元组1已去重翻译.txt", "r", encoding = 'utf-8') as f2, open("三元组1翻译表.txt", "w", encoding = 'utf-8') as f3:
for line1, line2 in zip(f1, f2):
line1 = line1.strip()
line2 = line2.strip()
f3.write(f"{line1}&&{line2}\n")
在这里“三元组1已去重.txt”文件是已经去重过的关键词列表,内容大致如下:
在"三元组1已去重翻译.txt"文件中,是上一个文件中关键词对应顺序的翻译,大致如下:
接下来使用上述代码将两个文件合并,“三元组1翻译表.txt”就是形成的翻译表字典,如下图:
我这里使用了“&&”作为分隔符,可以设置其他。
4. 逐行读取25w关键词,从字典找对应的翻译并写入新文件
使用以下代码,完成对25w条数据的翻译的快速查找并写入:
打开A、B、C三个文件
with open('三元组1.txt', 'r', encoding = 'gbk') as file_a, open('三元组1翻译表.txt', 'r', encoding = 'utf-8') as file_b, open('三元组翻译1.txt', 'w', encoding = 'utf-8') as file_c:
# 读取B文件的内容到字典中,key为翻译前的文本,value为翻译后的文本
translations = {}
for line in file_b:
parts = line.strip().split('&&')
if len(parts) == 2:
translations[parts[0]] = parts[1]
# 读取A文件的每一行,在translations字典中查找对应的翻译并写入C文件中
for line in file_a:
original_text = line.strip()
translated_text = translations.get(original_text, '')
file_c.write(translated_text + '\n')
其中“三元组1.txt”是待翻译的25w条关键词,“三元组1翻译表.txt”是翻译字典,"三元组1翻译.txt"是要按顺序写入的关键词翻译,运行上述代码即可,有可能会报错字符编码问题,修改“encoding”即可,utf-8、gbk、gb2312甚至是直接将“encoding”删掉,自己试试就好了,运行这段代码几乎就是瞬间的事,就能将25w条数据翻译完并写入,就不用将25w条数据都复制粘贴翻译一遍了,效率提高近10倍。
总结
自己这次只对实体1和联系使用了此方法,因我觉得实体2重复的不多,后来发现实体2中重复项也很多,所以在之后的类似翻译工作中,我会将所有的数据都按照此方法来进行翻译,待翻译的数据越多,此方法用起来越爽!