Романизация (транслитерация) русских (и славянских) топонимов

Там нет проблем, ибо тамошняя латиница буква в букву имеет соответствие с кирилицей в обе стороны.
Слава Вуку Караджичу.
Один звук-один символ

http://ru.wikipedia.org/wiki/%D0%93%D0%B0%D0%B5%D0%B2%D0%B8%D1%86%D0%B0
http://ru.wikipedia.org/wiki/%D0%92%D1%83%D0%BA%D0%BE%D0%B2%D0%B8%D1%86%D0%B0

Hind, А улицу молодости на польском “Młodość” ты как вводить будешь в поисковике?
Или улицу Karađorđevića (она есть еще и кирилицей)

Только не все, кроме сербов об этом знают.
И встретив перечеркнутую Ð в имени улицы, половина будет искать D а другая половина Dz.

Но за ссылки гран-мерси. Всеравно с чего-то надо начинать.

Просто в большинстве случаев, система транслитерации/романизации составляется таким образом чтобы преобразование было более-ли менее днозначным (что в общем то понятно), мне же однозначность не сильно нужна, мне важнее варианты практического написания.

Спасибо, прочту.

Так мне кажется, что задача-то обратная. Не из кирилицы получать латиницу, а наоборот. Из вольно написаной латиницы получить кирилицу, и не один вариант.

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

Так задача то в чём?
Отобразить карту для латиноязычных пользователей? Тут годятся одни подходы.
Или сделать нечёткий поиск? Тут подходы нужны совершенно другие.

Для последнего - мне очень нравится система поиска у TomTom, вот с кого надо брать пример.
Там как раз решены эти проблемы, объекты индексируются и ищутся по звучанию, а не по написанию. Соответственно можно вводить как хочешь (хоть латиницей, хоть кирилицей) и с ошибками - поиск всё равно находит.

Нечеткий поиск.

А у томтома один движок поиска в онлайн и офлайн версии один?
т.к. http://routes.tomtom.com меня не порадовал:
Екатеринбург - не нашел
Yekaterinburg - нашел то что нужно
Ekaterinburg - нашел дорогу Tumen - Ekaterinburg

Варианты есть тут https://en.wikipedia.org/wiki/Romanization_of_Russian#Transliteration_table
Подозреваю что и для прочих славянских языков в вики всё есть.

Мне кажется тебе в самом деле нужен нечеткий поиск, чтобы искалось даже Jekaterinburg/Iekaterinburg, хотя ни в одной нормативной таблице такого варианта нет.

Mlodsc, Karadordevica. Другой латиницы у меня нет)

Нечеткий поиск который отловит Yekaterinburg/Iekaterinburg/katerinburg у меня есть.
Но это не серебряная пуля, чем ближе ты угадал возможные варианты ввода транслита - тем всеравно лучше.

Нет, разные.
Только что попробовал на андроидной версии - эти 3 варианта находит.
Правда эта версия чувствительна к некоторым ошибкам написания, iekaterinburg находит, а ikaterinburg уже нет.
Когда-то юзал версию под symbian, там и такие влёт находило.

А у томтома поиск по уровням? Тоесть в начале ищем Екатеринбург, потом Ленина, потом 46/5 ? Или одним запросом?

Можно и так и так.
Можно ввести просто Ленина 46 - выведет ближайшие по текущему местоположению с сортировкой по дистанции.
Можно найти Екатеринбург, выбрать его, затем искать улицу.
А можно просто подряд набрать “екатеринбург ленина 46” - найдёт соответствующий дом.
Результаты показываются сразу, в процессе набора, можно до конца не набирать, а выбрать вариант из списка.

Я сам никогда не пробовал, но вроде-бы транслитерации можно абстрагировать как отдельные языки их детектить с 99% точностью: https://code.google.com/p/language-detection/

“EN-RU-1”
“EN-RU-2”
“EN-RU-3”
“EN-RU-4”
“SE-RU”

А потом не велосипедить ничьими диссертациями, а использовать великие базы Юникода:
http://www.unicode.org/cldr/charts/26/by_type/locale_display_names.locale_variants.html
http://cldr.unicode.org/index/cldr-spec/transliteration-guidelines
http://cldr.unicode.org/translation/transforms

Ошибки в транслитерации компенсируются на уровне определения языка.

Тоесть ты Никит предлагаешь детектировать транслит на этапе разбора запроса от пользователя, потом восстанавливать оригинал и искать по вариациям того что запросил пользователь?

Это конечно тоже вариант, но вот этап определения языка, тоесть генерации описания для этих:

"EN-RU-1"
"EN-RU-2"
"EN-RU-3"
"EN-RU-4"
"SE-RU"

мне видится столь же трудоемким как и описание транслитерации и сбора вариантов практически применяемого транслита.

Опять же, если я сделал описание для “EN-RU-2”, “EN-RU-3” и т.д. то зачем мне их потом определять на уровне разбора запроса, мне дешевле индексировать сразу несколько вариантов записи а на уровне запроса ограничится ошибкой с дистанцией Левеншьтейна (ну или Н-грамный индекс построить).

В общем то я пытаюсь найти популярные и часто употребимые “языки”.

Базу (которая http://cldr.unicode.org) я посмотрю, там вроде в основном то что я уже видел (для кириллицы).

Тут было бы очень полезно отыскать наборы транслитерированных текстов, только транслитерированных пользователями при вводе, а не автоматом по одному из принятых стандартов.

Так просто можно статистику копить как люди искали и что (особенно если они не бросали после первой неудачи)
Если проанализировать последовательность запросо, то можно как-то прикинуть каких подстаново не хватает при поиске.
Ескали Ikaterenburg - не нашли, тут же искали Еkaterenburg нашли и успокоились, значит мена E на I вполне нормальное у пользователя явление и т.п.

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

Статистика конечно была бы сильно в помошь, но это у Яндекса или Гугла - статистика, а у меня с посещаемостью в 2 десятка человек/день - не статистика, а смех один.

Дык ее можно зато ручками всю обработать. Ручная работа даст лучший результат

Посмотрел логи, нашел топ 10 сканирований на уязвимые сервисы. Ищут PHPMyAdmin, jmx, SQLitePHPAdmin :slight_smile:

По логам не очень понятно на сколько пользователь остался удовлетворен, но это повод более лучше следить за пользователями. Транслитом правда не ищут пока ничего.

Наборы текстов это запросы пользователей.

Чтобы понять с чем ты столкнулся предлагаю сделать два шага назад. Почему это всё происходит:

  1. у пользователя пальцы-сосиски и он промахивается на тачпаде
  2. чёртов стиб джобс и его очередная поделка
  3. чёртов дизайнер всея руси “буква Х - для лохов”
  4. чёртовы википедисты “буква X - не буква”
  5. пользователи у которых мизинец слабо двигается
  6. пользователи у которых клавиатура дебильная и они часто промахиваются по кнопкам
  7. пользователи которые привыкли печатать на одной клавиатуре, а им всучили другую
  8. у меня в системе только язык ZYX, верните мой XYC!!!

“ошибки” “транслитерации”:

  1. зависят от пользователя
  2. зависят от конкретного устройства которым он делает запрос
  3. зависят от уровня начитанности в каком-то языке или сленге (Ъ - не буква)

Выходы:

  1. пытаться создать “правила” которые опишут это действо
  2. скормить прорву данных фильтр Байеса и он сам научится лучше всех говорить

Пояснение:
Десять медиков-специалистов могут вылечить пациента 50% правильно, но экспертная система имеющая доступ к мировому банку данных сделает 60% правильный ответ. Ссылку забыл.

Кто круче: Байес или ручные “правила” нужно постоянно мониторить/реваулировать.