2013-04-28 102 views
2

我有一个关于Lucene/Solr的问题。Lucene/Solr近似(公司)名称匹配

我想解决一般(公司)名称匹配问题。

让我介绍一个过于简单的例子:

我们的名字即,list_A和list_B两个(可能大)名单。 我们希望找到两个列表的交集,但两个列表中的名称可能并不总是完全匹配。对于list_A中的每个不同名称,我们都希望报告list_B中的一个或多个最佳匹配。

我听说Lucene/Solr可以解决这个问题。你能告诉我这是真的吗?如果是这样,请给我一些最小的工作示例。

感谢和问候, Dibyendu

+0

Arun/femtoRgon,我已经考虑了基于编辑距离的方法。我想尝试Lucene/Solr以期改善结果。根据你的经验,请让我知道改善的机会。 – 2013-04-29 20:11:38

+0

你正在吠叫错误的树。如果您对编辑距离比较不满意,请尝试使用其他算法。想想你想要完成的比较。我不知道你需要什么,但是因为你匹配的名字,我怀疑像Metaphone(它是基于语音相似性,而不是编辑距离)的东西可能更适合。 – femtoRgon 2013-04-29 20:22:56

回答

0

SOLR能够解决您的问题。索引SOLR中的list_B。现在在SOLR中搜索list_A中的每个项目,您将从list_B获得一个或多个可能的匹配项。 您需要根据您的数据集以及您想要的类似结果配置字段的分析器和过滤器。

+0

非常感谢Arun。请看我上面的评论。 – 2013-04-29 20:08:52

1

你可以用Lucene来解决这个问题,是的,但是如果你只是需要解决这个问题,那么创建一个Lucene索引会有点迂回。

我更倾向于采取更简单的方法。您可以找到一个用于字符串之间模糊比较的库,并遍历您的列表并仅返回在匹配阈值相似的相似阈值下的列表。

org.apache.commons.lang3.StringUtils想到的,是这样的:

for (String a : alist) { 
    for (String b : blist) { 
     int dist = StringUtils.getLevenshteinDistance(a,b) 
     if (dist < threshold) { 
      //b is a good enough match for a, do something with it! 
     } 
    } 
} 

根据您的意图,其他的算法可能更合适(SoundexMetaphone,例如)

+0

非常感谢femtoRgon。请看我上面的评论。 – 2013-04-29 20:09:14

0

我试图做同样的事情,我想向其他评论者指出,如果问题与准确的名称相匹配,而不是拼写错误的名称,他们提出的解决方案(如Levenshtein Distance或Soundex)可能并不合适。

例如:我怀疑任何一个多大用处匹配

John S W Edward 

J Samuel Woodhouse Edward 

我想这是可能的,但是这是一个不同类的问题比他们的目的是什么去完成。