原理参考:
http://www.ruanyifeng.com/blog/2013/03/cosine_similarity.html
好多人说包不对,或者不知道哪儿下载,贴上个下载地址:
https://code.google.com/p/ik-analyzer/downloads/list,附件贴上ik的包,其他的apache的commons包自己去下吧
/**
*
*/
package com.text;
import java.io.IOException;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.tuple.MutablePair;
import org.apache.commons.lang3.tuple.Pair;
import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;
/**
* @author Riching
*
* @date 2013-8-10
*/
public class IKMainTest {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
String str1 = "我喜欢看电视,不喜欢看电影。";
String str2 = "我不喜欢看电视,也不喜欢看电影。";
Map<String, Integer> tf1 = getTF(str1);
Map<String, Integer> tf2 = getTF(str2);
Map<String, MutablePair<Integer, Integer>> tfs = new HashMap<String, MutablePair<Integer, Integer>>();
for (String key : tf1.keySet()) {
MutablePair<Integer, Integer> pair = new MutablePair<Integer, Integer>(tf1.get(key), 0);
tfs.put(key, pair);
}
for (String key : tf2.keySet()) {
MutablePair<Integer, Integer> pair = tfs.get(key);
if (null == pair) {
pair = new MutablePair<Integer, Integer>(0, tf2.get(key));
} else {
pair.setRight(tf2.get(key));
}
}
double d = caclIDF(tfs);
System.out.println(d);
}
public static Map<String, Integer> getTF(String str) throws IOException {
Map<String, Integer> map = new HashMap<String, Integer>();
IKSegmenter ikSegmenter = new IKSegmenter(new StringReader(str), true);
Lexeme lexeme = null;
while ((lexeme = ikSegmenter.next()) != null) {
String key = lexeme.getLexemeText();
Integer count = map.get(key);
if (null == count) {
count = 1;
} else {
count = count + 1;
}
map.put(key, count);
}
return map;
}
public static double caclIDF(Map<String, MutablePair<Integer, Integer>> tf) {
double d = 0;
if (MapUtils.isEmpty(tf)) {
return d;
}
double denominator = 0;
double sqdoc1 = 0;
double sqdoc2 = 0;
Pair<Integer, Integer> count = null;
for (String key : tf.keySet()) {
count = tf.get(key);
denominator += count.getLeft() * count.getRight();
sqdoc1 += count.getLeft() * count.getLeft();
sqdoc2 += count.getRight() * count.getRight();
}
d = denominator / (Math.sqrt(sqdoc1) * Math.sqrt(sqdoc2));
return d;
}
}
分享到:
相关推荐
余弦相似度算法
本文介绍了一个基于Python的文本相似度计算系统,该技术通过各种方法完成了图像的预处理、特征提取以及相似性运算。简单地,操作系统先是对文本进行清洗和分词处理,进而提供关键词的词向量表。然后,通过余弦相似度等...
JAVA查重算法,包括HanLP 相似度比较、二叉树、DFA算法实现、敏感词处理工具、IKAnalyzer中文分词工具、分词进行敏感词过滤等查重算法,可以计算海明距离、余弦相似性、莱文斯坦距离、Jaccard 相似度、Sorensen Dice...
本文介绍了一个基于Python的文本相似度计算系统,该技术通过各种方法完成了图像的预处理、特征提取以及相似性运算。简单地,操作系统先是对文本进行清洗和分词处理,进而提供关键词的词向量表。然后,通过余弦相似度等...
本文介绍了一个基于Python的文本相似度计算系统,该技术通过各种方法完成了图像的预处理、特征提取以及相似性运算。简单地,操作系统先是对文本进行清洗和分词处理,进而提供关键词的词向量表。然后,通过余弦相似度等...
该项目是一个使用Python语言开发的文本相似度计算系统。 1. **系统设计**:项目的主要目的是通过比较文本之间的相似性,帮助用户快速找到相关或重复的文本内容。 2. **技术实现**: - 利用了Python编程语言进行...
本文介绍了一个基于Python的文本相似度计算系统,该技术通过各种方法完成了图像的预处理、特征提取以及相似性运算。简单地,操作系统先是对文本进行清洗和分词处理,进而提供关键词的词向量表。然后,通过余弦相似度等...
由一系列算法组成的Java版...Jaccard相似性系数 Jaro距离 Jaro–Winkler距离 曼哈顿距离 SimHash + 汉明距离 Sørensen–Dice系数 知网义原 词语义原树 情感分析 正面倾向程度 负面倾向程度 情感倾向性 近似词 word2vec
基本上,如果您有一堆文本文档,并且您想按相似性将它们分成 n 个组,那么您很幸运。 例子 为了测试这一点,我们可以查看test_clustering.py : from vectorizer import cluster_paragraphs from random import ...
用比较简单的方法实现代码相似度的计算!
计算过程采用的是余弦相似度和Jaccard相似度这两种基于向量内积的方法。在实验过程中通过对文本特征的操作来判断文本之间是否相似,另外还实现了将文本转化为简单的字符串集合进行比较来判断文本是否相似的方法。
余弦相似性 原理:首先我们先把两段文本分词,列出来所有单词,其次我们计算每个词语的词频,最后把词语转换为向量,这样我们就只需要计算两个向量的相似程度. 我们简单表述如下 文本1:我/爱/北京/天安门/ ...
该算法是用于文本相似的判定,同时也可以判定两个用户的相似性。算法是以C#实现的,封装完毕,如有急要可以留言哦
基于统计的文本相似度量方法大多先采用TF-IDF方法将文本表示为词频向量,然后...实验结果表明,采用提出的方法得到的F-度量值明显优于只采用TF-IDF方法或词语语义的方法,从而证明了提出的文本相似度计算方法的有效性。
主要为大家详细介绍了TF-IDF与余弦相似性的应用,找出相似文章,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
而后介绍了最小编辑距离算法、余弦相似度算法和杰卡德相似系数,在论证了主题对文本相似度的重要性后,又针对难提取主题的文本加以改进,最终提出了基于主题和特征的文本相似度算法;然后对各个算法在测试集上的相似度...
词相似度计算词林编码法相似度汉语语义法相似度知网词相似度字面编辑距离法初步相似度计算简单而言相似度句子相似度计算词性和词序结合法编辑距离算法Gregor编辑距离法优化编辑距离法文本相似度计算余弦相似度编辑...
本次分享主要讲三个较为常用的文本相似性算法: 1.基于空间向量的余弦算法 2.编辑距离算法(Levenshtein 距离) 3.JaccardSimilarity算法及联合哈希函数使用方法 1 基于空间向量的余弦算法 向量空间模型的基本思想...
text2vec text2vec,中文文本给vetor。(文本向量化表示工具,包括词向量化,句子...基准方法,估计两个句子间语义相似度最简单的方法就是求句子中所有单词词嵌入的前缀,然后计算两个句子词嵌入之间的余弦相似性。