做文本挖掘时,我们可能需要分析不同文本之间的关联,最简单的就是分析两文本是否相似,是否在陈述相同的事情。文本属于非数值数据,通常可根据分词,把文本转化成数值向量,进一步根据相似度度量进行分析。
相似度度量(Similarity),即计算个体间的相似程度,相似度度量的值越小,说明个体间相似度越小,相似度的值越大说明个体差异越大。
余弦相似度(Cosine Similarity),假定a和b是两个n维向量,a是(x1, x2, ..., xn),b是 (y1, y2, ..., yn),则a与b的夹角的余弦等于:
余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫"余弦相似性"。所以计算出来的余弦值越大,说明两文本越相似。
下面给出实例进行介绍。
需要判断的两文本:String str1 = "乌干达外交部就此事件可能对中国大使馆造成的负面影响感到抱歉。",
String str2 = "此事件对中国大使馆造成了一定的负面影响,乌干达外交部感到抱歉并公开道歉。"
1、IK分词后的结果:
str1: 乌干达/外交部/就此/此事/事件/可能/能对/对中/中国大使馆/造成/负面影响/感到/抱歉
str2:此事/事件/对中/中国大使馆/造成了/一定的/负面影响/乌干达/外交部/感到/抱歉/公开/开道/道歉