鉴于每次面试都会问这个,还是总结一下吧,毕竟没坏处 TF-IDF 我们是用tf-idf进行文本去重的,其实是用tf-idf将两篇文章的关键词提取处出来,然后比对两篇文章的关键词,大于某个阈值,则判定为两篇文章相似 TF为词频,算法为:这个词出现的次数 除以 这个文章的总词数 公式如下: IDF为逆文档频率,如果这个词在每篇文章中都有过,那么他的IDF就比较小,可以用它避免那些停用词的影响,算法为:log(总文章数 除以 出现这个词的文章数) 公式如下: TF*IDF得到这个词语的权重,按照这个权重对这个文章中出现的词语进行计算,得到一个词向量,取前topK个词语,对文章库中所有的文章都得到这样一个词向量,进行比对相似度即可。 simhash的具体过程如下: 1、先将文本进行分词 2、计算这个文章中每个词语的权重weight(可以用tf-idf计算) 3、得到每个词语的hash值,是一串0,1序列 4、用这个词语的权重和这个词语产生的hash值进行运算,如果hash为0,则这个hash位上的值变为-weight,否则为weight。 5、对这个文章中所有的词产生的向量相加,产生一个新的向量,如果该位置为负数,则置为0,否则置为1。 6、比对两篇文章的向量,按位比较,记录不同的位的个数,设置阈值,如果不同位的个数超过了这个阈值则判定为不相似 下面盗个图,感觉描述的挺好的