Глядя сегодня в адресную книгу своего телефона на Андроиде, я понял, что мне неудобно смотреть на список моих контактов, отсортированный по порядку символов в UTF.
Вот какой список я вижу:
А вот какой список мне бы хотелось увидеть, если локаль телефона — русская:
А вот такой список — если локаль английская:
Идея понятна, да? Сортировка идет по фонетическим правилам, к каждому элементу списка я добавил в скобочках значение букву/звук, которые и определяют положение элемента в списке.
*) Не совсем понятно, куда деть Ивана в английской сортировке. Звук [i:] — сортируется как английская буква E или, все же, как I?
**) Та же история с Яковом. Какой вариант транслитерации использовать — YA или JA?
Что-то подобное, вроде, появляется. Например, в Фейсбуке можно в поле поиска друзей начинать печатать либо по-русски, либо по-английски, и «найдется все»
Подозреваю, что простейшим вариантом реализации было бы использование правил транслита. Т.е. все элементы списка переводятся в кириллицу или латиницу в зависимости от локали, и уже потом сортируются. Но тут есть некотодые проблемы типа указанных выше. Очень часто побуквенная (или по-звучная) транслитерация совершенно не отражает произношение слова. Многообещающим кажется путь на основе чего-нибудь типа en.wikipedia.org/wiki/International_Phonetic_Alphabet, но не факт, что существует порядок символов в этом самом IPA.
Собственно, теперь вопросы:
1. Есть ли уже такие алгоритмы в виде библиотек? Если есть, накидайте ссылок, пожалуйста (например, для Джавы).
2. Давайте попробуем накидать список проблем, с которыми придется столкнуться, если это делать самому. И, желательно, решения этих проблем.
Вот какой список я вижу:
- John Smith
- Marcus Wolf
- Semen Slepakov
- William Shakespear
- Zorro
- Александр Пушкин
- Иван Барков
- Яков Перельман
А вот какой список мне бы хотелось увидеть, если локаль телефона — русская:
- Александр Пушкин (А)
- William Shakespear (В)
- John Smith (Д)
- Zorro (З)
- Иван Барков (И)
- Marcus Wolf (М)
- Semen Slepakov (С)
- Яков Перельман (Я)
А вот такой список — если локаль английская:
- Александр Пушкин (A)
- Иван Барков (звук i: *)
- John Smith (J)
- Marcus Wolf (M)
- Semen Slepakov (S)
- William Shakespear (W)
- Яков Перельман (YA**)
- Zorro (Z)
Идея понятна, да? Сортировка идет по фонетическим правилам, к каждому элементу списка я добавил в скобочках значение букву/звук, которые и определяют положение элемента в списке.
*) Не совсем понятно, куда деть Ивана в английской сортировке. Звук [i:] — сортируется как английская буква E или, все же, как I?
**) Та же история с Яковом. Какой вариант транслитерации использовать — YA или JA?
Что-то подобное, вроде, появляется. Например, в Фейсбуке можно в поле поиска друзей начинать печатать либо по-русски, либо по-английски, и «найдется все»
Подозреваю, что простейшим вариантом реализации было бы использование правил транслита. Т.е. все элементы списка переводятся в кириллицу или латиницу в зависимости от локали, и уже потом сортируются. Но тут есть некотодые проблемы типа указанных выше. Очень часто побуквенная (или по-звучная) транслитерация совершенно не отражает произношение слова. Многообещающим кажется путь на основе чего-нибудь типа en.wikipedia.org/wiki/International_Phonetic_Alphabet, но не факт, что существует порядок символов в этом самом IPA.
Собственно, теперь вопросы:
1. Есть ли уже такие алгоритмы в виде библиотек? Если есть, накидайте ссылок, пожалуйста (например, для Джавы).
2. Давайте попробуем накидать список проблем, с которыми придется столкнуться, если это делать самому. И, желательно, решения этих проблем.