实践案例|同是谷歌翻译,为何结果不同?
一、现象描述
一些开源软件或插件调用谷歌翻译引擎时,获得的翻译结果可能与谷歌翻译官网不一致。
原文:Literature that are part of the Bid may be in another language provided they are accompanied by an accurate translation of the relevant passages in the language specified in the XXX, in which case, for purposes of interpretation of the Bid, such translation shall govern.
开源软件/插件译文:出价一部分的文献可能是另一种语言,只要它们伴随着 XXX 中指定的语言中相关段落的准确翻译,在这种情况下,为了解释出价,该翻译应管理。(低质量译文)
谷歌翻译官网译文:作为投标书一部分的文献可以使用另一种语言,只要它们附有以 XXX 中指定的语言准确翻译的相关段落,在这种情况下,为了解释投标书,应以此类翻译为准。(高质量译文)
虽然二者都使用了谷歌翻译引擎,但译文质量迥然不同。我们通过以下方式调用谷歌翻译引擎,测试译文质量。
沙拉查词 浏览器插件
沙拉查词是一款聚合众多翻译引擎的开源浏览器插件,由于免费、功能众多,且提供多种机器翻译,可进行直观对比,拥有大量用户。
沙拉查词浏览器插件的谷歌翻译结果返回了低质量译文。
QTranslate 聚合翻译引擎软件
QTranslate 是一款聚合了多款翻译引擎的免费软件,小巧便捷,可供用户自主添加词典和机器翻译引擎,提供丰富的快捷键。
使用 QTranslate 测试,结果发现谷歌翻译引擎同样返回低质量翻译结果。
使用 Python 调用谷歌翻译
使用 python 调用谷歌翻译接口同样可以获取翻译结果,代码如下:
# !/usr/bin/python3
# -*- coding: utf-8 -*-
#source:https://www.zhangshengrong.com/p/7B1Lqvjwaw/
import requests
import re
def translated_content(text, target_language):
headers = {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
# "accept-language": "en,zh-CN;q=0.9,zh;q=0.8",
"content-type": "application/x-www-form-urlencoded;charset=UTF-8",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36"
}
# 请求url
url = "https://translate.google.cn/_/TranslateWebserverUi/data/batchexecute?rpcids=exi25c&source-path=%2F&f.sid=-5382194762580462707&bl=boq_translate-webserver_20220622.08_p0&hl=zh-CN&soc-app=1&soc-platform=1&soc-device=1&_reqid=677557&rt=c"
# 数据参数
from_data = {
"f.req": r"""[[["MkEWBc","[[\"{}\",\"auto\",\"{}\",true],[null]]",null,"generic"]]]""".format(text, target_language)
}
try:
r = requests.post(url, headers=headers, data=from_data, timeout=60)
if r.status_code == 200:
# 正则匹配结果
response = re.findall(r',\[\[\\"(.*?)\\",\[\\', r.text)
if response:
response = response[0]
else:
response = re.findall(r',\[\[\\"(.*?)\\"]', r.text)
if response:
response = response[0]
return response
except Exception as e:
print(e)
return False
# 翻译各个国家语言
for i in ['en', 'zh', 'fr', 'ja', 'de']:
response = translated_content("Literature that are part of the Bid may be in another language provided they are accompanied by an accurate translation of the relevant passages in the language specified in the XXX, in which case, for purposes of interpretation of the Bid, such translation shall govern.", i)
print(response)
代码运行后获得了低质量翻译结果。
二、现象解释
对于上述现象,我们并未找到具体原因,只有一些零散的结论和猜测。
目前据观察,谷歌机器翻译可能采取了某种监测/机制,如果判断是采用了爬虫或疑似采用爬虫技术(即使是手工粘贴),谷歌机器翻译的结果可能会比较差。 本地化人网
@scriptkitz commented on 9 Dec 2021好奇怪,为什么谷歌会返回不同结果,难道谷歌可以根据参数控制返回烂结果还是好结果?
@crimx(沙拉查词开发者) commented on 17 Jan是的,因为现在用的是官网的未公开接口,目前一个签名参数还没有人能算出来。https://github.com/crimx/ext-saladict/issues/1559
CSDN 用户@user_from_future: 之前我发布的浅析Python谷歌翻译库的核心里面的代码仍然可以获取翻译结果,但是对于复杂翻译语种,获取到的结果和网页上的显示不同,这让我很气。我自己也尝试进行再次破解过,但是万事俱备,只欠 x-goog-batchexecute-bgr。这个参数是我的心头病,只要掌握了这个参数的获取方式,就能直接从谷歌翻译官网获取到正确的返回结果。 https://blog.csdn.net/user_from_future/article/details/120798257
“小编一度怀疑谷歌翻译是不是对基于 Gecko 或 Cefsharp 开发的浏览器有歧视,有意而为之,让这些小品牌的浏览器只能使用旧版本的谷歌翻译接口。” https://zhuanlan.zhihu.com/p/426016322
以沙拉查词这一开源软件为研究对象,在源码 yarn.lock 文件中发现该软件内置的谷歌翻译引擎使用了 opentranslate 和 google-translate-open-api 两个依赖包,并非谷歌官方提供的 Api,由此推断,出现这一现象的原因可能是谷歌翻译的一种反滥用机制。
(沙拉查词 7.20.0 源码 yarn.lock 文件)
三、工具推荐
为便于大家在日常学习和翻译实践中获取更加准确的机器翻译结果,小编向读者朋友们推荐两个聚合多种翻译引擎的工具。
划词翻译划词翻译是一款安装在桌面端浏览器里的扩展程序,支持 9 个国内外主流翻译引擎,包括但不限于谷歌、DeepL、百度、有道等。在网页中划选一段文本之后,划词翻译会显示这段文本在多个翻译引擎中的翻译结果,使用者可以直接对比、复制翻译结果。
划词翻译免费版目前仅提供谷歌和 DeepL 两种机器翻译引擎,如需使用其他机器翻译引擎可按照引导申请 API。
(划词翻译内置机器翻译引擎)
划词翻译也提供付费版服务,通过购买翻译积分可以使用其他翻译引擎,无需申请 API。
(划词翻译支持多种机器翻译引擎)
划词翻译也注意到了免费版谷歌翻译引擎存在的问题,为使用者提供了两个接口,可在“个人中心”根据个人需要进行设置。
(划词翻译中设置谷歌翻译引擎接口类型)
除了基本的划词功能外,“划词翻译”还有截图翻译、网页全文翻译、语音翻译、音视频翻译等功能,并向用户提供免费使用次数,如需大量使用可进行购买。
(划词翻提供的其他服务)
GT4T
GT4T 是一款运行于 Windows 和 Mac 上的自动翻译应用,聚合了 29 种主流机器翻译引擎,支持 379 种语言,可在 14万+ 个语言对间进行翻译。GT4T 不仅能在任何窗口获得所选内容的翻译建议,还也可批量翻译 Office、PDF、CAT、Markdown、AsciDoc、reStructedText 等格式的文档。
有关 GT4T 的详细介绍可查看往期推文:技术与工具 | GT4T:一款多功能翻译工具
(测试版本:8.34.220328 测试时间:2022年6月)
如果读者朋友们有一定的编程基础,也可以尝试使用 selenium 模拟浏览器操作谷歌翻译官网来获取翻译结果,所获得的译文应该与谷歌翻译官网上的结果一致。可参考文章:Python 谷歌翻译_浏览器版本 selenium (2022年1月测试可用) 网址:https://blog.csdn.net/xiaozi_001/article/details/120364739
参考文献
1. 本地化人网,都是谷歌网页翻译,但是翻译结果不同?https://mp.weixin.qq.com/s/sS18tGIMwhV6rDL1ZMqXoQ
2. 张生荣,Python 调用 Google 翻译接口的方法 https://www.zhangshengrong.com/p/7B1Lqvjwaw/
3. CSDN, Python 谷歌翻译_浏览器版本 selenium (2022年1月测试可用)https://blog.csdn.net/xiaozi_001/article/details/120364739- END -
编辑:贺文惠 王琳
排版:王琳
审核:朱华 贺文惠