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

问题描述 投票:0回答:1

我有一个要与候选列表匹配的字符串。这是一个例子:

# 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

我猜这是一个普遍的问题,可能已经广泛解决,所以我想知道是什么库/工具/等。也许是获得我想要做的最好的方法?

python python-3.x string search levenshtein-distance
1个回答
1
投票

您正在寻找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程序包中的不同功能,以了解哪种情况最适合您。

© www.soinside.com 2019 - 2024. All rights reserved.