2

2つの列を持つ大規模なデータベースを扱っています。最初の列idlongしばらく、2番目の列nameStringです。name対応するIDを持つ人の名前です。nameそこで、行のを他の行と比較したいと思いnameます。

John Carter
john Carter
Carter
jo car
Willam Carter
C William
Carter j.

行内のこれらすべてnameが一致する必要があります。可能であれば、一致のパーセンテージ/比率があると便利です。これを実行できるJavaライブラリ/スニペットはありますか?私はすべての提案を受け入れます。

4

3 に答える 3

4

文字列の距離を計算するためのレーベンシュタインアルゴリズムに興味があるようです。Javaの実装はここにあります

于 2012-06-10T17:57:18.363 に答える
4

このライブラリはあなたにとって興味深いかもしれません:http ://sourceforge.net/projects/simmetrics/

これは、文字列にさまざまな類似度を提供します。

彼らのSourceForgeページから:

SimMetricsは、類似性メトリックライブラリです。たとえば、編集距離(Levenshtein、Gotoh、Jaroなど)から他のメトリック(Soundex、Chapmanなど)までです。

于 2012-06-10T18:02:09.273 に答える
0

William W. Cohenetal 。の論文「AComparisonofString Distance MetricsforName-MatchingTasks」をご覧ください。このホワイトペーパーでは、いくつかの文字列距離メトリックを比較しています。

また、それらのほとんどをSecondStringプロジェクト内に実装しました。これは「近似文字列マッチング手法のオープンソースJavaベースのパッケージ」であるため、さまざまなメトリックを簡単に比較して、要件に適合するものを評価できます。

名前を一致させる必要がある場合は、 Jaro-Winklerが適しています。これは、SecondStringパッケージ内にも実装されています。

データベースにすべての名前がある場合は、Javaを使用してそれらを比較するためにすべてのデータをフェッチすることを避けるために、ストアード・プロシージャーとして類似性測定を実装することが理にかなっている場合があります。したがって、次のようなクエリを使用できます。

SELECT t1.name, t2.name, sim(t1.name, t2.name) FROM table t1, table t2 WHERE sim(t1.name, t2.name) > 0.8
于 2012-06-11T13:44:13.167 に答える