Эффективная структура данных / алгоритм для слова lo на основе транслитерации okup

Я ищу эффективную структуру данных / алгоритм для хранения и поиска по поиску слов на основе транслитерации (например, 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 .

Мне не терпится узнать, есть ли лучший метод, чем этот.

6
задан Mehdi 24 September 2011 в 19:48
поделиться