V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iX8NEGGn
V2EX  ›  分享发现

终于实现了文档翻译自由

  •  
  •   iX8NEGGn · 2023-10-11 21:06:44 +08:00 · 2130 次点击
    这是一个创建于 410 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    文档( 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

    thinkm
        1
    thinkm  
       2023-10-11 21:22:39 +08:00
    针不戳,老哥能不能优先接入 ChatGPT ,翻译质量吊打其他的。 如果能接入 Azure GPT 就能好了,速度比 GPT 快很多
    iX8NEGGn
        2
    iX8NEGGn  
    OP
       2023-10-11 21:26:53 +08:00
    @thinkm 主要是当时没有测试账号,二是价格有点贵,对接应该很快,比弄明白腾讯、阿里的签名容易多了
    thinkm
        3
    thinkm  
       2023-10-11 21:37:45 +08:00
    @iX8NEGGn 那就建议优先接入 AZURE GPT ,因为看你项目都是中文,翻译应该主要是服务于中文用户。在中国 AZURE 的申请和使用质量都比 chatgpt 容易很多,ChatGpt API 要求国外信用卡,国内基本无法开通
    thinkm
        4
    thinkm  
       2023-10-11 22:12:58 +08:00
    @iX8NEGGn 擦,刚刚去官网看了看 memoq 用不起阿,都是几百刀起步
    iX8NEGGn
        5
    iX8NEGGn  
    OP
       2023-10-14 15:06:48 +08:00   ❤️ 1
    @thinkm 是的,CAT 软件都非常的贵,毕竟目标用户专业的人工译员,memoQ 在 CAT 软件中还算有性价比的了,接下来我将会把这两款插件移植到开源的 OmegaT ,虽然 OmegaT 的界面没那么美观,但 CAT 的核心功能它都有。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5224 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 05:42 · PVG 13:42 · LAX 21:42 · JFK 00:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.