Проверка орфографии повторяющихся букв

Пишу проверку орфографии. Я знаю все о расстоянии Левенштейна, попытках и т. д.

Однако моя проблема заключается в том, чтобы исправить слово с повторяющимися буквами, такими как: haaaaapppppyyy, на happy. Что было бы лучшим способом справиться с этим?

До сих пор я думаю об использовании модифицированного дерева, при котором, когда я достигаю «а» и вижу, что в дереве нет другого следующего за «а», я пропускаю все «а» в строке, пока не доберусь до p и продолжаю оттуда.

Я не совсем уверен, что это лучший способ реализовать его или будет ли он работать на всех строках.

Какие-либо предложения?


person darksky    schedule 28.10.2012    source источник
comment
Это определенно не будет работать на всех струнах, но я предполагаю, что оно будет работать примерно на 99,99% из них :p   -  person keyser    schedule 28.10.2012
comment
Какова цель проверки орфографии? Это для людей или как питание для машины? (В последнем случае проблема может быть решена с помощью стемминга, поскольку стеммеры все равно удалят большинство повторяющихся букв и канонизируют все слова в их форму с корнями)   -  person amit    schedule 28.10.2012
comment
Люди. Таким образом, вы можете ввести: hhhhaaaappppyyy, и он должен предложить «счастливый» в качестве замены.   -  person darksky    schedule 28.10.2012
comment
Вы изучали скрытые марковские модели?   -  person Andrew White    schedule 28.10.2012
comment
Каковы ваши данные? Можете ли вы позволить себе выход в Интернет? У вас есть корпус? Или просто словарь?   -  person amit    schedule 28.10.2012
comment
Просто словарь. Я пытаюсь реализовать алгоритм менее чем за O(n), поэтому я могу сканировать его только один раз (и заполнять дерево во время сканирования).   -  person darksky    schedule 28.10.2012


Ответы (1)


Вы можете создать новое дерево, удалив все повторяющиеся буквы (например, happy -> hapy). При проверке слова сделайте то же самое (haaaaapppppyyy -> hapy) и найдите его в дереве.

person lqs    schedule 28.10.2012
comment
Обратите внимание, что у него не будет разницы между кровотечением и кровотечением (что может быть хорошо или плохо, в зависимости от приложения). - person amit; 28.10.2012