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

简介: 算法思想:将文章映射到一个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年,发表在网易博客,因网易博客停止运营,将文章转移到云栖社区。

目录
相关文章
|
1月前
|
机器学习/深度学习 算法 数据可视化
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
本程序基于MATLAB实现MVO优化的DBSCAN聚类算法,通过多元宇宙优化自动搜索最优参数Eps与MinPts,提升聚类精度。对比传统DBSCAN,MVO-DBSCAN有效克服参数依赖问题,适应复杂数据分布,增强鲁棒性,适用于非均匀密度数据集的高效聚类分析。
|
2月前
|
算法 数据挖掘 定位技术
基于密度的聚类算法能够在含有噪声的数据集中识别出任意形状和大小的簇(Matlab代码实现)
基于密度的聚类算法能够在含有噪声的数据集中识别出任意形状和大小的簇(Matlab代码实现)
|
2月前
|
机器学习/深度学习 分布式计算 算法
【风场景生成与削减】【m-ISODATA、kmean、HAC】无监督聚类算法,用于捕获电力系统中风场景生成与削减研究(Matlab代码实现)
【风场景生成与削减】【m-ISODATA、kmean、HAC】无监督聚类算法,用于捕获电力系统中风场景生成与削减研究(Matlab代码实现)
180 0
|
2月前
|
机器学习/深度学习 数据采集 算法
【风光场景生成】基于改进ISODATA的负荷曲线聚类算法(Matlab代码实现)
【风光场景生成】基于改进ISODATA的负荷曲线聚类算法(Matlab代码实现)
|
2月前
|
算法 安全 数据可视化
基于多目标鲸鱼优化算法(NSWOA)求解地铁隧道竖向位移和成本的双目标求解(以铁道科学报与工程文章为例)研究(Matlab代码实现)
基于多目标鲸鱼优化算法(NSWOA)求解地铁隧道竖向位移和成本的双目标求解(以铁道科学报与工程文章为例)研究(Matlab代码实现)
|
3月前
|
人工智能 算法 安全
【博士论文】基于局部中心量度的聚类算法研究(Matlab代码实现)
【博士论文】基于局部中心量度的聚类算法研究(Matlab代码实现)
139 0
|
3月前
|
算法 数据可视化 数据挖掘
基于AOA算术优化的KNN数据聚类算法matlab仿真
本程序基于AOA算术优化算法优化KNN聚类,使用Matlab 2022A编写。通过AOA搜索最优特征子集,提升KNN聚类精度,并对比不同特征数量下的聚类效果。包含完整仿真流程与可视化结果展示。
|
4月前
|
机器学习/深度学习 人工智能 算法
AP聚类算法实现三维数据点分类
AP聚类算法实现三维数据点分类
171 0
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
1154 6
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。