2015-12-16 2 views
1

Я пытаюсь написать программу в JAVA, которая хранит словарь в хэш-карте (каждое слово под другим ключом) и сравнивает данное слово со словами в словаре и придумывает предложение о правописании, если оно не найдено в словаре - в основном программа проверки орфографии.Сравнение слова с целенаправленными словами в словаре

Я уже придумал алгоритм сравнения (например, Needleman-Wunsch then Levenshtein distance) и т. Д., Но застрял, когда выяснилось, какие слова в словаре-hashmap сравнить слово с i.e. «hellooo».

Я не могу сравнить «ohelloo» [следует исправить «привет» каждому слову в словаре b/c, который займет слишком много времени, и я не могу сравнить его со всеми словами в словаре, начиная с «o» b/c он должен быть «привет».

Любые идеи?

+0

Вы можете сравнить все сдвиги данного слова и выбрать наилучшее соответствие. Например: «ohelloo», «hellooo», «elloooh», ... – piotrekg2

+0

в порядке, но тогда как бы выбрать подмножество слов в словаре для сравнения слова? – Rolf

+0

Я не думаю, что хэш-карта является хорошей структурой данных для решения этой проблемы. Используя дерево trie/suffix, вы сможете быстро найти все слова с заданным префиксом. – piotrekg2

ответ

0

Наиболее распространенные орфографические ошибки

  • Удалить письмо (меньше слова или слово раскол)
  • свопа смежных букв
  • Alter письмо (QWERTY соседних букв)
  • Вставить письмо

Некоторые сообщения говорят о том, что 70-90% ошибок относятся к вышеуказанным категориям (расстояние редактирования 1)

Посмотрите на приведенный ниже адрес, который предлагает решение для одиночных или двойных ошибок (отредактируйте расстояние 1 или 2). Здесь есть все, что вам нужно!

How to write a spelling corrector

FYI: Вы можете найти реализацию на различных языках программирования в нижней части вышеупомянутой статьи. Я использовал его в некоторых своих проектах, практическая точность действительно хорошая, иногда более 95%%, как утверждает автор.

--Based на OP-х comment-- Если вы не хотите, чтобы предварительно вычислять все возможные изменения, а затем поиск на карте, я полагаю, что вы используете Patricia (radix tree синтаксического дерева) вместо HashMap. К сожалению, вам снова понадобится обработать «ошибку первой буквы» (например, удалить первую букву или сначала поменять местами со второй или просто заменить ее соседним Qwerty), и вы можете ограничить свой поиск с высокой вероятностью.

Вы можете даже комбинировать его с дополнительной таблицей индексов или Trie с «обратными» словами или дополнительным индексом, который пропускает первые N символов (например, первые 2), поэтому вы можете ловить ошибки, возникающие только при префиксе.

+0

Thanks; Я уже придумал алгоритм скоринга/сравнения слова с данным словарем. Мой вопрос был о том, какие слова в словаре сравнивать слово, например, как выбирать похожие слова в словаре – Rolf

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