2017-02-21 6 views
1

아파치 공유지의 코사인 거리 클래스를 사용하려고합니다. 하지만 항상 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은 단어 시퀀스와 문자 시퀀스의 발생 횟수이므로 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)); 

    } 
}