Разбивайте большие посты для успешного перевода

Я использую плагин «Переводчик» с сервисом Microsoft. Если пост достаточно большой, его невозможно перевести из-за следующей ошибки:

Этот пост слишком длинный для перевода переводчиком.

Не могли бы вы реализовать функцию перевода по абзацам, чтобы обойти эту проблему?

2 лайка

Это обычное ограничение Google Translate, и, насколько я знаю, лимит составляет около 500 слов.

Если вы регулярно сталкиваетесь с объёмом больше этого, у меня есть несколько вариантов:

  1. Вручную разбить контент на блоки текста меньше 500 слов (или меньше текущего лимита).
  2. Использовать другой API от Google для перевода документов (я не уверен, но, кажется, такой у них есть — уточните у них).
  3. Использовать другой сервис для перевода документов и надеяться, что у них есть API.

Не забудьте сообщить нам, что сработало.

Я использую API Microsoft, а не Google.
Похоже, что у Microsoft есть ограничение в 10 000 символов на один запрос: Service limits - Translator - Foundry Tools | Microsoft Learn

Думаю, самый простой способ — разбивать пост по абзацам (“\r\n\r\n” или

), предполагая, что один абзац не будет превышать 10 000 символов?

1 лайк

Я еще не пользовался Microsoft Translate, так что вы впереди меня в этом вопросе — хотя, полагаю, что в теории методы должны быть одинаковыми.

Мне нравится ваша идея с разбивкой по абзацам, но я не уверен, что стоит полагать, будто каждый документ использует окончания строк CR/LF. В Unix используется только символ LF, в старых версиях Mac — только CR, в Windows — оба. В других документах в качестве символа конца строки может использоваться нулевой байт.

Unicode тоже создаёт свои проблемы, поскольку каждый символ занимает два байта.

Возможное решение: проанализировать окончание строки в первых одном-двух предложениях, сохранить его как значение, а затем перед парсингом документа заменить все окончания строк на просто “\n”. После завершения обработки документа можно автоматически вернуть правильные окончания строк.

Один из методов — сканировать документ вперёд, пока не будет достигнут объём в 10 000 слов, а затем сканировать назад в поисках разрыва абзаца. Установить указатель начала (head-pointer) в начало текущего блока, сканировать вперёд и, найдя последний разрыв абзаца до отметки в 10 000 слов, установить указатель конца (tail-pointer). Вырезать этот блок, перевести его, переместить в итоговый документ, сдвинуть указатель начала на позицию указателя конца и продолжить.

==============================

Кстати, программное обеспечение для перевода часто оказывается ужасным, потому что перевод во многих случаях сильно зависит от контекста, содержит сленг или жаргон. То же самое касается технических терминов или слов, специфичных для определённой профессии или навыка, которые во многих случаях не должны переводиться, но при этом часто искажаются до неузнаваемости. Классическими примерами являются юридические, медицинские и инженерно-технические документы.

Я отправил сложный медицинский документ (операционный отчёт о операции на мозге) через два разных переводчика — Google и Яндекс — пытаясь перевести его на русский язык. Результат обоих переводов был больше похож на плохую лазанью, чем на читаемый документ!

@jharris1993, я полагаю, вы предлагаете мне реализовать эту функцию. К сожалению, у меня нет опыта работы с Ruby, и это займёт гораздо больше времени, чем у опытного специалиста.Конечно, я могу сделать это «на коленке», но такой код не будет принят.

На моём форуме чаще всего просят перевод с русского на английский технических постов. Microsoft справляется с этой задачей довольно хорошо.

1 лайк

Круто!

Скажите, пожалуйста, о каком форуме идёт речь. Если он умеет переводить с английского на русский, я, возможно, отправлю через него свой следующий длинный и сложный документ!

Перевод выполняется с помощью плагина discourse-translator. Я думал, что создал эту тему в категории плагинов, но она осталась без категории.

1 лайк