這個月一直在做文字匹配研究,大到一篇文章,現在小到乙個字段。處於自由散漫的探索,而且時間較短,所以可能較為膚淺,感興趣的可以一起交流。
1.查詢一篇重複文字。前一段時間做過測試,google的simhash演算法效果還是不錯的,文字長度與一篇**長度差不多。
步驟為: a. 給整篇文件分詞 term ,分詞用的是ikanalyzer。
b.計算每個分詞term的md5 雜湊值。由於比較的文字長度不大,所以採用的是32位雜湊。原本的md5是直 接生成32位雜湊的,16位的就是擷取中間32位。**如下:
public string md5(string plaintext )
system.out.println("result(32位): " + buf.tostring());//32位的加密
system.out.println("result(16位): " + buf.tostring().substring(8,24));//16位的加密
return buf.tostring().substring(8,24);
} catch (nosuchalgorithmexception e)
}
c. simhash計算的是全部md5雜湊的最後雜湊值。演算法思路是:
1,將乙個f維的向量v初始化為0;f位的二進位制數s初始化為0;
2,對每乙個特徵:用傳統的hash演算法對該特徵產生乙個f位的簽名b。對i=1到f:
如果b的第i位為1,則v的第i個元素加上該特徵的權重;
否則,v的第i個元素減去該特徵的權重。
3,如果v的第i個元素大於0,則s的第i位為1,否則為0;
4,輸出s作為簽名
用一篇文件測試,google simhash用漢明距離度量。通常是漢明距離小於5即可認為兩篇文件重複。我取為10的時候發現出現多篇文件,但是內容上卻相差很大。
具體的細節就不寫了。
2.段落比較採用的是計算段落每個分詞term的tfidf值,然後匹配。為了提高效率,我假設匹配之前已經清楚該文件所屬分類。
用tfidf可以確定的找到測試文件的出處。十分準確。不像simhash會出現不相干的文件。
Python TF IDF 比較文字相似度
部分 coding utf 8 import codecs import jieba.posseg as pseg from gensim import corpora,models,similarities from hotelmatcher.constant import class tfidf...
Python短文本相似度比較
對python內建庫difflib和fuzzywuzzy進行比較 difflib 基於ratcliff obershelp演算法 格式塔模式匹配 fuzzywuzzy 基於萊文斯坦距離 需要安裝python levenshtein pip install python levenshtein pip...
文字相似度
這種相似度計算方式相對簡單,原理也易於理解,就是計算單詞集合之間的交集和並集大小的比例,該值越大,表示兩個文字越相似。在涉及到大規模平行計算時,該方法效率上有一定的優勢。jaccard 相似度公式 舉例 句子a 我喜歡看電視,不喜歡看電影。句子b 我不喜歡看電視,也不喜歡看電影。分詞去噪後 a 我,...