Python字符串相似性(具有复杂性)

Python字符串相似性(具有复杂性),python,python-3.x,string,search,levenshtein-distance,Python,Python 3.x,String,Search,Levenshtein Distance,我有一个字符串,我想匹配一个候选人名单。以下是一个例子: # ignore case string = "The Shining" # The Stanley Kubrick Movie candidates = ['Shining', 'The shins', 'Shining, The'] most_similar(string, candidates) ==> 'Shining, The' 在进行“文字字符串比较”时,我通常在这种情况下使用or比率。但是,我想做一个更复杂的相似性

我有一个字符串,我想匹配一个候选人名单。以下是一个例子:

# ignore case
string = "The Shining" # The Stanley Kubrick Movie
candidates = ['Shining', 'The shins', 'Shining, The'] 
most_similar(string, candidates)
==> 'Shining, The'
在进行“文字字符串比较”时,我通常在这种情况下使用or比率。但是,我想做一个更复杂的相似性测试,以便在上述情况下,最好的匹配是
Shining,即

我猜这是一个常见的问题,可能已经得到了广泛的解决,所以我想知道什么库/工具/等可能是获得我想要做的事情的最佳方式?

您正在寻找或包

在这种特定情况下,您可能倾向于
fuzzyfuzzy
,因为您只是尝试进行字符串匹配

gensim
更适用于计算文档、段落、句子、单词、语料库等的相似性分数和向量表示。。。目标是获取语义/主题意义,而不是文字字符串匹配

因此,在您的情况下,使用模糊字符串匹配,您可以执行以下操作:

from fuzzywuzzy import fuzz

fuzz.partial_ratio('Shining', 'The shins')
>>> 50 

fuzz.partial_ratio('Shining', 'Shining, The')
>>> 100

fuzz.partial_ratio('Shining', 'unrelated')
>>> 14
partial_ratio
函数区分大小写,因此您可能希望将所有输入都小写。它将输出一个介于0和100之间的分数(100是一个非常强的匹配)。这取决于你如何从中筛选出匹配项,可能使用一个阈值:
如果分数>75:这是一个匹配项

我建议查看
fuzzyfuzzy
包中的不同函数,看看什么最适合您的情况。

您正在寻找or包

在这种特定情况下,您可能倾向于
fuzzyfuzzy
,因为您只是尝试进行字符串匹配

gensim
更适用于计算文档、段落、句子、单词、语料库等的相似性分数和向量表示。。。目标是获取语义/主题意义,而不是文字字符串匹配

因此,在您的情况下,使用模糊字符串匹配,您可以执行以下操作:

from fuzzywuzzy import fuzz

fuzz.partial_ratio('Shining', 'The shins')
>>> 50 

fuzz.partial_ratio('Shining', 'Shining, The')
>>> 100

fuzz.partial_ratio('Shining', 'unrelated')
>>> 14
partial_ratio
函数区分大小写,因此您可能希望将所有输入都小写。它将输出一个介于0和100之间的分数(100是一个非常强的匹配)。这取决于你如何从中筛选出匹配项,可能使用一个阈值:
如果分数>75:这是一个匹配项


我建议查看
fuzzyfuzzy
包中的不同函数,看看什么最适合您的情况。

太棒了,这正是我想要的。你能用gensim展示一下上面输入/输出的一个基本例子吗?我接受答案?@Jar--太好了,谢谢。出于对高层的好奇,fuzzy和gensim之间有什么区别?对于基本的字符串比较,您建议这两种方法中的哪一种?@David542我没有广泛使用gensim,但据我了解,gensim不是用于字符串匹配,而是用于捕获语义(即猫和狗都是动物,所以它们很相似)。fuzzyfuzzy是字符串匹配的常用工具。太好了,感谢您的详细介绍和建议。超级有用:)!!太棒了,这正是我想要的。你能用gensim展示一下上面输入/输出的一个基本例子吗?我接受答案?@Jar--太好了,谢谢。出于对高层的好奇,fuzzy和gensim之间有什么区别?对于基本的字符串比较,您建议这两种方法中的哪一种?@David542我没有广泛使用gensim,但据我了解,gensim不是用于字符串匹配,而是用于捕获语义(即猫和狗都是动物,所以它们很相似)。fuzzyfuzzy是字符串匹配的常用工具。太好了,感谢您的详细介绍和建议。超级有用:)!!