新的机器翻译填充机制主要想改进以下三个方面:
- 更好地处理某一原文在匹配记忆库时遇到多条译文的情况
- 调用翻译时支持使用平台术语库用以翻译纠正
- 大量调用翻译经常触发谷歌的流控
具体方案
当匹配记忆库遇到多条译文时
计划为记忆库的每个词条增加一个优先级字段,优先级范围为0-100,优先级由管理员为每个含有重复译文的词条手工指定。
对于机器翻译预填充的应用场景,会自动调用优先级最高者。如果优先级都一样则会标记此翻译为“模糊的”
对于前端所展现的翻译建议提示,会按这个优先级对输出的建议进行排序
调用术语表进行翻译纠错
因为计算机翻译的特殊性,有很多词汇是和日常英语有出入的。
比如说:memory,日常翻译为记忆,但计算机中翻译为内存。
对于这些词汇就需要使用术语库进行纠正。
谷歌的网页翻译是不带术语库支持的,这一特性只在专业版翻译中提供。但在翻译数千万字符时,专业版翻译的价格令我们无法承受。
目前打算使用这一方案来实现对术语库的支持(以下内容直接复制的我在其他帖子的回复,未作排版):
比如说以下句子:
This is a great plugin, I recommend everyone to install it
译文:
这是一个非常棒的插入,我推荐大家安装它
我们可以在原文提交翻译前对原文进行如下替换:
This is a great <code>#007</code>, I recommend everyone to install it
其中#007是自动生成的一个编号,用来标记这个待匹配术语表的单词将来在译文中的位置,而code标签则是为了防止谷歌对其翻译。
机器翻译后:
这是一个非常棒的<code>#007</code>,我推荐大家安装它
现在我们就可以使用根据使用术语表中plugin对应的译文来替换整个<code>#007</code>了
处理后的译文:
这是一个非常棒的插件,我推荐大家安装它
这个方案理论上是可行的,但是对术语表要求比较严格,因为只能包含词性为名词的词汇。如果替换了动词、形容词,则可能会破坏语义。
大量调用翻译经常触发谷歌的流控
这个问题显而易见最优方案是使用代理。
但是我们不打算使用正向代理,这主要是因为正向代理很容易被墙,而且搭建和连接都并不方便。
最终是打算用反向代理来实现这个需求,这样随便谁想贡献一个节点的话就只需要创建一个网站就可以了。
在程序端的实现原理是我们继承并实现了一个WP_Http的子类,这个子类会对某些特定的域名使用一个从代理池随机取出的反代IP访问。
具体的访问原理就是将URL中的域名替换为反代IP,之后通过Host字段来指定域名。