2009-04-30 2 views
2

Я хочу написать очень простой инструмент проверки орфографии. Проверка орфографии попытается совместить входное слово с эквивалентными словами из словаря.Что мы должны учитывать при написании Spell Checker?

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

ответ

3

Многое зависит от вашего прецедента. Например:

  • Ваш словарь очень маленький (около двадцати слов)? В этом случае, вероятно, лучше прекомпретировать все возможные близкие ошибочные слова и использовать таблицу/хэш-поиск.
  • Какая у вас ошибка? У Aspell есть как минимум два (один для орфографических ошибок, вызванных соседними буквами на клавиатуре, а другой для орфографических ошибок, вызванных тем, как звучит слово).
  • Насколько динамичен ваш словарь? Можете ли вы позволить себе сделать массовую подготовку, чтобы получить эффективный поиск?
  • Возможно, вам понадобится мера «эквивалентности слов», например Double Metaphone, в дополнение к расстоянию редактирования.
  • Вы можете почувствовать это, прочитав Peter Norvig's great description of spelling correction.
  • И, конечно, по возможности, кражи кода. Не изобретайте велосипед без причины - причина может быть очень особенной областью, особым образом ваши пользователи совершают орфографические ошибки или просто узнают, как это делается.
+0

Спасибо. Ваши предложения были очень полезными. – sul4bh

+0

Рад, что они сделали. Удачи. –

5

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

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

Тем не менее, это довольно интересная проблема для работы. Переосмысление колеса также может быть образовательным. –

1

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

0

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

+2

Это иронично, что в ответ на проверку орфографии вы неправильно произвели «колесо» ...! – Sean

+1

Они также пропустили дефис, но я сомневаюсь, что это означало так же иронично. :) –

+0

Извините. Это не было иронично (к сожалению). На самом деле это была опечатка. Вы получите 1 балл от меня :-) – Luixv

1

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

  • фонетический хеширования из «орфографической ошибки» слова для поиска хэша идентичного словаря хэширование реальных слов (для Java-проверки Apache Commons Codec для подходящей библиотеки). Фонетический хэш вашего файла словаря можно предварительно вычислить.
  • Редактирование расстояния между входом и потенциалами (это достаточно дорого, поэтому сначала нужно свернуть список с чем-то вроде фонетического хеша, предполагая большую нагрузку на объем - в моем случае - проверку орфографии на сервере)
  • Известный список распространенных орфографических ошибок, например получать и получать.
  • Упорядоченный список наиболее употребительных слов на английском языке

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

weight = edit-distance * 100/probability 

(нижние веса лучше)

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

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

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

Смежные вопросы