文本相似度计算--余弦定理和广义Jaccard系数

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的算法过程可以通过网络得到。
posted @ 2007-08-04 13:17 T.t.T!Ck.¢# 阅读(2383) 评论(15)  编辑 收藏 所属分类: .NETNature Language Search

  回复  引用  查看    
#1楼 2007-08-04 21:18 | Adrian.h      
K-Means~ 图像分割时找相似图像区域也用的~ 快大四了才发现该补补数学了。。。
  回复  引用  查看    
#2楼 [楼主]2007-08-04 22:17 | T.t.T!Ck.      
@Adrian.h
呵呵
我也在补数学,当时没有好好地学习,现在后悔了

K-means做聚类或者你说的图像分割时找相似图像区域 这些应该有其他算法可以替代的吧。主要的还是特征值的提取,对吧?呵呵
  回复  引用  查看    
#3楼 2007-08-05 08:15 | Adrian.H      
@T.t.T!Ck.
必然有很多算法可以用的啊.. 但目前我脑中只对K-Means有想法了
图像分割是提取特征值前面的步骤.. 特征值提取是大头啊
  回复  引用  查看    
#4楼 [楼主]2007-08-05 12:36 | T.t.T!Ck.      
@Adrian.H
文本挖掘中也就那么几种特征提取的方法,但是很多时候还是需要人工干预才能得到比较好的特征值,我头大了。^_^
  回复  引用  查看    
#5楼 [楼主]2007-08-05 12:37 | T.t.T!Ck.      
@Adrian.H
图像分割我还不会,但是对于图像特征提取我还是很有兴趣的,傅立叶变换好像可以做哦。^_^

  回复  引用  查看    
#6楼 2007-08-05 22:22 | Adrian.H      
@T.t.T!Ck.
DFT在很多处理数字信号领域都可以用... 高等数学中简单学了点傅立叶级数.. 写代码的时候才发现那点东西完全不够啊.. 头大too
  回复  引用  查看    
#7楼 [楼主]2007-08-05 23:45 | T.t.T!Ck.      
@Adrian.H
你有QQ,MSN之类的联系方式吗?
大家交流一下
我对于图像方面也有兴趣
  回复  引用    
#8楼 2008-04-20 15:16 | asp.net CMS [未注册用户]
深奥,学习ing
  回复  引用  查看    
#9楼 [楼主]2008-05-27 17:54 | T.t.T!Ck.¢#      
@asp.net CMS
不深吧,中学时候就知道的公式
  回复  引用    
#10楼 2008-07-05 09:07 | fxshen [未注册用户]
我的毕设里也有这部分,谢谢你提供的参考
  回复  引用  查看    
#11楼 [楼主]2008-07-06 15:51 | T.t.T!Ck.¢#      
@fxshen
不客气 ^_^
  回复  引用    
#12楼 2008-08-02 16:05 | 俊彦 [未注册用户]
我想问是不是可以比较文本的意思啊~
我想做一个问答题的批改系统,不知道是否适用呢?
  回复  引用  查看    
#13楼 [楼主]2008-08-03 23:35 | T.t.T!Ck.¢#      
@俊彦
可以认为是比较文本的意思吧。
但是这个完全基于概率统计的

而你说的问答题,虽然这样能够计算得到部分相关。。但是这里的计算缺乏了上下文的语义。。个人感觉行不通。。最多只能做一个参考。。 当然啦,把完全不相关的回答排除出来还是可以的。。
  回复  引用  查看    
#14楼 [楼主]2008-08-03 23:38 | T.t.T!Ck.¢#      
@俊彦
在我上面的例子并没有多少的统计信息。但是在实际应用中加了统计信息能得到更好的效果

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-08-04 13:19 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接:

历史上的今天:
2006-08-04 一个JXME的简单测试 ^_^