如何选择模糊匹配算法?

时间:2019-05-16 08:27:19

标签: python algorithm fuzzy-comparison

我需要知道使3个算法之间的模糊算法彼此不同的标准:

Levenshtein距离算法

Levenshtein距离是一个字符串量度,用于测量两个序列之间的差异。非正式地,两个单词之间的Levenshtein距离是将一个单词转换为另一个单词所需的最小单字符编辑(即插入,删除或替换)次数。

Damerau–Levenshtein距离

Damerau–Levenshtein距离是两个字符串之间的距离(字符串度量),即符号的有限序列,通过计算将一个字符串转换为另一个字符串所需的最小操作数来给出作为单个字符的插入,删除或替换,或两个相邻字符的转置。

由Wu和Manber修改的Bitap算法

位图算法是一种近似的字符串匹配算法。该算法可以判断给定的文本是否包含与给定模式“近似相等”的子字符串,其中,根据Levenshtein距离定义近似相等-如果子字符串和模式彼此在给定距离k之内,则该算法认为它们相等。

我的文档是一张带有公司名称的表格,有些公司由于拼写错误而翻了两三遍。在这种情况下,如何通过匹配将公司分组?选择哪种算法,为什么选择?在文件中,我有10万行,并且还在增长。

2 个答案:

答案 0 :(得分:0)

如果要对公司进行分组,则可以使用对位置敏感的哈希或聚类方法(例如,以Levenshtein编辑距离为度量标准的K-medoids聚类)。或者,您可以使用SymSpell

Levenshtein-和Damerau–Levenshtein距离都是字符串相似度的良好指标,但请确保使用快速实现。 Github上有太多流行且疯狂的慢速实现。我所知道的最好的是PolyLeveneditdistance

答案 1 :(得分:0)

如果您使用的是Google表格,请尝试使用Flookup。您说您的列表有10万多行,因此根据Google(定时)的执行限制,这可能会遇到一些挑战,但我仍然鼓励您尝试一下。 其基本公式为:

FLOOKUP(lookupValue, tableArray, lookupCol, indexNum, threshold, rank)

完全公开:我是专门为Google表格创建Flookup的。