首页 > 解决方案 > 将字符串与大句子进行比较并获得相似度百分比

问题描述

我正在尝试一个自我项目,即使有人输入了拼写错误的单词,程序也会将其与句子进行比较,然后根据文本相似度的百分比输出特定的百分比。

在在线搜索技术时,我遇到了许多算法(Levenshein 距离、汉明距离、Jaccard 相似度等)。还有 Difflib 和 Fuzzywuzzy 等 python 模块,但没有得到预期的输出

使用 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 radison Palace"
text2 = "radison home"
text3 = "Hotel radis"


输出
相似度百分比如下:
with text1 90%
with text2 100%
with text3 65%

标签: pythonpython-3.xstringsimilaritylevenshtein-distance

解决方案


假设有一种比较两个词的相似性的方法(这是您使用 levenshtein、hamming 等的地方)以及一种将句子转换为单词序列的方法(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))

推荐阅读