文本相似度计算--余弦定理和广义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.¢# 阅读(4678) 评论(19)  编辑 收藏 网摘 所属分类: .NETNature Language(自然语言)

  回复  引用    
#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.¢#      
@俊彦
在我上面的例子并没有多少的统计信息。但是在实际应用中加了统计信息能得到更好的效果

  回复  引用    
#15楼2008-11-26 21:56 | gurnfe[未注册用户]
刚刚前几天做了几个多元统计模型(因子分析,主成分分析,聚类分析),做的很辛苦,现在发现很有用啊
  回复  引用  查看    
#16楼[楼主]2008-12-16 20:46 | T.t.T!Ck.¢#      
@gurnfe
^_^

  回复  引用    
#17楼2009-03-20 14:57 | dolphy[未注册用户]
数序功底不深,对Jaccard系数理解不深,但感谢楼主提供的参考

为研究,对样例程序做了C++版本移植测试,望楼主留个邮箱交流...

  回复  引用  查看    
#18楼[楼主]2009-03-28 19:12 | T.t.T!Ck.¢#      
@dolphy
呵呵.我也不深.看书看回来的.
我的邮箱 tttick # 163.com (#改成@)




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 842819




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

相关文章:

相关链接: