Python Анализ содержания строки и поиск ключевых совпадений
Способ отфильтровать полезный контент в строке от команды в этой строке. Например: "найди в интернете сколько живут колибри". Результат: "найди в интернете" - команда, "сколько живут колибри" - контент. Важное условие - в команде из строки может быть опечатка, так что просто вырезать команду через split не получится. Пробовал использовать fuzzywuzzy, но эта штука дико непредсказуемая, а норм описания, соответствующего действительности так и не нашел.
Также имеется база команд, в виде джейсона. Одну из этих команд и надо найти в строке
Есть идеи как это можно провернуть?
Ответы (1 шт):
Если опечатки только в самих словах могут быть, а пробелы правильно стоят, и если команда всегда идёт впереди, то всё довольно просто:
- сортируете список команд по количеству слов в команде (в порядке убывания) - это чтобы случайно не "распознать" короткую команду там, где на самом деле длинная
- идёте циклом по этому списку
- отрезаете от фразы столько первых слов, сколько слов в команде
- проверяете через
fuzzywuzzyпроцент совпадения, если он больше скольки-то, то всё - нашли, иначе продолжаете цикл
Вариант последнего пункта на случай, если нет коротких команд, совпадающих первыми словами с длинными командами (при опечатке где-то в конце команды будет выбрана короткая команда, а не длинная этим способом):
- вычисляете процент совпадения
fuzzywuzzy, добавляете в специальный список кортеж(скор, длина команды) - берёте максимум от этого списка, в нём будет искомая длина команды