K-shingling
2016-03-04 14:44
387 查看
学习相似项发现的过程中出现了一个shingling小节,其中着重介绍了K-shingling,通过查找网络上的定义和例子,总结一下以便日后使用:
定义:
文档的K-shingling定义为其任意长度为K的字串,所以,每篇文档可以看成一次或多次的K-shiling集合。
例子:
比如,一个文档 “a rose is a rose is a rose”
分词后的词汇(token,语汇单元)集合是
(a,rose,is,a,rose,is, a, rose)
那么w=4的4-shingling就是集合:
{ (a,rose,is,a), (rose,is,a,rose), (is,a,rose,is), (a,rose,is,a), (rose,is,a,rose) }
去掉重复的子集合:
{ (a,rose,is,a), (rose,is,a,rose), (is,a,rose,is) }
给定shingle的大小,两个文档A和B的相似度 r 定义为:
r(A,B)=|S(A)∩S(B)| / |S(A)∪S(B)|
其中|A|表示集合A的大小。
因此,相似度是介于0和1之间的一个数值,且r(A,A)=1,即一个文档和它自身 100%相似。
K的选择问题
对于一般的邮件等较短文档,可以选择k=5
对于论文等大型文档,k=9比较合理
定义:
文档的K-shingling定义为其任意长度为K的字串,所以,每篇文档可以看成一次或多次的K-shiling集合。
例子:
比如,一个文档 “a rose is a rose is a rose”
分词后的词汇(token,语汇单元)集合是
(a,rose,is,a,rose,is, a, rose)
那么w=4的4-shingling就是集合:
{ (a,rose,is,a), (rose,is,a,rose), (is,a,rose,is), (a,rose,is,a), (rose,is,a,rose) }
去掉重复的子集合:
{ (a,rose,is,a), (rose,is,a,rose), (is,a,rose,is) }
给定shingle的大小,两个文档A和B的相似度 r 定义为:
r(A,B)=|S(A)∩S(B)| / |S(A)∪S(B)|
其中|A|表示集合A的大小。
因此,相似度是介于0和1之间的一个数值,且r(A,A)=1,即一个文档和它自身 100%相似。
K的选择问题
对于一般的邮件等较短文档,可以选择k=5
对于论文等大型文档,k=9比较合理
相关文章推荐
- 康诺云推出三款智能硬件产品,为健康管理业务搭建数据池
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- MySQL中使用innobackupex、xtrabackup进行大数据的备份和还原教程
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析