0

在我们公司,我们有来自不同国家的人员将文本翻译成他们的母语。几年前,我们开发了一种翻译工具。使用该工具,翻译人员和需要翻译的人员都可以比发送电子邮件更好地处理此翻译过程。

现在我们想改进该工具并使用 Google 或 Deepl 等工具自动翻译,这样我们的翻译人员就不必翻译,只需检查即可。这有望为他们节省大量时间。但是我们在处理复杂的 HTML 内容(例如我们的文章)时遇到了一些困难。我已经尝试过 DeepL,并且似乎返回了更准确和自然的翻译。但它正在翻译 HTML 标记内的内容。例如,href 属性正在被翻译,因此链接将不起作用。无论我使用 Google 还是 DeepL,我都想提取句子,这样我就不会被 HTML 字符收费。

我读过了:

为 Google Translate API 临时从字符串中删除 HTML 以降低成本

使用谷歌翻译 API 翻译时排除 HTML 标签 https://stackoverflow.com/a/1732454/5126638

在 PHP 中从 HTML 中提取句子

我们有 PHP 代码,可以使用 strip_tags() 清理所有 HTML 标记并将结果文本拆分为句子。之后,在数据库中检查每个句子。已翻译的句子在原始 HTML 文本中被替换 (str_replace())。通过这种方式,我将 HTML 内容翻译成另一种语言。

我希望能正确翻译任何 HTML,但自包含标签破坏了逻辑。该代码适用于以下内容:

<p><ul><li>Article about our web page</li></ul></p>

但无法处理:

<p><ul><li>Article about our <strong>web page</strong></li></ul></p>

当 HTML 标签被删除时,句子是“关于我们网页的文章”。翻译后,它尝试替换为原始文本并失败。由于 str_replace 找不到那句话,<strong>中间有。

如何改进我的代码以翻译完整的 HTML 内容?

我已经检查并且谷歌翻译正确处理了这个问题。他们是如何完成这项工作的?有没有开发的库?

编辑:一些例子:

<tr align="left" valign="middle">
<td height="22"><strong>Identification time</strong></td>
<td height="22">&lt; 0.5 Sec.</td>
</tr>

<tr align="left" valign="middle">
<td height="22"><strong>Power supply</strong></td>
<td>DC 5 V / 1.0 A (included)</td>
</tr>

<tr align="left" valign="middle">
<td height="22"><strong>Temp. operation</strong></td>
<td>-30º C ~ +60º C</td>
</tr>
4

1 回答 1

1

可以使用preg_replace_callback()来识别和替换 html 字符串中的单词。理想情况下,正则表达式模式也应该排除 html 标记,而不是将<strong>其视为一个单词。

一个非常幼稚的实现可能是这样的:

$string = '<p><ul><li>Article about our <strong>web page</strong></li></ul></p>';

return preg_replace_callback(
    '/\b(\w+(?![^<>]*>))\b/',
    function ($matches) {
        return strtoupper($matches[0]);
    },
    $string
);

在我的特殊情况下,输出将是:

<p><ul><li>ARTICLE ABOUT OUR <strong>WEB PAGE</strong></li></ul></p>

我只是将单词转换为大写。

您应该用您的逻辑替换它以获取翻译后的单词。在您的情况下,就像您说的那样,翻译整个句子可能不起作用或可能被证明非常困难。

但是,如果您将逻辑改为翻译单词,也许会更容易操作?让我知道你的想法 :)

于 2019-01-21T16:54:14.373 回答