4-gram其实可能是很少使用的文档索引分词方法,我们就引出来说一个相当有启发意义的查重算法— Shingle算法。
按照我一贯的风格,先说理论:假设,第n个词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。呵呵,这个理论不是我发明的,抄别人的语言索引分词方法,使用在中文索引上,就和SEO有了很大关系。我们以4为单元来分词索引,4-gram其实可能是很少使用的文档索引分词方法,当然,2-gram和3-gram比较多。
这样,我们就引出来说一个相当有启发意义的查重算法— Shingle算法。
有这两个文档:
1.郑州网站建设行业里有个知名的公司那就是梦想网络公司,设计水平很高。
2.郑州建设网站行业里有一个知名的公司就是梦想网络,公司设计制作很有水平。
我们使用四个汉字为一个Shingle算法,
文档一得到的字符串集合有:郑州网站,州网站建设,网站建设,站建设行....水平很高。
数一下,文档一共有32个字,则得到的字符串是32-4+1=29个
文档二得到的字符串集合有:郑州建设,州建设网站,建设网站,设网站行....很有水平。
数一下,文档二共的26个字,这样得到字符串有34-4+1=31个
然后再来比较文档一和二的字符串集合,找出相同的个数,仔细的朋友可以自己去找一找,我们找到相同的字符串有:行业里有,知名的公,名的公司,就是梦想,网络公司一共5个
这样两文档的相似率可以这样计算:相似率P=5/(31+29-5) *100%=9%
如果SE在10%就判断相似的话,那不这两个档相似率小于10%,显然会被SE判断为不相似文档
还要注意一点:我们最开始选择的是四个字做为一个Shingle算法,如果选择五个,六个等,得到的结果也会不一样,当然SE不是傻子,他不会选择很多,SE总是在调整他的算法和判断标准已求为用户得到更好的搜索,选择的过多,势必会让原本相似的文档算得的相似率低于SE的判断标准,被SE错认为是原创!如果选择的字过少,这样不仅仅为加重SE的负担,而且可能将一些本来不相干的文档内容判断为相似。
在实际操作中,到底是怎么样的,现在理论界认为可能是2元的分词索引方法,判断相似文档,百度使用的可能是更高级的文档向量空间模型,这个和n-gram是不一样的。
评论: