文档( PDF 、DOCX )翻译虽然市面上有很多,但大多数都需要上传到云,且翻译后排版效果不理想,费用也不低。
多年来我一直在寻找能在本地运行、用自己的翻译 API 、较完美的保留原格式、译后能编辑的翻译软件,终于让我找到了解决方案。
对于 PDF 文件,ABBYY FineReader 可以近乎完美的将 PDF 转换成 DOCX 格式。然后 DOCX 格式可以在 CAT (计算机辅助翻译,比如我用的是 MemoQ )软件中近乎完美的保留原格式翻译。
但大多数常用的 CAT ( Trados 、MemoQ 、Wordfast 、DejaVu 等)软件都是国外的,他们通常只对接了国外的翻译服务,国内用户要用国外翻译服务门槛较高。
所以我为 MemoQ 开发了翻译插件,对接了国内各大厂的翻译服务,加起来每个月有一千多万的免费字符量,也对接了多数翻译软件都在用的谷歌、微软的免费逆向 API (不知道什么时候会被和谐),之后也会对接 ChatGPT 。
这是( https://www.aliyundrive.com/s/NpX1XUg6dpD )没有经过手工检验的完全由谷歌翻译 API 翻译后的得到的双语可编辑文档的演示。
如果翻译仅仅是为了略读和少量编辑,到这里就完事了,但我想要的是高质量的译后编辑,也就是翻译后一边看一边修改,且要确保术语翻译的一致性等质量保证问题。
所以不能直接在 Word 中编辑翻译后的译文,因为在外部编辑,CAT 软件无法追踪,失去了 CAT 软件的术语一致性检查等质量保证功能。
也不能仅在 CAT 软件中编辑,因为它们提供的预览功能实在太简陋了,丢失了大部分 DOCX 格式排版,不利于对上下文的理解,看着也很不舒服。
所以我又为 MemoQ 开发了外部预览插件,将原文和译文在 Word 中打开,之后在 Word 中双击某译文段落时,对应的原文段落会被高亮,同时也会自动定位到对应的 MemoQ 段落中,这时可以直接在 MemoQ 中修改,修改后的文本会同步更新到 Word ,效果如下:
预览插件的原理是,从 MemoQ 得到所有段落的原文、译文、ID ,然后在 Word 中进行匹配,当在 Word 中点击某段落时将高亮的段落 ID 发送回 MemoQ ,以达到同步高亮的目的。
Word 预览插件的功能需求已经实现,使用的是 C# VSTO 开发,但遇到了一个性能问题,也就是我需要获取 Word 纯文本中每个字符在 Word Range 中的索引,这样才能匹配和高亮对应的文本,目前我使用的方法是:
private RangeTextAndIndexes GetRangeTextAndIndexes(Word.Range range)
{
var text = new StringBuilder();
var indexs = new List { };
foreach (Word.Range c in range.Characters)
{
if (c.Text != null)
{
for (int i = 0; i
这种方法每获取一个字符的 Range 索引(代码中的 c.Start )就是一次 COM 调用,每次 COM 调用接近 20ms ,一百页的文档需要几十秒,虽然只是启动时获取一次,但这样的速度我还是不能容忍。
直接使用 Word API 中的 Find 方法来匹配也不行,一是我需要更高级的自定义匹配算法来匹配,二是 Find 方法限制最多只能匹配 255 字符。
我想问的是,有没有其他的 API 能高效获取到纯文本中每个字符在 Word Range 中的索引?或者,其他语言(比如 Javascript )的 SDK 能做到这一点,也可以切换成其他语言开发。亦或者 LiberOffice 、OnlyOffice 等其他软件能更方便做到这一点,换成为其他软件开发插件也行,恳请各位有 Word 插件开发经验的大神给点意见。
机器翻译插件已开源,外部预览插件将等待解决性能问题后开源。
地址: https://github.com/JuchiaLu/Multi-Supplier-MT-Plugin