文档 Shingling
K-Shingle
假设有一个字符串:china,k-shingle 可以将它转换成k(这里是2)长度的字符串集合:ch,hi,in,na。
我实现的 2-shingle 算法如下:
#coding=utf-8 edu = set([u'教育',u'高校',u'招生',u'考试',u'考生']) it = set([u'IT',u'信息',u'技术']) def jaccard(set1,set2): """ jaccard 算法,计算两个集合 (set1,set2) 的 jaccard return: jaccard 值 """ assert(isinstance(set1,set)) assert(isinstance(set2,set)) return (len(set1.intersection(set2))+0.0)/len(set1.union(set2))*100 def _2Shingle(words): """ k-Shingle 生成,k=2 return: Shingle 分解的集合 """ words = words.replace(' ','') def make(): for i in xrange(len(words)): try: yield words[i],words[i+1] except: break return set([''.join(x) for x in make()]) x = _2Shingle(u'北京知道创宇信息技术有限公司') print(jaccard(x,it))
23 行做了一个 Jaccard 运算。