Отправляет email-рассылки с помощью сервиса Sendsay

Новости переводов

  Все выпуски  

Применение API Яндекса для автоматического перевода текстов


Применение API Яндекса для автоматического перевода текстов

После того, как Google закрыл свои API для перевода обострилась проблема поиска онлайн-сервиса, котрый обеспечил бы машинный перевод.
Довольно известных сервисов, которые могут обеспечить автоматический, существует немало, например, Промт, Прагма и т.д.. Существует возможность с помощью PHP смоделировать обращение к странице такого сервиса и получить с нее результат перевода. Однако почти все такие сервисы на простой GET или POST запрос возвращают не результат перевода, а полную страницу со всем ее содержимым, начиная с DTD. А это нужно далеко не всегда.
Нам известно только два сервиса, которые выдают на запрос только результат перевода, это Яндекс и Microsoft Bing. При этом Яндексом проще проще пользоваться, он с русского и на русский, но этими направлениями все и ограничивается, что сразу является и недостатком. Например, если нужен перевод с украинского на английский, то его нужно делать в два прохода, через промежуточный русский перевод.
У Bing нет такого недостатка, но он не лишен своих собственных:
- качество перевода с участием русского или украинского языка невысокое и требуют большого обэема работ по правке
- бесплатное применение Bing имеет ограничения
- чтобы использовать Bing, нужно иметь идентификатор веб-приложения — appID, который в пинципе можно получить бесплатно, но процесс получения и предварительной регистрации достаточно длителен
Так что с сервисом мы определились — это Яндекс. Определим задачи для библиотеки перевода:
- Получение языков, с которых и на которые можно переводить, и их допустимых комбинаций
- Проведение перевода
Нужно учитывать, что из-за того, что для передачи текста Яндекс использует запросы типа GET, объем ограничен приблизительно 2000 символов за один раз. Это не очень много, чуть больше стандартной страницы. Так что добавим еще одну задачу:
- Обеспечение перевода больших текстов
Кроме того, если сразу определиться с целью — создать мультиязычную версию сайта, то целесообразно не переводить страницы во время запроса, а сохранять переведенные фрагменты а для повышения качества текстов, нужно иметь возможность редактировать результата, то есть еще две задачи:
- Обеспечение кеширования
- Возможность редактирования сохраненного текста
Исходные коды Яндекс.Переводчика доступны в репозитории Гугла и задокументированы на русском языке.
!Языки перевода
Класс Yandex_Translate содержит три метода, названия которых говорят сами за себя:
yandexGetLangsPairs() — получение доступных пар языков FROM->TO
yandexGet_FROM_Langs()
yandexGet_TO_Langs()
Пример (этот пример — полный, ниже подключение файлов, создание экземпляра класса, элементы форматирования вывода и пр. буду опущены.)
> >include_once \'Yandex_Translate.php\';
>$pairs = $translator->yandexGetLangsPairs();
>print_r($pairs);
Получим вот такие комбинации (нужно следить, потому что они периодически меняются):
[0] => en-ru
[1] => ru-en
[2] => ru-uk
[3] => uk-ru
[4] => pl-ru
[5] => ru-pl
[6] => tr-ru
[7] => ru-tr
[8] => de-ru
[9] => ru-de
[10] => fr-ru
[11] => ru-fr
[12] => it-ru
[13] => es-ru
[14] => ru-es
Как обращалось внимание выше, здесь присутствуют только пары с ru.
Два других метода дают языки по отдельности и могут быть использованы, например, для формирования элементов выбора.

!Перевод
Применяется метод с тремя аргументами: с какого языка, на какой, и сам переводимый текст.
Здесть важное свойство eolSymbol — окончание строки. Если его установить неверно, не будет форматирования выходного текста.
Пример:
>$text = file_get_contents(\'text.txt\');
>$translatedText = $translator->yandexTranslate(\'ru\', \'uk\', $text);
>echo $translatedText;
Начало файла text.txt:
>Марио Пьюзо Крестный отец
>Посвящается Энтони Клири
>КНИГА ПЕРВАЯ
>За всяким большим состоянием кроется преступление.
Результат выполнения скрипта:
>Маріо п’юзо Хрещений батько
>Присвячується Ентоні Клірі
>ПЕРША КНИГА
>За кожним великим станом криється злочин.
В принципе получившийся перевод неплохой, но требует исправления.
!Перевод больших текстов
Для перевода больших текстов служит абстрактный класс Big_Text_Translate
Принцип его работы следующий: сначала текст разбивается на предложения с применением разделителя sentensesDelimiter (по умолчанию это точка).
Затем предложения собираются в текстовые фрагменты, размер которых не превышает заданного значения symbolLimit (по умолчанию 2000 знаков).
Текстовые фрагменты готовы для перевода, семантика и форматирование — сохранены. Формированием фрагментов занимается статический метод toBigPieces, на его выходе — массив.
Метод fromBigPieces склеивает переведенные фрагменты обратно в цельный текст.
Пример:
>$bigText = file_get_contents(\'text_big.txt\');
>$textArray = Big_Text_Translate::toBigPieces($bigText);
>$numberOfTextItems = count($textArray);
>foreach ($textArray as $key=>$textItem){
>//Показываем прогресс перевода
>echo \'Переведен фрагмент \'.$key.\' из \'.$numberOfTextItems;
>flush();
>$translatedItem = $translator->yandexTranslate(\'ru\', \'uk\', $textItem);
>$translatedArray[$key] = $translatedItem;
>}
>$translatedBigText = Big_Text_Translate::fromBigPieces($translatedArray);
>echo $translatedBigText;


----
Ознакомиться со всеми статьями и получить любую справочную информацию вы можете на сайте
www.army-guide.com/rus
Если Вы хотите бесплатно увидеть свою статью в этой рассылке, пишите по адресу
info@army-guide.com

----
Тактические КВ УКВ средства связи

В избранное