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

2024-06-26 10:12:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串,我想与一个候选人名单相匹配。举个例子:

# ignore case
string = "The Shining" # The Stanley Kubrick Movie
candidates = ['Shining', 'The shins', 'Shining, The'] 
most_similar(string, candidates)
==> 'Shining, The'

在进行“文本字符串比较”时,我通常在本例中使用Levenshtein distance或比率。但是,我想做一个更复杂的相似性测试,以便在上面的情况下最好的匹配是Shining, The。你知道吗

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


Tags: the字符串moststringmovie例子ignorecase
1条回答
网友
1楼 · 发布于 2024-06-26 10:12:31

您正在寻找gensimfuzzywuzzy包。你知道吗

在这个特定的例子中,您可能倾向于fuzzywuzzy,因为您只是尝试进行字符串匹配。你知道吗

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是一个非常强的匹配)。这取决于你如何从中筛选出匹配项,也许可以使用一个阈值:if score > 75: its a match。你知道吗

我建议您研究一下fuzzywuzzy包中的不同函数,看看什么最适合您的情况。你知道吗

相关问题 更多 >