如何从HTML检索句子以进行翻译并将其重新插入HTML?

时间:2019-01-21 16:32:15

标签: php html google-translate deepl

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

现在,我们希望使用Google或Deepl之类的工具来改进该工具并实现翻译自动化,以便我们的翻译人员不必翻译,只需检查即可。希望这将为他们节省很多时间。但是我们在处理复杂的HTML内容(例如我们的文章)方面存在一些困难。我已经尝试过DeepL,并且似乎返回了更准确,更自然的翻译。但这是在HTML标签内翻译内容。例如,href属性正在翻译中,因此链接将不起作用。如果我使用Google或DeepL,我想提取句子,以免HTML字符收费。

我读过:

Temporary removal of HTML from string for Google Translate API to reduce cost

Exclude HTML tags when translating with Google Translate API https://stackoverflow.com/a/1732454/5126638

Extract sentences from HTML in PHP

我们有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内容?

我已检查并由Google翻译正确处理。他们如何使这项工作?有没有开发的库?

编辑:一些示例:

<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>

1 个答案:

答案 0 :(得分: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>

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

您应该将其替换为逻辑,以获取翻译的单词。就您而言,就像您所说的那样,翻译整个句子可能不起作用,或者可能很难做到。

但是,如果您将逻辑切换为翻译单词,那么也许更容易操纵?让我知道您的想法:)