文档章节

余弦相似度计算

Harry_sir
 Harry_sir
发布于 2017/06/29 17:04
字数 252
阅读 22
收藏 0

// 数据结构解析:<单词,二维数组>,其中单词表示公共词, // 二维数组一维度表示句子一的向量,另一维度表示句子二的向量 public class CosSimTextSim { Map<String, float[]> vectorMap = new HashMap<String, float[]>(); float[] tempArray = null;

public CosSimTextSim(String string1, String string2) {
	String stri2 = null;
	float stri1 = 0.00f;
	for (String str2 : string2.split(" ")) {
		if (vectorMap.containsKey(str2)) {
			vectorMap.get(str2)[1]++;
		} else {
			tempArray = new float[2];
			tempArray[0] = 1;
			tempArray[1] = 0;
			vectorMap.put(str2, tempArray);
		}
	}
	for (String str2 : string2.split(" ")) {
		if (vectorMap.containsKey(str2)) {
			vectorMap.get(str2)[1]++;
		} else {
			tempArray = new float[2];
			tempArray[0] = 0;
			tempArray[1] = 1;
			vectorMap.put(str2, tempArray);
		}
	}

	for (Entry<String, float[]> entry : vectorMap.entrySet()) {
	}
}

// 求余弦相似度
public double sim() {
	double result = 0;
	result = pointMulti(vectorMap) / sqrtMulti(vectorMap);
	return result;
}

private double sqrtMulti(Map<String, float[]> vectorMap2) {
	double result = 0;
	result = squares(vectorMap2);
	result = Math.sqrt(result);
	return result;
}

// 求平方和
private double squares(Map<String, float[]> vectorMap2) {
	double result1 = 0;
	double result2 = 0;
	Set<String> keySet = vectorMap2.keySet();
	for (String str : keySet) {
		float[] temp = vectorMap2.get(str);
		result1 += (temp[0] * temp[0]);
		result2 += (temp[1] * temp[1]);
	}
	return result1 * result2;
}

// 点乘法
private double pointMulti(Map<String, float[]> vectorMap2) {
	double result = 0;
	Set<String> keySet = vectorMap2.keySet();
	for (String str : keySet) {
		float[] temp = vectorMap2.get(str);
		result += (temp[0] * temp[1]);
	}
	return result;
}

}

© 著作权归作者所有

上一篇: LDA主题抽取浅析
下一篇: 文本相似度计算
Harry_sir
粉丝 16
博文 80
码字总数 48004
作品 0
朝阳
其他
私信 提问
计算两个字符串相(或句子)似度的方法

主要方法有:编辑距离、余弦相似度、模糊相似度百分比 1 编辑距离 编辑距离(Levenshtein距离)详解(附python实现) 使用Python计算文本相似性之编辑距离 2 余弦相似度 余弦计算相似度度量 ...

致Great
2018/05/11
0
0
TF-IDF与余弦相似性的应用(二):找出相似文章

上一次,我用TF-IDF算法自动提取关键词。 今天,我们再来研究另一个相关的问题。有些时候,除了找到关键词,我们还希望找到与原文章相似的其他文章。比如,"Google新闻"在主新闻下方,还提供...

阮一峰
2013/03/21
0
0
句子相似度--余弦相似度算法的实现

1、余弦相似度 余弦距离,也称为余弦相似度,是用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量。余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫"...

J.mg
2018/08/02
0
0
TF-IDF与余弦相似性的应用(二):找出相似文章

作者: 阮一峰 上一次,我用TF-IDF算法自动提取关键词。 今天,我们再来研究另一个相关的问题。有些时候,除了找到关键词,我们还希望找到与原文章相似的其他文章。比如,"Google新闻"在主新...

最帅的刘先生
2016/12/21
52
0
余弦距离、欧氏距离和杰卡德(Jaccard)相似性度量的比较

1、余弦距离 余弦距离,也称为余弦相似度,是用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量。 向量,是多维空间中有方向的线段,如果两个向量的方向一致,即夹角接近...

u011734144
2018/05/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
41分钟前
7
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部