Какие вещи мы должны учитывать при написании проверки орфографии? - PullRequest
2 голосов
/ 30 апреля 2009

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

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

Ответы [ 5 ]

5 голосов
/ 30 апреля 2009

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

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

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

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

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

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

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

weight = edit-distance *  100 / probability

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

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

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

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

1 голос
/ 30 апреля 2009

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

0 голосов
/ 30 апреля 2009

В Linux / Unix у вас есть ispell. Зачем изобретать велосипед?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...