2

Lucene/Solr について質問があります。

一般的な(会社)名前の一致の問題を解決しようとしています。

単純化しすぎた例を 1 つ紹介します。

list_A と list_B という名前の 2 つの (おそらく大きい) リストがあります。2 つのリストの交点を見つけたいのですが、2 つのリストの名前が常に正確に一致するとは限りません。list_A の個別の名前ごとに、list_B から 1 つまたは複数の最適な一致を報告する必要があります。

Lucene/Solr がこの問題を解決できると聞いています。これが本当かどうか教えてもらえますか? もしそうなら、いくつかの最小限の実例を教えてください。

よろしくお願いします。

4

3 に答える 3

1

はい、これは Lucene で解決できますが、この 1 つの問題だけを解決する必要がある場合、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!
        }
    }
}

意図によっては、他のアルゴリズムがより適切な場合があります (たとえば、SoundexまたはMetaphone )。

于 2013-04-29T16:28:55.453 に答える
0

SOLRはあなたの問題を解決できます。SOLR で list_B にインデックスを付けます。ここで、SOLR で list_A のすべての項目を検索すると、list_B から一致する可能性が 1 つ以上得られます。データセットと必要な類似の結果に応じて、フィールドのアナライザーとフィルターを構成する必要があります。

于 2013-04-28T15:05:48.263 に答える