文本相似度算法调研简介


基础定义:

tf-idf

tf:term frequency词频

idf:inverse document frequency倒文档频率


(1)最长公共子串(基于词条空间)LCS算法

什么是最长公共子序列呢?好比一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则S 称为已知序列的最长公共子序列。

例子如:有两条随机序列,如 1 3 4 5 5 ,and 2 4 5 5 7 6,则它们的最长公共子序列便是:4 5 5

(2)最长公共子序列(基于权值空间、词条空间) python  - difflib.Differ

注意最长公共子串(Longest CommonSubstring)和最长公共子序列(LongestCommon Subsequence, LCS)的区别:子串(Substring)是串的一个连续的部分,子序列(Subsequence)则是从不改变序列的顺序,而从序列中去掉任意的元素而获得的新序列;更简略地说,前者(子串)的字符的位置必须连续,后者(子序列LCS)则不必。

例子如:字符串acdfg同akdfc的最长公共子串为df,而他们的最长公共子序列是adf。

(3)最少编辑距离法(基于词条空间)

最小编辑距离或莱文斯坦距离(Levenshtein),指由字符串A转化为字符串B的最小编辑次数。允许的编辑操作有:删除,插入,替换。

(4)汉明距离(基于权值空间)

两个码字的对应比特取值不同的比特数称为这两个码字的海明距离。在一个有效编码集中,任意两个码字的海明距离的最小值称为该编码集的海明距离。举例如下:10101和00110从第一位开始依次有第一位、第四、第五位不同,则海明距离为3

(5)余弦值(基于权值空间)

建模过程:

第一步:把每个网页文本分词,成为词包(bag of words)。

第三步:统计网页(文档)总数M。

第三步:统计第一个网页词数N,计算第一个网页第一个词在该网页中出现的次数n,再找出该词在所有文档中出现的次数m。则该词的tf-idf 为:n/N * 1/(m/M) (还有其它的归一化公式,这里是最基本最直观的公式)

第四步:重复第三步,计算出一个网页所有词的tf-idf 值。

第五步:重复第四步,计算出所有网页每个词的tf-idf 值。

模型匹配过程

第一步:对用户查询进行分词。

第二步:根据网页库(文档)的数据,计算用户查询中每个词的tf-idf 值。

第三部:相似度的计算:使用余弦相似度来计算用户查询和每个网页之间的夹角。夹角越小,越相似。这里相似度的计算

(6)模糊哈希


参考文献:

simhash与重复信息识别 http://grunt1223.iteye.com/blog/964564

Similarity estimation techniques from rounding algorithms  http://www.cs.princeton.edu/courses/archive/spring04/cos598B/bib/CharikarEstim.pdf

海量数据相似度计算之simhash和海明距离 http://www.lanceyan.com/tech/arch/simhash_hamming_distance_similarity.html

海量数据相似度计算之simhash短文本查找 http://www.lanceyan.com/tech/arch/simhash_hamming_distance_similarity2-html.html

主题模型Python工具包:Gensim http://www.shangxueba.com/jingyan/2266407.html

文本相似度计算-JaccardSimilarity和哈希签名函数 http://blog.csdn.net/ygrx/article/details/12748857

最长公共子序列(LCS)问题 http://blog.csdn.net/v_july_v/article/details/6695482

最大子序列 http://www.cnblogs.com/zhangchaoyang/articles/2012070.html

信息检索中的重要发明TF-IDF http://www.cnblogs.com/liangxiaxu/archive/2012/05/05/2484972.html

你可能感兴趣的:(文本相似度算法调研简介)