2017-02-21 15 views
1

Я пытаюсь использовать косинус расстояния класса apache commons. Но он всегда возвращает 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). leftVector и rightVector - это карты слов и подсчеты в последовательности символов, поэтому результат 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)); 

    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^