Правильная транслитерация

Рейтинг: 1Ответов: 2Опубликовано: 17.11.2014

Задача:
Сервер каждый день получает список данных, который содержит ФИО, город, индекс и адрес на латинице. Цель -> транслитерировать.

Подумаешь, задача, первое, что в голову пришло - это Яндекс переводчик. Всё классно, русские имена, города и адреса, всё зашибись работает, но это не транслит а перевод: например, имя Said переводит как "Сказал" вместо "Саид". Поэтому создал функцию фильтр, которая перед отправкой на яндекс транслитерирует определенные слова, например: (Said->Саид, flat->кв., St=>ул. и т.д.). Но список не заканчивается, всё расширяется и расширяется. (

И еще, слова на латинице пишутся разными, например, улица Пушкинский могут быть St. Pushkinskiy,St. Pushkinskii,St. Puschkinski St. Puschkinsky. И это пример только на окончание "ский" и буква "ш". И яндекс таких слов просто не переводит.

В общем, всё не АЙС.

Функция типа:

strtr($text,array(a=>a,b=>б ...)) 

тут пока бессильна, так как это функция имя Tatyana транслитерирует как Татыана, а не Татьяна, в лучшем случае Татяна, если сделать strtr($text, array(ya=>я,...)), нужно море правил, правил для "Ь", "Ъ", чтоб их правильно вставлять.

Посоветуйте, пожалуйста, может, есть сервис, который всё грамотно транслитерирует или ошибки исправляет. Неужели придется изобретать велосипед?

Ответы

▲ 2

Есть некая библиотека - RUtils. Там есть модуль транслитерации.

И еще, слова на латинице пишутся разными, например улица Пушкинский могут быть St. Pushkinskiy,St. Pushkinskii,St. Puschkinski St. Puschkinsky. И это пример только на окончание "ский" и буква "ш".

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

▲ 1

Я когда-то, лет десять назад, писал подобный велосипед (правда, на чистых сях). Он декодировал текст в транслите и переводил в читаемый русский. 100% качества перевода не получалось (не все умеют писать транслитом нормально), но текст был читаемый и имел только мелкие огрехи (обычно это были ошибки самого пишущего).

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

У меня просто были правила пошире. Там даже по полслова было. :)