Я ищу эффективную структуру данных / алгоритм для хранения и поиска по поиску слов на основе транслитерации (например, Google: http://www.google.com/transliterate/ , но я ' m, не пытаясь использовать API транслитерации Google). К сожалению, естественный язык, над которым я пытаюсь работать, не имеет никакого звукового выражения, поэтому я сам по себе.
Для проекта с открытым исходным кодом в настоящее время я использую простые массивы для хранения списка слов и динамической генерации регулярных выражений (на основе ввода данных пользователем) для их сопоставления. Он работает нормально, но регулярное выражение слишком мощное или ресурсоемкое, чем мне нужно. Например, я боюсь, что это решение будет слишком сильно разряжать батарею, если я попытаюсь перенести его на карманные устройства, поскольку поиск по тысячам слов с помощью регулярных выражений обходится слишком дорого.
Должен быть лучший способ сделать это для сложных языков, например, как работает метод ввода пиньинь? Есть предложения, с чего начать?
Заранее спасибо.
Изменить: Если я правильно понимаю, это предлагается @ Dialecticus-
Я хочу транслитерировать с Language1 , который имеет 3 символа a, b, c
на Language2 , который состоит из 6 символов p, q, r, x, y, z
. Из-за разницы в количестве символов, которыми обладают каждый язык и их телефоны, часто не удается определить взаимно однозначное сопоставление.
Давайте предположим, что фонетически это наши ассоциативные массивы / таблица транслитерации:
a -> p, q
b -> r
c -> x, y, z
У нас также есть действительные списки слов в простых массивах для Language2 :
...
px
qy
...
Если пользователь вводит ac
, возможные комбинации становятся px, py, pz, qx, qy, qz
после шага транслитерации 1. На шаге 2 мы должны выполнить еще один поиск в допустимом списке слов и удалить все из них, кроме пикселей
и кв
.
То, что я делаю в настоящее время, не сильно отличается от описанного выше подхода.Вместо того, чтобы создавать возможные комбинации с использованием таблицы транслитерации, я создаю регулярное выражение [pq] [xyz]
и сопоставляю его с моим действительным списком слов, который обеспечивает вывод px
и qy
.
Мне не терпится узнать, есть ли лучший метод, чем этот.