- A+
陈慧是前美团网的SEO,也是北京SEO圈里少有的几位美女之一,她对于一些搜索引擎的算法有着较深的研究,并且能运用到实际案例中去。更为难得的是她可以把她的想法用文章表达出来,这对于一些“技术宅”来说,的确不是一件容易的事。废话不说了,这里转一篇她发表在昆哥ITSEO上面的文章,让大家见识一下SEO圈里的女侠:)
----------------------下面是文章开始-----------------------
Shingle算法是搜索引擎去掉相同或相似页面的其中一种基本算法,做SEO聚合页面的时候如何让页面之间不重复?如何处理重复度的问题?可以反推Shingle算法得到一些启发。
Shingle [ˈʃɪŋgəl]在英文中表示相互覆盖的瓦片。先通过一个例子来说明Shingle算法:
假设有A、B两个文档的标题,A文档的标题是:明起电话订火车票可全国通取取票时间延12小时;B文档的标题是:火车票电话订票实现全国通取网上预售期延长。
搜索引擎如何知道这两篇文档标题是否是重复的?比如我们可以以2个汉字切为一个Shingle的方法:
对于长度L的文档,每隔N个汉字切一个Shingle,这样一共切到L-N+1个shingle,A文档标题切成了L-N+1=21-2+1=20个Shingle,B文档标题切成了L-N+1=20-2+1=19个Shingle。
A、B两个文档标题共同的Shingle有图上7个加粗的:电话、话订、火车、车票、全国、国通、通取。
A、 B两个文档标题一共有20+19-7=32个Shingle。
然而,A、B两个文档标题共同的Shingle,除以,A、B两个文档标题一共有的Shingle,就是这两个文档标题的Jaccard系数,可以用来判断A、B两个文档标题的相似度。
A、 B两个文档标题的Jaccard系数=7/(20+19-7)=0.21875
从两个文档的标题,可以延伸到两个页面文档,再延伸到N个页面,通过Jaccard系数是否达到相似所需要的标准来判断页面与页面是否相似。
这就是Shingle算法,两个集合的交集除以两个集合的并集,得到Jaccard系数,通过判断Jaccard系数是否大于某个数,来判断两个集合是否重复。
反推Shingle算法,如果Jaccard系数小于某个数,就不重复了,先给每个文档集合拆分成若干个Shingle,再两两计算Jaccard系数,如果小于某个数,生成页面即可。
我之前做的一个项目使用的一个方法,虽然比较笨,也还算实用,分享一下:
假设北京电影品类有100个团购单子,现在要为下图右边这些词设计聚合页面,每个页面展示10个单子,假设jaccard系数大于0.3判定为页面重复,怎么生成不重复页面?
如下图展示单子的标题和长标题(假设seo聚合页用的长标题,因为长标题文字不单一,文字量也大):
每个id是唯一的,每个id对应的标题和长标题可以近似于唯一,那就可以简化成允许相同id的单子数来解决重复的问题。
意思是,每个页面展示10个单子,每两个页面不能有>=3.33个id是一样的,即两两页面id比较,所有的id都不同可以页面,只有1个id相同可以生成页面,只有2个id相同可以生成页面,只有3个id相同可以生成页面,如果有大于等于4个id相同就不生成页面。
顺便介绍一下我自己,我叫陈慧,性别女,第一份工作在3158致富网,工作了快两年,第二份工作在爱帮网,也工作了快两年,从2012年12月开始来到美团,算起来有4.5年的seo经验,说起来惭愧,在这一行比我小好几岁比我强的有太多,修行还得看个人,不看工作年限哈。
以后会把大部分业余时间花在算法、技术、seo交流上,期望有更多好的东西分享给大家。
欢迎关注美团网陈慧微博:http://1.t.qq.com/chenhui8com,陈慧QQ:375006488
文章来源:ITSEO
2014-07-03 下午2:02
我有个类似公式,不过早就演算出来和应用了。
2014-06-27 下午1:28
这个公式和给的计算方法不对,如果按照给的两个集合的交集除以两个集合的并集,那么计算A、 B两个文档标题的Jaccard系数=7/(20+19-7)=0.21875中7应该除以的是20+19并不需要减7,如果减7的话那么公式就应该是两个集合的交集除以两个集合的并集减去两个交集之差。这点请陈慧前辈指点!
2015-02-09 下午9:21
@马跃 你搞清楚什么叫集合的“并集”了吗?
2015-04-09 上午11:07
@马跃 数学还是要加强。。。。。。。。