Какие вещи мы должны учитывать при написании проверки орфографии?
Я хочу написать очень простую проверку орфографии. Проверка орфографии будет пытаться сопоставить входное слово с эквивалентными словами из словаря.
Что можно сделать, чтобы найти эти "эквивалентные слова"? Какой анализ можно провести на основе двух слов, чтобы обозначить их эквивалент?
5 ответов:
Многое зависит от вашего варианта использования. Например:
Ваш словарь очень мал (около двадцати слов)? В этом случае, вероятно, лучше предварительно вычислить все возможные рядом ошибочные слова и использовать поиск таблицы/хэша.
- какова ваша модель ошибок? У Aspell есть по крайней мере два (один для орфографических ошибок, вызванных соседними буквами на клавиатуре, а другой для орфографических ошибок, вызванных тем, как звучит слово).
- Насколько динамичен ваш словарь? Можете ли вы позволить себе сделать массированная подготовка для того, чтобы получить эффективный поиск?
- Вам может понадобиться мера "эквивалентности слов", такая как двойная метафона, в дополнение к редактированию расстояния.
- Вы можете почувствовать это, прочитав замечательное описание исправления орфографии Питера Норвига .
- и, конечно, по возможности воровать код. Не изобретайте велосипед без причины-Причиной может быть совершенно особый домен, особый способ ваших пользователей делать орфографические ошибки или просто учиться как это делается.
Прежде чем вкладывать слишком много усилий в разгадку, я бы сначала посмотрел на уже существующие реализации, такие как Aspell или netspell по двум основным причинам
Нет особого смысла заново изобретать колесо. Проверка орфографии гораздо сложнее, чем кажется на первый взгляд, и имеет смысл основываться на уже проделанной работе
- Если вы заинтересованы в том, чтобы узнать, как это сделать, исходный код и сообщество будут очень полезны, если вы решите реализовать свой собственный так или иначе
Edit Distance - это теория, необходимая для написания проверки орфографии. Вам также понадобится словарь. Большинство систем UNIX поставляются со словарем, уже установленным для вашей локали.
Я только что закончил реализацию проверки орфографии и использовал следующую комбинацию в получении списка "предложенных" слов
Фонетическое хеширование" неправильно написанного " слова для поиска хэша идентичных словарных хэшированных реальных слов (для java проверьте кодек Apache Commons Для подходящей библиотеки). Фонетический хэш вашего словарного файла может быть предварительно вычислен.
По существу, я взвешивал каждое потенциальное слово в первую очередь на основе расстояния редактирования и общности. например, если вероятность слова равна проценту, то- изменить расстояние между входным сигналом и потенциалами (это достаточно дорого, поэтому вам нужно уменьшить расстояние между входным сигналом и потенциалами). список сначала с чем - то вроде фонетического хэша, предполагающего более высокую нагрузку объема - в моем случае, проверка орфографии на основе сервера)
- известный список распространенных ошибок, например, получать и получать.
- упорядоченный список наиболее распространенных слов в английском языке
weight = edit-distance * 100 / probability
(Чем меньше вес, тем лучше)
Но тогда я тоже также переопределите любой результат с известными общими ошибками написания (т. е. они всегда плавают к верхнему предложенному результату).
Могут быть и лучшие способы, но это сработало довольно хорошо.
Вы также можете игнорировать все заглавные слова, инициалы и т. д., Поэтому выбор того, что игнорировать, также является чем-то, о чем стоит подумать.