8

私は企業のデータベースを持っています。私のアプリケーションは会社を名前で参照するデータを受け取りますが、名前がデータベースの値と正確に一致しない場合があります。受信データを、それが参照する会社と照合する必要があります。

たとえば、データベースに「AB Widgets & Co Ltd」という名前の会社が含まれているとします。受信データが「AB Widgets Limited」、「AB Widgets and Co」、または「AB Widgets」を参照している可能性があります。

会社名の一部の単語 (AB Widgets) は、他の単語 (Co, Ltd, Inc など) よりもマッチングにとって重要です。誤った一致を避けることが重要です。

会社の数は十分に少ないので、名前のマップをメモリに保持できます。適切な名前を見つけるために、SQL ではなく Java を使用するオプションがあります。

Javaでこれをどのように行いますか?

4

8 に答える 8

3

このスレッドは少し古いものですが、最近、名前の照合における文字列距離メトリックの効率について調査したところ、次のライブラリに出会いました。

https://code.google.com/p/java-similarities/

文字列距離アルゴリズムの実装に何年も費やしたくない場合は、最初のステップとして試してみることをお勧めします。すでに実装されている約 20 の異なるアルゴリズムがあります (Levenshtein、Jaro-Winkler、Monge-Elkan アルゴリズムなどを含む)。 ) であり、そのコードは十分に構造化されているため、ロジック全体を深く理解する必要はありませんが、数分で使い始めることができます。

(ちなみに、私はライブラリの作成者ではないので、その作成者には敬意を表します。)

于 2015-03-02T13:54:31.003 に答える
3

DB/マップと入力でフォーマットを可能な限り標準化し (つまり、大文字/小文字に変換)、動的プログラミングのレーベンシュタイン (編集) 距離メトリックを使用して、すべての既知の名前に対して入力をスコアリングできます。

次に、ユーザーに一致を確認してもらい、気に入らない場合は、その値を既知の名前のリストに入力するオプションを提供します(考え直して、ユーザーに与えるには力が強すぎるかもしれません.. .)

于 2008-11-27T01:40:43.093 に答える
2

LCSアルゴリズムを使用してスコアを付けることができます。

写真を電子メールで簡単に送信し、適切にセキュリティ カテゴリに分類できるようにするために、写真アルバムでこれを行います。

于 2008-11-27T01:35:26.320 に答える
2

「co」、「llc」、「ltd」などのスペース、句読点、大文字と小文字、およびバリエーションを無視して、LCS を実行します。

于 2008-11-27T02:02:52.800 に答える
1

ルセンを見てください。これは、「ほぼ一致」機能を備えたオープン ソースの全文検索 Java ライブラリです。

于 2008-11-27T01:36:42.243 に答える
0

賛成票 1 票反対

LCS アルゴリズムを使用してスコアを付けることができます。

写真を電子メールで簡単に送信し、適切にセキュリティ カテゴリに分類できるようにするために、写真アルバムでこれを行います。

* LCS code
* Example usage (guessing a category based on what people entered)

より正確に言えば、Least Common Subsequence よりも優れています。Least Common Substring は、文字の順序が重要であるため、より正確である必要があります。

于 2010-04-19T20:56:29.387 に答える
0

お使いのデータベースが正規表現 (regex) の使用をサポートしている場合があります。Java のチュートリアルについては、以下を参照してください。MySQL ドキュメントへのリンクは次のとおりです (例として):

http://dev.mysql.com/doc/refman/5.0/ ja/regexp.html#operator_regexp

予想されるスペルのバリエーション、または重要であると重み付けしたい会社名のサブ要素を含む、かなり複雑な正規表現ステートメントをデータベースに保存することをお勧めします。

Java で正規表現ライブラリを使用することもできます

JDK 1.4.2
http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html

JDK 1.5.0
http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Matcher.html

Java での正規表現の使用
http://www.regular-expressions.info/java.html

Java Regex API の説明
http://www.sitepoint.com/article/java-regex-api-explained/

また、データベースが Soundex 機能をサポートしているかどうかを確認することもできます (たとえば、MySQL への次のリンクを参照してください)
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_soundex

于 2008-11-27T01:32:13.737 に答える
0

Lucene を使用してデータベースにインデックスを付けてから、Lucene インデックスにクエリを実行できます。Solr など、Lucene をベースに構築された検索エンジンは多数あります。

于 2008-11-27T01:35:53.913 に答える