Как извлечь предложения из HTML, чтобы перевести их и вставить обратно в HTML? - PullRequest
0 голосов
/ 21 января 2019

В нашей компании работают люди из разных стран, которые переводят тексты на свой родной язык. Несколько лет назад мы разработали инструмент для перевода. С помощью этого инструмента переводчики и люди, которым нужны переводы, могут справиться с этим процессом перевода лучше, чем отправлять электронные письма.

Теперь мы хотим улучшить инструмент и автоматизировать переводы с помощью таких инструментов, как Google или Deepl, чтобы нашим переводчикам не приходилось переводить, просто проверьте. Это, надеюсь, сэкономит им много времени. Но у нас есть некоторые трудности в обработке сложного HTML-контента, такого как статьи. Я попробовал DeepL и, похоже, вернул более точный и естественный перевод. Но это перевод контента внутри тегов HTML. Например, атрибуты href переводятся, поэтому ссылки не будут работать. Вне зависимости от того, пользуюсь ли я Google или DeepL, я бы хотел извлечь предложения, чтобы мне не платили HTML-символы.

Я прочитал:

Временное удаление HTML из строки для Google Translate API для снижения стоимости

Исключить теги HTML при переводе с помощью Google Translate API https://stackoverflow.com/a/1732454/5126638

Извлечение предложений из HTML в PHP

У нас есть код PHP, который очищает все теги HTML с помощью strip_tags () и разбивает текст результата на предложения. После этого каждое предложение проверяется в БД. Предложения, которые уже переведены, заменяются (str_replace ()) внутри исходного HTML-текста. Таким образом, я получаю контент 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 Translate правильно обработал это. Как они делают эту работу? Разработана ли какая-либо библиотека?

РЕДАКТИРОВАТЬ: Некоторые примеры:

<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 голосов
/ 21 января 2019

Вы можете использовать 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>

Я просто преобразовываю словав верхний регистр.

Вы должны заменить это своей логикой, чтобы вместо этого получить переведенное слово.В вашем случае, как вы сказали, перевод целых предложений может не сработать или может оказаться очень сложным.

Однако, если вместо этого вы переключите свою логику на перевод слов, возможно, это будет легче манипулировать?Дайте мне знать ваши мысли :)

...