【发布时间】:2019-10-03 11:15:23
【问题描述】:
我需要知道使模糊算法在这 3 个之间彼此不同的标准:
Levenshtein 距离算法
Levenshtein distance 是一个字符串度量,用于测量两个序列之间的差异。通俗地说,两个单词之间的 Levenshtein 距离是将一个单词更改为另一个单词所需的最小单字符编辑(即插入、删除或替换)次数。
达默劳-列文斯坦距离
Damerau–Levenshtein 距离是两个字符串之间的距离(字符串度量),即符号的有限序列,通过计算将一个字符串转换为另一个字符串所需的最小操作数给出,其中定义了一个操作作为单个字符的插入、删除或替换,或两个相邻字符的转置。
由 Wu 和 Manber 修改的 Bitap 算法
位图算法是一种近似的字符串匹配算法。该算法判断给定文本是否包含与给定模式“近似相等”的子字符串,其中近似相等是根据 Levenshtein 距离定义的——如果子字符串和模式彼此在给定距离 k 内,则算法认为他们是平等的。
我的文档是一个公司名称的表格,有些公司因为拼写错误而出现了两次或三次。在这种特殊情况下,如何通过匹配来对公司进行分组?选择哪种算法,为什么?在文件中,我有 100k 行,而且还在增长。
【问题讨论】:
-
你好,你试过什么?也许最好从最复杂的算法开始,如果它不符合您的喜好,则降级。也许网上有人有同样的问题,你检查过吗?
-
@reportgunner 我会换一种方式,从不太复杂的开始并升级,如果它不起作用。此外,PHP 提供了 levenshtein 方法:php.net/manual/de/function.levenshtein.php
-
谢谢,为什么要使用 PHP ?我认为 Python 是最好的方法(对于海量数据、ML 和其他库......)
-
@TTeaTie:谷歌搜索 python levenshtein 提供了足够的结果,因此如果您比 PHP 更了解 Python,则可以使用 Python。
-
DL 通过交换相邻字母扩展 L。 Bitap 是一个近似 L。我倾向于使用 L 的 q-gram 过滤近似,因为它简单快速。
标签: python algorithm fuzzy-comparison