【问题标题】:How to retrieve sentences from HTML in order to translate them and insert them back into the HTML?如何从 HTML 中检索句子以翻译它们并将它们插入回 HTML?
【发布时间】:2019-01-21 16:32:14
【问题描述】:

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

现在我们想改进该工具并使用 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找不到那句话,中间有&lt;strong&gt;

如何改进我的代码以翻译完整的 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>

【问题讨论】:

    标签: php html google-translate deepl


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 您好,感谢您的回复。似乎是一个有趣的解决方案,但恐怕在我的情况下还不够。我正在检查正则表达式,它没有 macth 字符。我们需要翻译像“识别时间
    • 有道理。祝你好运:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多