У меня была эта ошибка, когда я пытался использовать retrolambda внутри своих модульных тестов. Я не нашел решения, как сделать retrolambda работать с модульными тестами. Итак, я использую старомодные анонимные классы вместо лямбда с моими модульными тестами, и это работает для меня.
Read на Обход дерева . Фундаментальное понятие следующие:
А действительно короткий пример:
Словарь:
яблоко вершины назначают назначенными
Tree: (*
указывает на допустимый конец слова) обновление: Спасибо Curt Sampson для указания, что эту структуру данных называют Patricia Tree
A -> P -> E -> X*
\\-> P -> L -> E*
\\-> O -> I -> N -> T* -> E -> D*
Документ:
яблоко appint обезьяна
Результаты:
A -> P -> P
, но второе P
не имеет I
дочерний узел, таким образом, поиск перестал работать. E
узел в A -> P -> E
не имеет "допустимого конца слова" набором флага. редактирование: для получения дополнительной информации при написании предложений, изучите расстояние Левенштейна , который измеряет самое маленькое количество изменений, которые должны быть внесены для преобразования одной строки в другого. Лучшие предложения были бы словами словаря с самым маленьким расстоянием Левенштейна к неправильно произнесенному слову по буквам.
Учитывая Вас не знают, где начать, я предложил бы использовать существующее решение. Посмотрите, например, aspell (лицензируемый GLPL). Если действительно необходимо реализовать его сами, скажите нам почему.
Разделение слова в корень и суффикс является knonw как "алгоритмом стемминга Портера", это - хороший способ соответствовать английскому ditionary в удивительно маленькую память.
Это также полезно для seach, таким образом, "программа проверки правописания" также найдет "проверку правописания" и "проверку правописания"
Нужно посмотреть на префиксы и суффиксы.
внезапно = внезапный + ly.
путем удаления ly's можно уйти, храня просто корневое слово.
Аналогично предварительно выделяют = пред +, выделяют.
И любовно = любовь + луг + ly становится немного более сложным, поскольку английский управляет для [1 111], луг вызывается.
существует также возможность использования своего рода хеш-функции для отображения, корневое слово в определенный бит является большим битовым массивом как постоянный метод времени определения, если корневое слово по буквам произнесено правильно.
можно стать еще более сложными путем попытки предоставить альтернативный список возможных корректных написаний к слову с ошибками. Вы могли бы исследовать soundex алгоритм для получения некоторое представление.
я советовал бы моделировать с маленьким набором слов. Сделайте большое тестирование, затем увеличьтесь. Это - замечательная образовательная проблема.
Я сделал это в классе
. Вам следует рассмотреть python Natural Language Toolkit NLTK , который создан специально для этого.
Он также позволяет создавать текстовые интерпретаторы, такие как чат-боты
Программа проверки орфографии Open Office Hunspell может быть хорошей отправная точка. Вот домашняя страница: Ханспелл в Sourceforge