Как определить вхождение слова в текст, допуская незначительные грам. ошибки в нем?

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

Пример:
Есть текст:
Какая стоимасть у этого товара?

Алгоритм должен распознать это слово, при условии что в ключевых словах есть слово стоимость.

Сейчас всё это дело реализовано так:
1. Разбиваю текст на слова
2. Для каждого слова считаю расстояние Левенштейна от списка ключевых слов
3. Если расстояние не больше двух - это слово присутствует.
  • Вопрос задан
  • 432 просмотра
Пригласить эксперта
Ответы на вопрос 3
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
1. Пересечение множеств и сегментация цепочек данных.
(Левенштейн - полностью нерабочий вариант в данном случае)
2. Правила для автогенерации возможных ошибок/очепяток, дубликаты согласных, раскладки клавиатуры: а:о, и:е, е:ё, ц:й:у:ф:ы:в, п:а:р:к:е:н:м:и:т, и т.д.
3. Словарь синонимов по ключевикам
4. Словоформы

PS: пишите чат-бота-консультанта для интернет-магазина?)
Ответ написан
Самый простой путь - расстояние Хэмминга вот здесь, можно, например, рассмотреть типовые ошибки + опечатки, на основе длины слова делать вывод о возможном количестве ошибок, а затем уже считать расстояние Хэмминга и на этом основании принимать решение. Еще можно посмотреть на алгоритмы перцептивного хэширования для строк (похожие аргументы дадут похожий хэш) с последующим применением того же расстояния Хэмминга.
Ответ написан
Комментировать
@lega
Есть такой алгоритм (не помню названия):
Слово (или все предложение) формируют группы по 3 символа (или 4),
"стоимость" -> {__с, _ст_ сто, тои, оим, имо, мос, ост, сть, ть_, ь__}
В итоге когда будем искать пересечения (set & set) с ошибочным словом "стоимасть" -> {__с, _ст, ... }, мы получим 8 из 11 совпадений, а вообще если прогнать по всем ключевым словам и отсортировать результаты по релевантности то мы получим "стоимость" на первом месте как самое близкое слово.

Так же тут можно использовать обратный индекс и по слову находить тексты (включая те слова с ошибками).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы