2017-02-21 21 views
1

私は、コサイン距離クラスのapacheコモンズを使用しようとしています。しかし、常に1.0を返します。私は見逃していますか?apache.commons.textコサイン距離

public class ComputeDistance { 
    public static void main(String[] args)throws Exception{ 

     CosineDistance dist = new CosineDistance(); 
     CharSequence c1 = "example text1"; 
     CharSequence c2 = "another file"; 
     System.out.println(dist.apply(c1,c2)); 
    } 
} 

答えて

0

CosineDistance戻り1 - cosineSimilarity(leftVector, rightVector):ここに私のコードです。 leftVectorrightVectorは、単語のマップとcharシーケンスの出現回数であるため、結果はcosineSimilarity(leftVector, rightVector) = 0です。単語の代わりにあなたの文字列を使用するようにコードを変更することができます:

public class ComputeDistance { 
    public static void main(String[] args) throws Exception { 

    CosineSimilarity dist = new CosineSimilarity(); 

    String c1 = "example text1"; 
    String c2 = "another file"; 

    Map<CharSequence, Integer> leftVector = 
     Arrays.stream(c1.split("")) 
     .collect(Collectors.toMap(c -> c, c -> 1, Integer::sum)); 
    Map<CharSequence, Integer> rightVector = 
     Arrays.stream(c2.split("")) 
     .collect(Collectors.toMap(c -> c, c -> 1, Integer::sum)); 

    System.out.println(1 - dist.cosineSimilarity(leftVector,rightVector)); 

    } 
}