1

2つの住所の類似性を見つけるために、次のコードを作成しました

    double similarAddr(String resAddr,String newAddr)
    {
       String sortedResAddr=asort(resAddr); //asort alphabetically sorts the sentence passed as its parameter
       String sortedNewAddr=asort(newAddr);
       String[] addrToks=sortedResAddr.split("[ ]+");
       String[] newToks=sortedNewAddr.split("[ ]+");
       int l1=addrToks.length;
       int l2=newToks.length;
       double similarity=0.0;
       int lengths,lengthl; //lengths is length of shorter string while lengthl is that of longer string
       if(l1<l2)
       {
         lengths=l1;
         lengthl=l2;
         for(int i=0;i<l1;i++)
           {
            double max=0.0;
            for(int j=i;j<l2;j++)
               {

                 double curr_similarity=findSimilarity(addrToks[i],newToks[j]); //findSimilarity calculates similarity between two string based on their edit distance, it first calculates the edit distance and normalize by dividing it by the longer string length and subtracts it from 1
                 if(max<curr_similarity)
                      max=curr_similarity;
                }
               similarity+=max;
            }

        }
       else
        {
           lengths=l2;
           lengthl=l1;
           for(int i=0;i<l2;i++)
             {
                 double max=0.0;
                 for(int j=i;j<l1;j++)
                    {

                      double curr_similarity=findSimilarity(newToks[i],addrToks[j]);
                      if(max<curr_similarity)
                         max=curr_similarity;
                     }
                  similarity+=max;
              }
         }
    similarity/=lengths;
    return similarity;
}

しかし、このアプローチでは、多くの誤検知を見つけています。ここでは、しきい値を 0.5 としています。つまり、類似度スコアが 0.5 を超えている場合、類似している可能性があります。しかし、多くの異なる住所の類似性スコアは約 0.7 程度であり、類似性スコアが約 0.6 程度に近い多くの本当に類似したペアを見逃す可能性があるため、しきい値を増やすだけでは問題は解決しません。

たとえば、次の 2 つの住所 9/18, Ekdalia Road, Gariahat, Kolkata1/3, City Mall, Jessore Road, Near Dak Banglow More, Barasat, Kolkata - 700124 の類似性 は 0.6488 となりますが、まったく同じではありません。 .

だから私は誰かが同じことをするためのより良いアプローチを提案できるかどうか尋ねています. ありがとうございました。

4

2 に答える 2

2

アドレスのコンポーネントの重要性が異なるため、アドレスのトークン比較ではあまり良い結果が得られません。たとえば、都市名も一致しない限り、通りの名前の類似性はあまり重要ではありません。

住所の比較を適切に行うには、住所の階層的な性質 (通り、都市、州、国など) を解析し、住所を階層的に比較する必要があります。

この努力に行きたくない場合は、「ストップワード」を排除することで結果を改善できます. たとえば、"street" や "road" などの単語は頻繁に使用されますが、適切な識別語ではありません。住所が実際よりも似ているように見えてしまいます。

于 2013-02-20T18:38:25.400 に答える