如何解决FuzzyWuzzy python,将两个相同的短语匹配到不同的脚本中带来不同的结果
所以问题是。我写了一个脚本,使用fuzzywuzzy 比较dataPrame 中的值
def check_match_principal_name(state):
for i in range(len(ALL_SCHOOLS['Principal Name'])):
for a in range(len(TOP100['Principal'])):
matchADD = fuzz.token_sort_ratio(ALL_SCHOOLS['Principal Name'][i],TOP100['Principal'][a])
if matchADD > 90:
print(ALL_SCHOOLS['Principal Name'][i]+' '+TOP100['Principal'][a])
matchPRI.append(i)
matchPRI100.append(a)
print(ALL_SCHOOLS['Principal Name'][i])
print(TOP100['Principal'][a])
for i in matchPRI:
ALL_SCHOOLS.loc[i,'MatchPRI'] = 1
for i in matchPRI100:
TOP100.loc[i,'MatchPRI'] = 1
ALL_SCHOOLS.to_excel(f'/Users/Giova/PycharmProjects/Schools/Final_final/{state}1.xlsx')
TOP100.to_excel(f'/Users/Giova/PycharmProjects/Schools/Final_final/top-100/{state}1.xlsx')
matchPRI.clear()
matchPRI100.clear()
它有效,我没有任何例外等等,但例如在上层脚本 fuzz.token_sort_ratio(ALL_SCHOOLS['Principal Name'][i],TOP100['Principal'][a])
返回 Kimberly Beukema - Ms. Kimberly Beukema = 91
在第二个脚本中是这样的:
from fuzzywuzzy import fuzz
match= fuzz.partial_token_sort_ratio('Kimberly Beukema',' Ms. Kimberly Beukema')
print(match)
它返回匹配 = 100
我不明白为什么值会改变?
解决方法
默认情况下,{% for friend in user_p.friends.all %}
{% for post in fried.user.post_set.all %}
{{ post }}
{% endfor %}
{% endfor %}
和 token_sort_ratio
都会预处理这两个字符串。这意味着它将字符串小写,删除非字母数字字符并修剪空格。所以在你的情况下它会转换:
partial_token_sort_ratio
到
'Kimberly Beukema'
' Ms. Kimberly Beukema'
在下一步中,他们都对两个字符串中的单词进行排序:
'kimberly beukema'
'ms kimberly beukema'
然后他们比较两个字符串。对于此比较,'beukema kimberly'
'beukema kimberly ms'
使用 token_sort_ratio
,而 ratio
使用 partial_token_sort_ratio
。
在 partial_ratio
中,需要删除 3 次才能将“beukema kimberly ms”转换为“beukema kimberly”。由于字符串的组合长度为 35,因此生成的比率为 ratio
。
在round(100 * (1 - 3 / 35)) = 91
中计算两个字符串的最佳对齐的partial_ratio
。在您的情况下,“beukema kimberly”是“beukema kimberly ms”的子字符串,因此计算“beukema kimberly”和“beukema kimberly”之间的 ratio
为 ratio
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。