java余弦相似度算法_余弦相似度 算法

该博客展示了如何使用Java编程实现余弦相似度算法,包括处理字符串中的空格、将字符串转换为整数列表、计算两个列表的点乘、平方和及余弦相似度。代码包括了两个版本,一个用于整数列表,另一个用于浮点数列表。
摘要由CSDN通过智能技术生成

import java.util.ArrayList;

import java.util.List;

public class ComputerDecision {

//List> vector1 ;

//List> vector2 ;

List vector1 = new ArrayList();

List vector2 = new ArrayList();

static List vector3 = new ArrayList();

static List vector4 = new ArrayList();

public ComputerDecision(String string1, String string2) {

//把输入字符串中多个空格变为一个

String[] vector1String = string1.trim().replaceAll("\\s+", " ").split(" ");

String[] vector2String = string2.trim().replaceAll("\\s+", " ").split(" ");

for (String string : vector1String) {

vector1.add(Integer.parseInt(string));

}

for (String string : vector2String) {

vector2.add(Integer.parseInt(string));

}

}

public static void ComputerDecisiond1(String string1, String string2) {

//把输入字符串中多个空格变为一个

String[] vector1String = string1.trim().replaceAll("\\s+", " ").split(" ");

String[] vector2String = string2.trim().replaceAll("\\s+", " ").split(" ");

for (String string : vector1String) {

vector3.add(Double.valueOf(string));

}

for (String string : vector2String) {

vector4.add(Double.valueOf(string));

}

}

// 求余弦相似度

public double sim() {

double result = 0;

result = pointMulti(vector1

余弦相似度算法是一种常用的衡量两个向量之间相似度的方法,它可以用于文本相似度计算、推荐系统等领域。在Java中,可以通过以下步骤来实现余弦相似度算法: 1. 首先,需要将文本转换为向量表示。可以使用词袋模型或者TF-IDF等方法将文本转换为向量。 2. 计算两个向量的内积。内积可以通过遍历两个向量的对应维度,将对应维度的值相乘后累加得到。 3. 计算两个向量的模长。模长可以通过遍历向量的每个维度,将对应维度的值平方后累加得到,再对结果进行开方。 4. 计算余弦相似度。将步骤2中计算得到的内积除以步骤3中计算得到的模长乘积即可得到余弦相似度。 下面是一个简单的Java代码示例: ```java import java.util.HashMap; import java.util.Map; public class CosineSimilarity { public static double calculateCosineSimilarity(Map<String, Integer> vector1, Map<String, Integer> vector2) { double dotProduct = 0.0; double magnitude1 = 0.0; double magnitude2 = 0.0; for (String key : vector1.keySet()) { if (vector2.containsKey(key)) { dotProduct += vector1.get(key) * vector2.get(key); } magnitude1 += Math.pow(vector1.get(key), 2); } for (String key : vector2.keySet()) { magnitude2 += Math.pow(vector2.get(key), 2); } magnitude1 = Math.sqrt(magnitude1); magnitude2 = Math.sqrt(magnitude2); return dotProduct / (magnitude1 * magnitude2); } public static void main(String[] args) { // 示例向量 Map<String, Integer> vector1 = new HashMap<>(); vector1.put("apple", 2); vector1.put("banana", 3); vector1.put("orange", 1); Map<String, Integer> vector2 = new HashMap<>(); vector2.put("apple", 1); vector2.put("banana", 2); vector2.put("grape", 4); double similarity = calculateCosineSimilarity(vector1, vector2); System.out.println("余弦相似度:" + similarity); } } ``` 这段代码中,我们定义了一个`calculateCosineSimilarity`方法来计算余弦相似度。通过传入两个向量的词频统计结果,即`Map<String, Integer>`类型的`vector1`和`vector2`,可以得到它们之间的余弦相似度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值