栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

何时使用哪个模糊函数比较2个字符串

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

何时使用哪个模糊函数比较2个字符串

好问题。

我是SeatGeek的工程师,所以我想可以为您提供帮助。我们有一篇很棒的博客文章,很好地解释了这些差异,但是我可以总结一下,并提供一些有关如何使用不同类型的见解。

总览

在幕后,这四种方法中的每一种都计算两个输入字符串中标记的某些顺序之间的编辑距离。这是使用进行

difflib.ratio
功能这将:

返回序列相似度的度量(浮点数为[0,1])。

其中T是两个序列中元素的总数,M是匹配数,这是2.0 * M /T。请注意,如果序列相同,则为1;如果没有相同之处,则为0。

四种Fuzzywuzzy方法调用

difflib.ratio
输入字符串的不同组合。

模糊比

简单。只需调用

difflib.ratio
两个输入字符串(pre)。

fuzz.ratio("NEW YORK METS", "NEW YORK MEATS")> 96

fuzz.partial_ratio

尝试解决部分字符串匹配会更好。

ratio
使用最短的字符串(长度为n)对较大的字符串的所有n个长度的子字符串进行调用,并返回最高分数(pre)。

请注意,“ YANKEES”是最短的字符串(长度为7),我们对“ NEW YORK YANKEES”的所有长度为7的子字符串(包括检查“
YANKEES”(100%匹配))使用比率“ YANKEES” ):

fuzz.ratio("YANKEES", "NEW YORK YANKEES")> 60fuzz.partial_ratio("YANKEES", "NEW YORK YANKEES")> 100

fuzz.token_sort_ratio

试图说明乱序的相似字符串。

ratio
在对每个字符串中的标记进行排序之后,调用这两个字符串(pre)。请注意
fuzz.ratio
fuzz.partial_ratio
它们都失败了,但是对令牌进行排序后,匹配率是100%:

fuzz.ratio("New York Mets vs Atlanta Braves", "Atlanta Braves vs New York Mets")> 45fuzz.partial_ratio("New York Mets vs Atlanta Braves", "Atlanta Braves vs New York Mets")> 45fuzz.token_sort_ratio("New York Mets vs Atlanta Braves", "Atlanta Braves vs New York Mets")> 100

fuzz.token_set_ratio

尝试排除字符串中的差异。在三个特定的子字符串集上调用ratio并返回max(pre):

  1. 仅交集和与字符串一的余数的交集
  2. 仅交集和与字符串二的余数的交集
  3. 与一个的余数相交和与两个的余数相交

请注意,通过拆分两个字符串的交集和余数,我们考虑了两个字符串的相似性和差异性:

fuzz.ratio("mariners vs angels", "los angeles angels of anaheim at seattle mariners")> 36fuzz.partial_ratio("mariners vs angels", "los angeles angels of anaheim at seattle mariners")> 61fuzz.token_sort_ratio("mariners vs angels", "los angeles angels of anaheim at seattle mariners")> 51fuzz.token_set_ratio("mariners vs angels", "los angeles angels of anaheim at seattle mariners")> 91

应用

这就是魔术发生的地方。在SeatGeek中,本质上,我们为每个数据点(地点,事件名称等)的每个比率创建一个矢量评分,并使用该评分向程序决策提供特定于我们问题领域的相似性决策。

话虽如此,但事实并非如此,对于您的用例而言,它听起来并不像FuzzyWuzzy有用。确定两个地址是否相似将非常不利。考虑SeatGeek总部的两个可能地址:“
235 Park Ave S. Floor 12”和“ 235 Park Ave S. Floor 12”:

fuzz.ratio("235 Park Ave Floor 12", "235 Park Ave S. Floor 12")> 93fuzz.partial_ratio("235 Park Ave Floor 12", "235 Park Ave S. Floor 12")> 85fuzz.token_sort_ratio("235 Park Ave Floor 12", "235 Park Ave S. Floor 12")> 95fuzz.token_set_ratio("235 Park Ave Floor 12", "235 Park Ave S. Floor 12")> 100

FuzzyWuzzy为这些字符串提供了较高的匹配分数,但是一个地址是我们在联合广场附近的实际办公室,另一个地址是大中央车站的另一侧。

对于您的问题,最好使用Google GeocodingAPI。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/640996.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号