您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 计算两个字符串之间距离的算法

5b51 2022/1/14 8:22:02 python 字数 2545 阅读 530 来源 www.jb51.cc/python

是否有任何字符串距离算法没有考虑到单词的顺序?以下算法未提供所需结果(在该示例中,所需结果应为1):import jaro jaro.jaro_winkler_metric(u'Michael Jordan',u'Jordan Michael') >>>0.47 import Levenshtein Levenshtein.ratio('

概述

是否有任何字符串距离算法没有考虑到单词的顺序?

以下算法未提供所需结果(在该示例中,所需结果应为1):

import jaro
jaro.jaro_winkler_metric(u'Michael Jordan',u'Jordan Michael')
>>>0.47

import Levenshtein
Levenshtein.ratio('Michael Jordan','Jordan Michael')
>>>0.5

from difflib import SequenceMatcher
SequenceMatcher(None,'Michael Jordan','Jordan Michael').ratio()
>>>0.5

制作它的一种方法是按字母顺序排列字符串,然后使用上述算法:

''.join(sorted('Michael Jordan'))
>>>' JMaacdehilnor'

''.join(sorted('Jordan Michael'))
>>>' JMaacdehilnor'

但是这里姓名和姓氏的信息丢失了,不会有“稳定”的结果.

我使用itertools的排列创建了一个函数,它接受所有可能的单词编译并比较字符串并输出最大值.结果令人满意,但是当我必须比较数百万个名字时,整个程序真的很慢.

可以做的其他事情是对单词进行排序,例如:

' '.join(sorted('Michael Jordan'.split()))
>>>'Jordan Michael'
' '.join(sorted('Jordan Michael'.split()))
>>>'Jordan Michael'

似乎很好的方式和简单的方法来减少计算,但我们放松了一些敏感的情况.例:

name1 = ' '.join(sorted('Bizen Dim'.split()))
>>>'Bizen Dim'
name2 = ' '.join(sorted('Dim Mpizen'.split()))
>>>'Dim Mpizen'

SequenceMatcher(None,name1,name2).ratio()
>>>  0.55

这两个名字是相同的,有些人将’他们的名字’从’b’翻译成’mp'(我就是其中之一).用这种方式我们就失去了这个’匹配’.

是否有任何字符串距离算法比较单词而不考虑单词的顺序?或者是否有建议如何有效地实现所需的功能

安装:

pip install fuzzywuzzy
pip install python-Levenshtein

使用顺序无关紧要:

fuzz.token_sort_ratio(u'Michael Jordan',u'Jordan Michael')
>>100

总结

以上是编程之家为你收集整理的python – 计算两个字符串之间距离的算法全部内容,希望文章能够帮你解决python – 计算两个字符串之间距离的算法所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶