Какие вещи мы должны учитывать при написании проверки орфографии?


Я хочу написать очень простую проверку орфографии. Проверка орфографии будет пытаться сопоставить входное слово с эквивалентными словами из словаря.

Что можно сделать, чтобы найти эти "эквивалентные слова"? Какой анализ можно провести на основе двух слов, чтобы обозначить их эквивалент?

5 2

5 ответов:

Многое зависит от вашего варианта использования. Например:

    Ваш словарь очень мал (около двадцати слов)? В этом случае, вероятно, лучше предварительно вычислить все возможные рядом ошибочные слова и использовать поиск таблицы/хэша.
  • какова ваша модель ошибок? У Aspell есть по крайней мере два (один для орфографических ошибок, вызванных соседними буквами на клавиатуре, а другой для орфографических ошибок, вызванных тем, как звучит слово).
  • Насколько динамичен ваш словарь? Можете ли вы позволить себе сделать массированная подготовка для того, чтобы получить эффективный поиск?
  • Вам может понадобиться мера "эквивалентности слов", такая как двойная метафона, в дополнение к редактированию расстояния.
  • Вы можете почувствовать это, прочитав замечательное описание исправления орфографии Питера Норвига .
  • и, конечно, по возможности воровать код. Не изобретайте велосипед без причины-Причиной может быть совершенно особый домен, особый способ ваших пользователей делать орфографические ошибки или просто учиться как это делается.

Прежде чем вкладывать слишком много усилий в разгадку, я бы сначала посмотрел на уже существующие реализации, такие как Aspell или netspell по двум основным причинам

    Нет особого смысла заново изобретать колесо. Проверка орфографии гораздо сложнее, чем кажется на первый взгляд, и имеет смысл основываться на уже проделанной работе
  1. Если вы заинтересованы в том, чтобы узнать, как это сделать, исходный код и сообщество будут очень полезны, если вы решите реализовать свой собственный так или иначе

Edit Distance - это теория, необходимая для написания проверки орфографии. Вам также понадобится словарь. Большинство систем UNIX поставляются со словарем, уже установленным для вашей локали.

Я только что закончил реализацию проверки орфографии и использовал следующую комбинацию в получении списка "предложенных" слов

    Фонетическое хеширование" неправильно написанного " слова для поиска хэша идентичных словарных хэшированных реальных слов (для java проверьте кодек Apache Commons Для подходящей библиотеки). Фонетический хэш вашего словарного файла может быть предварительно вычислен.
  • изменить расстояние между входным сигналом и потенциалами (это достаточно дорого, поэтому вам нужно уменьшить расстояние между входным сигналом и потенциалами). список сначала с чем - то вроде фонетического хэша, предполагающего более высокую нагрузку объема - в моем случае, проверка орфографии на основе сервера)
  • известный список распространенных ошибок, например, получать и получать.
  • упорядоченный список наиболее распространенных слов в английском языке
По существу, я взвешивал каждое потенциальное слово в первую очередь на основе расстояния редактирования и общности. например, если вероятность слова равна проценту, то
weight = edit-distance *  100 / probability

(Чем меньше вес, тем лучше)

Но тогда я тоже также переопределите любой результат с известными общими ошибками написания (т. е. они всегда плавают к верхнему предложенному результату).

Могут быть и лучшие способы, но это сработало довольно хорошо.

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

Под linux / unix у вас есть ispell. Зачем изобретать Велл?