文章相似度与聚类(一种简单高效的算法)

简介: 算法思想:将文章映射到一个n维向量v[],将向量的值二值化为0或1 。用向量a和向量b表示两篇文章,a和b同时为1的位数记为 S1(对为1的位求交集),a和b至少一个为1的位数记为S2(对为1的位求并集).相似度即为S1/S2. 重点在于如何将文章用一个向量表示。

算法思想:将文章映射到一个n维向量v[],将向量的值二值化为0。用向量a和向量b表示两篇文章,ab同时为1的位数记为 S1(对为1的位求交集),ab至少一个为1的位数记为S2(对为1的位求并集).相似度即为S1/S2. 重点在于如何将文章用一个向量表示。

 

主要计算流程如下:

  
                            

文章相似度与聚类(一种简单高效的算法) - panjianping1991 - peter pan的博客

 

为了便于存储,将448维的0-1向量用32个汉字表示。

Step1 构造汉明码的编码集

编码的字符集为2^14=16384个汉字,每个汉字代表0-16383中的1个数。

初始化编码集的算法如下:

 

文章相似度与聚类(一种简单高效的算法) - panjianping1991 - peter pan的博客

 

 

Step2 将文章表示成向量

ik将文章分词然后对每个词求hash值,在用hash值对448取模,即可将每个词映射到448位数组中的一个元素,将映射到的那一个元素置为1

文章相似度与聚类(一种简单高效的算法) - panjianping1991 - peter pan的博客

 

其中第170行是调用ik进行分词。

文章相似度与聚类(一种简单高效的算法) - panjianping1991 - peter pan的博客

 

随机采样5000篇文章,1000个字平均会散列到448位中的200位左右。也就是说1000字左右的文章对应的448位向量会有大概200位非0

 

Step3 将向量转化为汉明码以便存储

 

4480-1数组映射到32个汉字表示的汉明码的算法如下

其中 codes[number]表示上一步得到的汉字字符集中第number个汉字。

文章相似度与聚类(一种简单高效的算法) - panjianping1991 - peter pan的博客

 

Spark streaming会实时计算汉明码,并将汉明码保存到数据库,供后面查询的时候计算相似和聚类使用。

 

Step4 将汉明码解码为向量

 

计算相似先要将汉明码解码为向量。

文章相似度与聚类(一种简单高效的算法) - panjianping1991 - peter pan的博客

 

其中第106行表示根据汉字字符获取到这个汉字代表的数值。

 

Step5 计算相似度

 

有了解码后的向量,就可以计算相似度了:

 

首先求两个向量非0位的交集,记为intersection.

文章相似度与聚类(一种简单高效的算法) - panjianping1991 - peter pan的博客

 

 

然后求两个向量非0位的并集,记为union.

文章相似度与聚类(一种简单高效的算法) - panjianping1991 - peter pan的博客

 

最后求得相似度:

文章相似度与聚类(一种简单高效的算法) - panjianping1991 - peter pan的博客

备注:本文写于2016年,发表在网易博客,因网易博客停止运营,将文章转移到云栖社区。

目录
相关文章
|
29天前
|
机器学习/深度学习 算法 数据可视化
请解释Python中的K-means聚类算法以及如何使用Sklearn库实现它。
【2月更文挑战第29天】【2月更文挑战第104篇】请解释Python中的K-means聚类算法以及如何使用Sklearn库实现它。
|
3天前
|
数据采集 算法 数据可视化
R语言聚类算法的应用实例
R语言聚类算法的应用实例
80 18
R语言聚类算法的应用实例
|
6天前
|
算法 数据可视化 数据挖掘
使用Python实现DBSCAN聚类算法
使用Python实现DBSCAN聚类算法
139 2
|
8天前
|
算法 数据可视化 数据挖掘
使用Python实现K均值聚类算法
使用Python实现K均值聚类算法
15 1
|
28天前
|
机器学习/深度学习 算法 数据可视化
探索Python中的聚类算法:DBSCAN
探索Python中的聚类算法:DBSCAN
20 0
|
29天前
|
算法 数据挖掘
K-means聚类算法是如何实现的?
K-Means算法包括:随机选K个初始质心,将数据点分配到最近质心的簇,更新簇均值作为新质心,重复此过程直到质心变化足够小或达到最大迭代次数。对初始选择敏感,需多次运行取最优结果。
8 0
|
29天前
|
机器学习/深度学习 算法 数据可视化
探索Python中的聚类算法:K-means
探索Python中的聚类算法:K-means
64 4
|
1月前
|
机器学习/深度学习 算法 数据挖掘
使用phyon实现K-means聚类算法
使用phyon实现K-means聚类算法
|
1月前
|
机器学习/深度学习 运维 算法
从K-means到高斯混合模型:常用聚类算法的优缺点和使用范围?
从K-means到高斯混合模型:常用聚类算法的优缺点和使用范围?
167 0
|
1月前
|
存储 算法 网络协议
通过一篇文章让你了解数据结构和算法的重要性
数据结构和算法的重要性,不仅仅在于它们在计算机科学领域中的核心地位,更在于它们对于解决实际问题、优化系统性能、提升软件开发效率等方面的深远影响。在现代信息技术的浪潮中,数据结构和算法如同计算机的“灵魂”,指导着信息的有序存储和高效处理。
44 0