【问题标题】:apache.commons.text cosine distanceapache.commons.text 余弦距离
【发布时间】:2017-07-10 18:21:23
【问题描述】:
我正在尝试使用 apache commons 的余弦距离类。但它总是返回 1.0。我错过了什么吗?这是我的代码:
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));
}
}
【问题讨论】:
标签:
java
apache-commons
cosine-similarity
【解决方案1】:
CosineDistance 返回1 - cosineSimilarity(leftVector, rightVector)。 leftVector 和 rightVector 是单词的映射和 char 序列中的出现次数,所以是 cosineSimilarity(leftVector, rightVector) = 0 的结果。您可以更改代码以使用您的 char 序列的字符而不是单词:
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));
}
}