Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4560618
  • 博文数量: 1214
  • 博客积分: 13195
  • 博客等级: 上将
  • 技术积分: 9105
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-19 14:41
个人简介

C++,python,热爱算法和机器学习

文章分类

全部博文(1214)

文章存档

2021年(13)

2020年(49)

2019年(14)

2018年(27)

2017年(69)

2016年(100)

2015年(106)

2014年(240)

2013年(5)

2012年(193)

2011年(155)

2010年(93)

2009年(62)

2008年(51)

2007年(37)

分类:

2012-01-27 16:38:54

文章来源: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的算法过程可以通过网络得到。
阅读(5211) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~