Python Анализ содержания строки и поиск ключевых совпадений

Способ отфильтровать полезный контент в строке от команды в этой строке. Например: "найди в интернете сколько живут колибри". Результат: "найди в интернете" - команда, "сколько живут колибри" - контент. Важное условие - в команде из строки может быть опечатка, так что просто вырезать команду через split не получится. Пробовал использовать fuzzywuzzy, но эта штука дико непредсказуемая, а норм описания, соответствующего действительности так и не нашел.

Также имеется база команд, в виде джейсона. Одну из этих команд и надо найти в строке

Есть идеи как это можно провернуть?


Ответы (1 шт):

Автор решения: CrazyElf

Если опечатки только в самих словах могут быть, а пробелы правильно стоят, и если команда всегда идёт впереди, то всё довольно просто:

  • сортируете список команд по количеству слов в команде (в порядке убывания) - это чтобы случайно не "распознать" короткую команду там, где на самом деле длинная
  • идёте циклом по этому списку
  • отрезаете от фразы столько первых слов, сколько слов в команде
  • проверяете через fuzzywuzzy процент совпадения, если он больше скольки-то, то всё - нашли, иначе продолжаете цикл

Вариант последнего пункта на случай, если нет коротких команд, совпадающих первыми словами с длинными командами (при опечатке где-то в конце команды будет выбрана короткая команда, а не длинная этим способом):

  • вычисляете процент совпадения fuzzywuzzy, добавляете в специальный список кортеж (скор, длина команды)
  • берёте максимум от этого списка, в нём будет искомая длина команды
→ Ссылка