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, Kolkata と 1/3, City Mall, Jessore Road, Near Dak Banglow More, Barasat, Kolkata - 700124 の類似性 は 0.6488 となりますが、まったく同じではありません。 .
だから私は誰かが同じことをするためのより良いアプローチを提案できるかどうか尋ねています. ありがとうございました。