我知道这个问题已经问了很多的时间。 我想一个建议在其算法适用于近似串匹配。

的应用程序是专门为唯一的公司名称匹配而已。

最大的挑战可能是公司端名称的一部分,并短暂命名部分 例: 1.公司A PTY LTD VS公司A PTY。 LTD。 VS公司A 2. WES工程VS W.E.S.工程(极其罕见的次数)

你认为莱文斯坦编辑距离是否足够?

我使用C#

此致 最大

有帮助吗?

解决方案

有您可以使用各种字符串距离度量。

我建议哈罗-温克勒。不像编辑距离,其中一个比较的结果是编辑的离散单位,JW给你一个0-1得分。它特别适合用于专名。另外,也要看看这个漂亮的教程和的将此SO问题。

我还没有和C#的工作,但这里是我JW的一些实现网上找到:

默认地将Impl 1 (它们具有DOT NET版本太多,如果你看一下文件列表)

默认地将Impl 2


如果你想要做一些更复杂的匹配,你可以尝试做的单词形式的一些自定义正常化公司名称经常出现的诸如ltd/limited, inc/incorporated, corp/corporation到账户不区分大小写,缩写等,这样,如果你计算

  

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

你应该得到的结果为0,而不是14(这是如果你计算的Levenshtein编辑距离,你会得到什么)。

其他提示

是,Levenshtein距离是适合的。它会为你至少列出的所有这些工作。

您也可能使用探测法,但我不认为你需要它

在这些简单的实例中,只是去除所有非字母数字字符给你一个匹配,并且是最简单的做你可以预先计算每一侧上的数据,然后做一个直等于匹配,这将是一个很多比交乘法并计算编辑距离更快。

我提供我的答案已经在另外一个问题。

https://stackoverflow.com/a/30120166/2282794

我真的大规模系统的工作类似名称的匹配要求,你已经谈到。 名称匹配是不是很简单,姓和名的顺序可能会有所不同。 简单模糊名称匹配算法在这样的场景中悲惨地失败。

如果我们只想说说近似字符串匹配算法,然后还有很多。他们很少有:哈罗,温克勒,编辑距离(莱文斯坦),Jaccard相似,探测法/语音基于算法等简单的谷歌搜索会给我们所有的细节。 您可以实现在C#中所有的人

反讽是,当你尝试匹配两个给定的输入字符串他们的工作。好的理论和证明方式模糊或近似串匹配的作品。

然而,严重低估了的一点是,我们如何使用相同的生产设置。不是每个人,我知道谁是侦察近似字符串匹配算法知道他们如何能解决同样的生产环境。

我可能刚才谈到的Lucene是特定于Java,但有Lucene的为.NET也。

https://lucenenet.apache.org/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top