•  Untoreh-light

MTR: несколько переводов

упаковка услуг перевода для внутреннего пользования

При публикации веб-сайта вы можете предложить разные переводы. Некоторым людям не нравятся автоматические переводчики, я думаю, что автоматический перевод достаточно хорош и лучше, чем ничего, и автоматические переводчики постепенно становились лучше с развитием НЛП а также ML.

Распространенные сервисы перевода - google, bing, yandex. Они предлагают бесплатный уровень, который мы хотим упаковать для личного использования. Есть и другие менее известные службы перевода , и некоторые из них отключены на момент написания ...

Кеширование текста

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

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

$this->misc['glue'] = ' ; ¶ ; ';
$this->misc['splitGlue'] = '/\s?;\s?¶\s?;?\s?/';

Вglue строка используется для объединения все строки (разделенные из исходного запроса) на один одно тело для восходящего запроса на перевод, который мы отправляем, например, Google. ВsplitGlue вместо этого используется для разделения полученного перевода на строки, которые мы собираемся кэшировать. Здесь мы видим, что разделение строк полезно не только для кеширования, но и для уменьшить количество запросов, потому что в случае, если наш нисходящий запрос выполняет много небольших запросов, мы используем наше оборудование для объединения запросов до максимального размера полезной нагрузки, разрешенного вышестоящей службой.

Интерфейс

Для поддержки нескольких сервисов прозрачно Я написал интерфейс, основанный на этом api

function__construct(
    Mtr &$mtr,
    Client &$gz,
    TextReq &$txtrq,
    LanguageCode &$ld);
functiontranslate($source, $target, $input);
functiongenReq(array$params);
functionpreReq(array &$input);
functiongetLangs();

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

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

Версия Go

Я также написал версия в голанге. Версия PHP будет использоваться путем импорта в ваш проект PHP, тогда как версия go работает как отдельная (микро) служба. Версия go намного более подробна, так как требует строгой проверки типов, и поскольку мы поддерживаем одновременный запрос нескольких строк, мы должны предоставить api, который работает с разными комбинациями ввода, а отсутствие дженериков go делает реализацию очень болезненной, но она предлагала параллельная обработка и в целом была намного быстрее.

Входы для очистки

Вместе с переводом я также создал сервис для очистить HTML . Мы заносим в белый список некоторые теги HTML, а остальные отбрасываем. Мы также удаляем похожие на спам повторяющиеся знаки препинания и неизвестные атрибуты html, а также помещаем ссылки в соответствующие теги привязки.

Самостоятельное размещение:

Выводы

В настоящее время я думаю, что я бы просто использовал самостоятельное решение, предоставляемое либо joshua, либо argos, поскольку я не стремлюсь к лучшему переводу, я хочу предложить читаемый перевод для веб-сайта, чтобы по нему можно было перемещаться без проблем.

Теги сообщений: