Сравните строку с большим предложением и получите процент сходства - PullRequest
0 голосов
/ 24 сентября 2019

Я пробую собственный проект, в котором, даже если кто-то вводит слово с ошибкой, программа сравнивает его с предложением, а затем выводит определенный процент на основе процента сходства текста.

Во время поиска методов в Интернете я наткнулся на множество алгоритмов (расстояние Левеншайна, расстояние Хэмминга, сходство Жакара и т. Д.). Кроме того, такие модули Python, как Difflib и Fuzzywuzzy, но не получили ожидаемый результат

Использование Fuzzywuzzy :

process.extract("radisson",ds,scorer=fuzz.partial_ratio,limit=10)


Приведенный выше фрагмент выводит прогнозируемый результат, однако, если я изменю одну букву из запроса следующим образом:

 process.extract("radison",ds,scorer=fuzz.partial_ratio,limit=10)


Вывод совершенно другой. Где не найдено слов, относящихся к 'radison'.

Ожидаемое поведение :

Ввод :
string = "radison"
text1 = "Hotel radisson palace"
text2 = "radison homes"
text3 = "Hotel radis"


Выход :
Процент сходства выглядит следующим образом:
с текстом1 90%
с текстом2 100%
с текстом3 65%

1 Ответ

1 голос
/ 24 сентября 2019

Предполагается способ сравнения двух слов на предмет сходства (здесь вы бы использовали Левенштейна, Хэмминга и т. Д.) И способ превращения предложения в последовательность слов (str.split() - самая базовая реализация, или выможно использовать что-то вроде ntlk.tokenize), тривиальная реализация:

def similarity(w1:str, w2:str) -> float:
    pass

def tokenize(sentence:str) -> [str]:
    pass

def word_in_sentence(word:str, sentence:str) -> float:
    return max(similarity(word, token) for token in tokenize(sentence))
...