文档 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 运算。