近似字符串匹配

Max*_*Max 9 c# string matching approximate

我知道这个问题已被问了很多时间.我想要一个关于哪种算法适合近似字符串匹配的建议.

该应用程序专门用于公司名称匹配,而不是其他任何内容.

最大的挑战可能是公司的最终名称部分和简短的命名部分示例:1.companyA pty ltd vs companyA pty.LTD.vs companyA 2. WES工程与WES工程(极为罕见)

你认为Levenshtein编辑距离是否足够?

我正在使用C#

此致,Max

has*_*ble 14

您可以使用各种字符串距离指标.

我会推荐Jaro-Winkler.与编辑距离不同,其中比较结果是以离散的编辑单位,JW为您提供0-1的分数.它特别适合专有名称.另外看看这个漂亮的教程这个问题.

我没有使用过C#,但是我在网上发现了JW的一些实现:

Impl 1 (如果查看文件列表,它们也有DOT NET版本)

Impl 2


如果您想进行更复杂的匹配,可以尝试对公司名称中常见的单词形式进行一些自定义规范化,例如ltd/limited, inc/incorporated, corp/corporation考虑不区分大小写,缩写等.如果您计算这种方式

distance (normalize("foo corp."), normalize("FOO CORPORATION") )

你应该得到的结果是0而不是14(如果你计算levenshtein编辑距离,这将是你得到的).