Алгоритм исправления орфографии - PullRequest
1 голос
/ 01 марта 2012

Это тоже общие алгоритмы, поэтому, пожалуйста, не прекращайте читать, если видите текст в тексте (пропустите первые 3 строки)

В Solr, для компонента проверки орфографии я установил extendedResults, чтобы получить частоты исправленного слова, а затем выбрал слово с наилучшей частотой. Я понимаю алгоритм проверки правописания, основанный на редактировании расстояния. Для примера:

Запрос к Solr: Мариен

Возвращенный текст проверки орфографии: Морской (Freq: 120), Рыночный (Freq: 900) и другие. Мой словарь здесь основан на проиндексированных словах.

Поэтому я выбрал «Маркет» (с большей частотой), но это неправильно, поскольку мое намерение было морским. Оба имеют Расстояние редактирования 2.

Теперь, как я могу улучшить этот Алгоритм, чтобы выбрать морской вместо рыночного (основанного на чем-то большем, чем редактирование расстояния и частоты)?

Должен ли я также включать некоторые алгоритмы "soundex"?

Я ищу простые вещи, которые я могу быстро реализовать.

Я даже пытался использовать алгоритм исправления заклинаний Питера Норвига (что здорово), но снова я столкнулся с теми же проблемами.

Ответы [ 3 ]

3 голосов
/ 01 марта 2012

В этом конкретном случае вы могли бы улучшить результаты, используя метрику, которая распознает транспозиции - «Мариан» отличается от «морской» двумя заменами, но только одной транспозицией, поэтому, если вы сделаете это, она кажется ближе, чем «рыночная» .

Классическая мера расстояния редактирования Левенштейна касается только вставок, удалений и замен. Однако расстояние Дамерау – Левенштейна также имеет отношение к транспозиции.

0 голосов
/ 06 марта 2012

Я использовал алгоритм soundex / metaphone поверх Edit Distance + Transposition, и он отлично работает.

0 голосов
/ 01 марта 2012

Все это проблема ранжирования.Что вам нужно сделать, это создать метод, который будет принимать несколько сигналов и с помощью некоторой формулы придавать важность каждому слову.Ранкер войдет в картину после того, как пользователь печатает и после того, как вы получили слова.На этом этапе вам нужно упорядочить свои результаты именно там, где фигурирует ранкер.

Теперь, чтобы решить вашу конкретную проблему.Допустим, ваша функция ранжирования принимает только 2 сигнала (частоту и звук).Если вы хотите marine вместо market, все, что вам нужно сделать, это придать больший вес сигналам Soundex и меньший вес частоте (скажем, 70/30).Эти веса могут быть настроены опытным путем на основе проб и ошибок, или они могут быть изучены машиной.Таким образом, частота встречаемости слов, которая является точной в других случаях, не полностью игнорируется, но все же есть мнение.

...