Advertisement

python调用谷歌翻译_python调用谷歌翻译

阅读量:

2019-05-09

3229

在日常运用谷歌翻译功能时

首先可以利用Python库googletrans进行翻译操作。通过命令行安装该库:pip install googletrans;随后导入Translator类:from googletrans import Translator

translator = Translator(service_urls=['translate.google.cn'])

我总是觉得心事重重

print(text)"i'm still not happy!"

但是,在面对规模宏大的需要翻译的句子时效率会显著下降。因此,在这种情况下建议采用协程策略来提高处理速度。

这里我们使用了基于gevents库的grequests库。

深入研究了googletrans库的核心代码后发现其核心功能表现为通过生成并处理特定的URL来完成任务。具体而言该库的主要操作流程表现为:首先通过生成并处理特定的URL来完成任务随后发送GET请求至该URL以接收并解析了一个JSON格式的结果数据进而从中提取所需的翻译结果信息。

涉及生成一个token是构造URL过程的一个必要步骤;遵循特定规则生成该token是为了简化后续操作流程;为了实现这一目标,在代码实现中选择调用GoogleTranslate库中的相关功能模块。

具体的参考代码如下:

Importing the grequests module.
Importing the logging module.
Importing the json module.
Importing the Translator class from googletrans.
Importing the format_json utility from googletrans.utils.

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'}

translator = Translator(service_urls=['translate.google.cn'])

配置基本日志级别为INFO等级,并设置日志格式字符串为'%(time)s - %(name)s - %(level)s - %(message)s';同时将日志文件路径设为log.txt。

logger = logging.getLogger()def exception_handler(request, exception):

logger.warning('exception when at %s :%s',request.url,exception)def work(urls):

reqs = (grequests.get(验证证书,允许重传,超时时间为4秒) for u in urls)循环处理每个u

result = grequests.map(reqs, exception_handler=exception_handler, size=20) return the result
def total_translate():

file2 = open('de2en_en.txt', 'a', encoding='utf-8') as f
with open('de.txt', 'r', encoding='utf-8') as f:

urls = []

num = 0

for line in f:

num+=1

line = line.strip()

token = translator.token_acquirer.do(line)

url = 'https://translate.google.cn/translate_a/single?client=t&sl=de&tl=en&hl=en&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&ie=UTF-8&oe=UTF-8&otf=1&ampssel=3&amptsel=0&ampkc=1&amptk={0}&ampq={1}'.format(token,line)

urls.append(url) if len(urls) >= 50:

res = work(urls) for r in res: if hasattr(r,'status_code'): if r.status_code == 200: try:

a=format_json(r.text)

target = ''.join([d[0] if d[0] else '' for d in a[0]])

source = ''.join([d[1] if d[1] else '' for d in a[0]]) except Exception as e:

logger.error('when format:%s',e)

logger.error('%s\n%s',r.text)

source = ''

target = ''

if len(source) != 0 and len(target) != 0:

file2.write(target+'\n') else:

file2.write('\n') else:

file2.write('\n')

urls = []

logger.info('finish 50 sentence, now at %s',num)

file2.close()def sentencetranslate(line):

line = line.strip()

将目标文本通过指定翻译器将德语文本转换为英语,并返回目标文本定义并完成翻译操作

file1 = open('de2en_en.txt',mode='r',encoding='utf-8')

file2 = open('new_de2en_en.txt',mode='a',encoding='utf-8')

i = 1

with open('de.txt',mode='r',encoding='utf-8') as f: for line in f:

t = file1.readline() if len(t) == 1:#'only \n'

text = sentencetranslate(line)

file2.write(text+'\n') else:

file2.write(t)

i += 1

if i%100 == 0:

print(i)

file1.close()

file2.close()if name == "main":

totaltranslate()

completetranslate()

该系统不仅实现了大部分句子的翻译工作,并且还调用了completetranslate()函数以确保所有内容都被正确处理。然而可能存在一些句子未被成功处理的情况,请调用completetranslate()函数以确保所有内容都被正确处理。因此需要调用completetranslate()函数以确保所有内容都被正确处理。

在grequests.map()中size设置为20的情况下,平均每秒翻译20句。

全部评论 (0)

还没有任何评论哟~