简单介绍一下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中查看
如下所示
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
| 使用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的算法过程可以通过网络得到。