我还没用过微软翻译,所以在这方面你比我领先——不过我怀疑理论上方法应该是一样的。
我喜欢你关于解析段落换行的想法,但我不确定是否应该假设每份文档都使用 CR/LF 换行符。Unix 系统仅使用 LF 字符,Mac 仅使用 CR 字符,Windows 则两者都用。其他文档甚至可能使用空字节作为行尾字符。
Unicode 也带来了自身的问题,因为每个字符都是两个字节长。
可能的解决方案:检查前一两句话中的换行符,将其存储为一个值,然后在解析文档之前将所有换行符统一转换为"\n"。文档处理完成后,可以自动恢复为正确的换行符格式。
一种方法是:向前扫描直到达到 10,000 个单词,然后向后扫描以找到段落换行处。将头指针置于当前块的开头,向前扫描,当找到 10,000 个单词之前的最后一个段落换行处时,设置尾指针。剪下该块,进行翻译,将其移至结果文档,将头指针移至尾指针位置,然后继续处理。
==============================
顺便提一下,翻译软件的效果可能非常糟糕,因为很多时候翻译结果对上下文极其敏感,包含俚语或专业术语。同样,某些特定行业或技能领域的技术术语或专有词汇——在许多情况下不应被翻译——却常常被严重误译。法律、医疗以及工程/技术类文档就是典型例子。
我曾将一份复杂的医疗文档(某人的脑部手术记录)分别通过两个不同的翻译工具——谷歌和 Yandex——尝试翻译成俄语。两份翻译的结果与其说是可读的文档,不如说更像是一盘糟糕的千层面!