【发布时间】:2017-09-12 22:11:29
【问题描述】:
我有一种情况,我需要将给定字符串中的名称与名称数据库进行匹配。下面我给出了一个非常简单的例子来说明我遇到的问题,我不清楚为什么一个案例比另一个案例有效?如果我没记错的话,extractOne() 的 Python 默认算法是 Levenshtein 距离算法。是因为 Clemens 的名字提供了前两个首字母,而 Gonzalez 的案例中只有一个?
from fuzzywuzzy import fuzz
from fuzzywuzzy import process
s = ['Gonzalez, E. walked down the street.', 'Gonzalez, R. went to the market.', 'Clemens, Ko. reach the intersection; Clemens, Ka. did not.']
names = []
for i in s:
name = [] #clear name
for k in i.split():
if k[0].isupper(): name.append(k)
else: break
names.append(' '.join(name))
if ';' in i:
for each in i.split(';')[1:]:
name = [] #clear name
for k in each.split():
if k[0].isupper(): name.append(k)
else: break
names.append(' '.join(name))
print(names)
choices = ['Kody Clemens','Kacy Clemens','Gonzalez Ryan', 'Gonzalez Eddy']
for i in names:
s = process.extractOne(i, choices)
print(s, i)
输出:
['Gonzalez, E.', 'Gonzalez, R.', 'Clemens, Ko.', 'Clemens, Ka.']
('Gonzalez Ryan', 85) Gonzalez, E.
('Gonzalez Ryan', 85) Gonzalez, R.
('Kody Clemens', 86) Clemens, Ko.
('Kacy Clemens', 86) Clemens, Ka.
【问题讨论】:
-
您可以发布您在运行案例时得到的结果吗?我不确定你的问题是什么
-
编辑以包含输出
-
我不知道匹配到底是如何发生的,但
s = process.extractOne(i, choices, scorer=fuzz.token_sort_ratio)有效 -
哇,效果很好。可能是因为我的匹配更多地依赖于排序而不是实际相似的单词/名称。包括您的回复作为答案,我会接受。谢谢!
标签: python fuzzywuzzy