文章来源:
http://www.cnblogs.com/TtTiCk/archive/2007/08/04/842819.html在
7.9余弦定理+空间向量--我的数学3 中简单地说了一下利用余弦定理来计算文本相似度。下面是利用余弦定理和广义Jaccard系数来计算文本相似度。
简单介绍一下Jaccard系数:广义Jaccard系数可以用于文档数据,并在二元属性情况下归约为Jaccard系数。广义Jaccard系数又称Tanimoto系数。(有另一种系数也称为Tanimoto系数)。该系数用EJ表示,由下式定义:
EJ(x,y)=(x*y)/(||x|*||x||+||y||*||y||-x*y)
其公式与余弦相似度的计算有点相似
ClusterUsingKmeans.rar 代码下载。
代码解析如下:
class Word 表示一个词,来自于中文分词后的结果,其属性包括词频和特征值(关于特征值的计算会在以后介绍)
class Document 表示一个文档,对文档进行中文分词后,分别计算词的词频和特征值。
public double SimilitudeValueToDocumentUsingCos(Document Doc) 通过余弦定理计算相似度
public double SimilitudeValueToDocumentUsingGeneralizedJaccardCoefficient(Document Doc) 通过广义Jaccard计算相似度
public class LoadDict用于加载词库,词库使用sogou的 ,完全简单化计算词的特征。
class WordSegment为中文分词的简单封装,替换成网络上的中文分词组件即可。
实验结果下载
实验报告与数据.rar 77.txt为原始文档,77.txt对比其他文档得到的相似度报告可以在 实验报告.doc中查看
如下所示
|
使用COS(名词和成语) |
使用COS(无限制) |
使用Jaccard (名词和成语) |
使用Jaccard (无限制) |
53.txt |
0.75956909998699 |
0.695630243577844 |
0.560566883431663 |
0.4670868864554 |
57.txt |
0.832549281197672 |
0.784451145860574 |
0.711498783220936 |
0.635179493763215 |
75.txt |
0.723232861947749 |
0.705986655123678 |
0.515174136459287 |
0.494265265766382 |
94.txt |
0.944456910179154 |
0.864040767357343 |
0.624237679218324 |
0.760073520562129 |
PS: 通过查看文本的内容,可以发现五个文本之间都存在一定的相似。能得到文本的相似度之后,可以采用K-means等聚类算法对文本数据进行聚类。
K-means的算法过程可以通过网络得到。
阅读(1052) | 评论(0) | 转发(0) |