Java代码——计算两个HashMap的余弦相似度

1.一种效率较高的HashMap遍历方法:

 Map map = new HashMap();
  Iterator iter = map.entrySet().iterator();
  while (iter.hasNext()) {
     Map.Entry entry = (Map.Entry) iter.next();
     Object key = entry.getKey();
     Object val = entry.getValue();
  }

2.余弦相似度计算:


3.使用HashMap来存储两个向量,并计算其余弦相似度:

public class Similarity {
    public static float computeSim(HashMap<String,Float> map1,HashMap<String,Float> map2){
        float result = 0;
        Iterator iter1 = map1.entrySet().iterator();
        Iterator iter2 = map2.entrySet().iterator();
        Float sum1 = (float)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Java代码计算余弦相似度的示例: import java.util.HashMap; import java.util.Map; public class CosineSimilarity { public static void main(String[] args) { String text1 = "This is a sample text."; String text2 = "This is another sample text."; double similarity = calculateCosineSimilarity(text1, text2); System.out.println("The cosine similarity between the two texts is: " + similarity); } public static double calculateCosineSimilarity(String text1, String text2) { Map<String, Integer> wordFrequency1 = getWordFrequency(text1); Map<String, Integer> wordFrequency2 = getWordFrequency(text2); double dotProduct = calculateDotProduct(wordFrequency1, wordFrequency2); double magnitude1 = calculateMagnitude(wordFrequency1); double magnitude2 = calculateMagnitude(wordFrequency2); return dotProduct / (magnitude1 * magnitude2); } private static Map<String, Integer> getWordFrequency(String text) { Map<String, Integer> wordFrequency = new HashMap<>(); String[] words = text.split("\\s+"); for (String word : words) { word = word.toLowerCase(); if (wordFrequency.containsKey(word)) { wordFrequency.put(word, wordFrequency.get(word) + 1); } else { wordFrequency.put(word, 1); } } return wordFrequency; } private static double calculateDotProduct(Map<String, Integer> wordFrequency1, Map<String, Integer> wordFrequency2) { double dotProduct = 0; for (String word : wordFrequency1.keySet()) { if (wordFrequency2.containsKey(word)) { dotProduct += wordFrequency1.get(word) * wordFrequency2.get(word); } } return dotProduct; } private static double calculateMagnitude(Map<String, Integer> wordFrequency) { double magnitude = 0; for (int frequency : wordFrequency.values()) { magnitude += Math.pow(frequency, 2); } return Math.sqrt(magnitude); } } 在上面的代码中,我们首先定义了两个文本字符串。然后,我们使用calculateCosineSimilarity方法计算两个字符串之间的余弦相似度。该方法接受两个字符串作为参数,并返回它们之间的余弦相似度。 在calculateCosineSimilarity方法中,我们首先使用getWordFrequency方法获取每个文本字符串中每个单词的出现次数。然后,我们使用calculateDotProduct方法计算两个文本字符串中所有共同出现的单词的乘积之和。接下来,我们使用calculateMagnitude方法计算每个文本字符串的向量大小。最后,我们将这些值带入余弦相似度公式中,并返回相似度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值