最近看论文的需求比较大,但无奈基本都是英文的,且没有免费好用的文档翻译软件,就想着自己用python写一个。
每个python项目都要明确思路和目的,这次我们要读取整篇word文档,将其翻译后保存,所以第一次分化任务为三项,一是读取文档,二是翻译文档,三是保存文档。
接下来就只需一项一项完成即可。
首先是读取文档,python里面读取word文档要用docx库,安装方法如下
pip install python-docx
安装好后我们进行调用,读取word文档所在路径:
# 创建一个新的Word文档
output_doc = docx.Document()
# 获取要翻译的Word文档
path = input('请输入文件路径:')
这样我们完成了文档的读取,接下来就是文档的翻译。我们先想一想,我们一般用什么实现翻译,是的,无非是各种翻译软件,因此我们在这里要做的就是调用这些翻译软件的接口,将文本输入,获取翻译输出,我们这里先选择最简单的translate接口,有时间了再去爬网易或者其他的。为此我们需要安装translate库,安装方法:
pip install translate
安装好后我们只需将文档内容喂给库中函数即可,注意这里是调用的接口,最好不要一次性喂整篇文章,不然人家容易噎住,因此理想的情况是我们一段一段的喂给它,让他慢慢消化。为此我们需要将文档进行分割,则可以运用nltk库,安装方法:
pip install nltk
安装好后我们开始对文档进行段落分割,具体操作:
doc = docx.Document(path)
#初始化段落列表
worddata =[]
# 定义句子分割器
sent_detector = nltk.data.load('tokenizers/punkt/english.pickle')
# 遍历文档中的每个段落
for para in doc.paragraphs:
# 使用句子分割器将段落分割成句子
sentences = sent_detector.tokenize(para.text.strip())
# 输出每个句子
for sentence in sentences:
worddata.append(sentence)
这样我们得到了段落列表worddata,先定义翻译函数,之后循环调用消化worddata内容即可。
def translate(text):
# 创建Translator对象
translator = Translator(to_lang='zh')
# 翻译文本
result = translator.translate(text)
# 返回翻译结果
return result
如此一来我们就完成了第二项翻译的任务,最后只需将翻译的内容保存到word即可。
for sentence in worddata:
# 将英文句子翻译成中文
translated_sentence = ComTra.translate(sentence)
# print(translated_sentence)
# 将中文句子添加到输出文档中
output_doc.add_paragraph(translated_sentence)
# 保存输出文档
output_doc.save('result.docx')
至此,我们已完成了全部的任务,大功告成,先来看看翻译结果:
爱是一种复杂而多方面的情感,它激发了艺术家、作家和哲学家的灵感。
这种感觉难以界定,但却被普遍认为是世界上最强大的力量之一。
无论是两个人之间的浪漫爱情,父母对孩子的爱,还是对朋友和社区的爱,爱都有能力改变个人和整个社会。
爱情的核心是联系和亲密。
这是一种被另一个人深深理解、接受和欣赏的感觉。
基本无误,测试成功,最后,主函数如下:
from functions import sentenceSplit as SenSp
from functions import CommonTranslate as ComTra
import docx
# 创建一个新的Word文档
output_doc = docx.Document()
# 获取要翻译的Word文档
# path = input('请输入文件路径:')
path = 'Love.docx'
#将文档中的段落分割并保存成列表
worddata = SenSp.SentenceSplit(path)
for sentence in worddata:
# 将英文句子翻译成中文
translated_sentence = ComTra.translate(sentence)
print(translated_sentence)
# 将中文句子添加到输出文档中
# output_doc.add_paragraph(translated_sentence)
# 保存输出文档
# output_doc.save('result.docx')
if __name__ == '__main__':
pass
码字完成,(打个哈欠,哈~)好了,如果你觉得这篇文章有用或者想要原始原件和代码及相关指导的,可以点击下方链接给鄙人打赏一手,我看到了都会回复的,嘻嘻,最后大家一起加油,在变强的路上一去不复返!