基礎定義:
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