私のアプリケーションには、ユーザーがさまざまなソーシャルネットワークに接続して友達のリストを取得できる機能があります。たとえば、LinkedInやFacebookから友達を取得できます。
さまざまなソーシャルネットワークからのさまざまなリストを組み合わせた結果である友人の単一のリストを提示したいと思います。問題は、異なるリストの名前がおそらく同じ人物であるかどうかをどのように判断するかです。たとえば、Facebookは「JimSmith」と言い、LinkedInは「JimSmith、Phd」と言うかもしれませんが、私のアプリで彼らが同じ人物であることを検出したいと思います。
文字列のレーベンシュタイン距離関数を見てきましたが、75%の信頼度で、2つの名前がおそらく同じであると見なす前に、しきい値を設定する方法もわかりません。
これが私がやろうと思っていることです:
- すべての比較を小文字で行います
- レーベンシュタイン距離を計算する前に、比較されている2つの名前からすべての空白を削除します
- levenshtienの距離を短い名前の長さのパーセンテージに変換します
- パーセンテージが0の場合、完全に一致します
- パーセンテージがx未満の場合、おそらく同じです
Leventstienの計算にapachecommonsStringUtils.getLevenshteinDistance()を使用することを計画しています。
xの適切な値は何ですか?10%、20%、30%...など?これは良いアルゴリズムですか?私の数学のスキルはかなり錆びており、これが機能するかどうかはわかりません。
より良いアプローチはありますか?このようなものに使用する必要のある標準ライブラリはありますか?