Google 译者工具包机器翻译问题

Google Translator Toolkit machine-translation issues

我正在使用 python 2.7 和 django 1.7。

当我使用 Google Translator Toolkit 将我的 .po 文件机器翻译成另一种语言(英语到德语)时,由于在我的翻译标签中使用了不同的 django 模板变量,出现了很多错误。

我知道机器翻译不是很好,但我只想在我的测试页面上测试我的翻译字符串。

这里是机器翻译的 .po 文件从英语 (en) 翻译成德语 (de) 的典型错误示例。

#. Translators: {{ site_name_lowercase }} is a variable that does not require translation.
#: .\templates\users\reset_password_email_html.txt:47
#: .\templates\users\reset_password_email_txt.txt:18
#, python-format
msgid ""
"Once you've returned to %(site_name_lowercase)s.com, we will give you "
"instructions to reset your password."
msgstr "Sobald du mit% (site_name_lowercase) s.com zurückgegeben haben, geben wir Ihnen Anweisungen, um Ihr Passwort zurückzusetzen."

%(site_name_lowercase)s 被机器翻译成 % (site_name_lowercase) s,并且通常连接到前面的单词,如上所示。

我有数百个此类错误,我估计查找和替换至少需要 7 个小时。另外,如果我 makemessages 然后再次翻译 .po 文件,我将不得不再次进行查找和替换。

我希望 Google Translator Toolkit 中存在某种类型的未记录规则,允许机器翻译忽略变量。我已经阅读了 Google Translator Toolkit 文档并搜索了 SO & Google,但没有找到任何可以帮助我的东西。

有人有什么建议吗?

The %(site_name_lowercase)s is machine translated to % (site_name_lowercase) s and is often concatenated to the precedding word, as shown above.

这是由于翻译前的标记化,翻译后的去标记化,即 GoogleTranslate 尝试在翻译前拆分输入,以便在翻译后重新合并。您使用的变量通常由标记器用来检测标记边界的字符组成。为避免此类问题,您可以预处理您的文件并用没有此问题的占位符替换有问题的变量 - 我建议您尝试一些事情,例如_VAR_PLACE_HOLDER_。重要的是不要使用任何可能导致分词器拆分的标点符号。预处理后,通过将占位符替换为原始值来翻译新生成的文件和 post-process。通常,您的占位符将被选为词汇外 (OOV) 项,并在翻译过程中保留。尝试包含一个序列号(以便在 post 处理期间跟踪您的占位符),因为可能会发生单词重新排序。曾经有一个科学的 API for Google Translate 为您提供标记对齐。您也可以将它们用于 post 处理。

请注意,此过程不会为您提供最佳翻译输出,因为语言模型无法识别占位符。您可以在此处看到此说明(使用占位符,标记 "gelezen" 位于错误的位置):

https://translate.google.com/#en/nl/I%20have%20read%20SOME_VARIABLE_1%20some%20time%20ago%0AI%20have%20read%20a%20book%20some%20time%20ago

如果您只是想为您的变量测试系统,而不关心翻译质量,这是最快的方法。

如果您决定寻求更好的解决方案,您可以通过开发自己的机器翻译系统自行解决这个问题(顺便说一下,这很有趣,请参阅 http://www.statmt.org/moses/)并应用上面解释的过程,但随后使用,例如词性标签来改进语言模型。请注意,您也可以使用对齐信息。