终于实现了文档翻译自由

2023-10-11 21:06:44 +08:00
 iX8NEGGn

这篇文章可能会涉及分享发现、提问、推广,但重点在于分享发现,所以发到该节点,恳请见谅。

文档( 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<int> { };

    foreach (Word.Range c in range.Characters)
    {
        if (c.Text != null)
        {
            for (int i = 0; i < c.Text.Length; i++)
            {
                indexs.Add(c.Start);
            }
            text.Append(c.Text);
        }
    }
    return new RangeTextAndIndexes(text.ToString(), indexs);
}

这种方法每获取一个字符的 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

2118 次点击
所在节点    分享发现
5 条回复
thinkm
2023-10-11 21:22:39 +08:00
针不戳,老哥能不能优先接入 ChatGPT ,翻译质量吊打其他的。 如果能接入 Azure GPT 就能好了,速度比 GPT 快很多
iX8NEGGn
2023-10-11 21:26:53 +08:00
@thinkm 主要是当时没有测试账号,二是价格有点贵,对接应该很快,比弄明白腾讯、阿里的签名容易多了
thinkm
2023-10-11 21:37:45 +08:00
@iX8NEGGn 那就建议优先接入 AZURE GPT ,因为看你项目都是中文,翻译应该主要是服务于中文用户。在中国 AZURE 的申请和使用质量都比 chatgpt 容易很多,ChatGpt API 要求国外信用卡,国内基本无法开通
thinkm
2023-10-11 22:12:58 +08:00
@iX8NEGGn 擦,刚刚去官网看了看 memoq 用不起阿,都是几百刀起步
iX8NEGGn
2023-10-14 15:06:48 +08:00
@thinkm 是的,CAT 软件都非常的贵,毕竟目标用户专业的人工译员,memoQ 在 CAT 软件中还算有性价比的了,接下来我将会把这两款插件移植到开源的 OmegaT ,虽然 OmegaT 的界面没那么美观,但 CAT 的核心功能它都有。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/981110

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX