xinhua0910 2023-04-11 09:23 采纳率: 0%
浏览 17

python如何计算中文字符串包含率/相似度

请教个问题,想算两个字符串相似度,主要用于简称和全称的匹配。
但我用下面几种方法算出来的都是 str3的相似度更高。
有没有哪个方法可以得出2的相似度更高?类似拿源串中的每个中文字到另外一个串中查看包含率,下面代码中str2包含所有str1的内容,str3包含率低一些。
目前想到的可以用jieba来分词,但不确定其分词准确性,看大家有没有更好的方案

import difflib as diff
from fuzzywuzzy import fuzz

str1='邮储银行北京分行'
str2='中国邮政储蓄银行股份有限公司北京分行'
str3='中国工商银行北京分行'

print(diff.SequenceMatcher(None, str1, str2).ratio())
print(diff.SequenceMatcher(None, str1, str3).ratio())
print(diff.SequenceMatcher(None, str1, str2).quick_ratio())
print(diff.SequenceMatcher(None, str1, str3).quick_ratio())

print(fuzz.ratio(str1,str2))
print(fuzz.ratio(str1,str3))
print(fuzz.partial_ratio(str1,str2))
print(fuzz.partial_ratio(str1,str3))
print(fuzz.token_sort_ratio(str1,str2))
print(fuzz.token_sort_ratio(str1,str3))
  • 写回答

6条回答 默认 最新

  • threenewbee 2023-04-11 09:31
    关注

    应该用最短编辑距离算,而不是序列匹配
    序列匹配,如果第二个字符串删除了一个字符,错位了,那么相似度就很低,和实际不符。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月11日