不同品種貓貓有多相似呢,Python 文本相似度計算
數(shù)據(jù)處理
數(shù)據(jù)原始有很多列,我們需要把 O 列直至末尾的這些描述每個品種貓貓的文本合為一列:
以此計算每個品種的描述與其他品種描述的相似度,把“描述”列作為文本列表,“品種”作為索引,兩兩計算。
合并后的文本指數(shù)其實是挺多的,這樣便于對比出那種方法更快。
difflib
difflib 是 Python 的內(nèi)置庫,基于 Ratcliff-Obershelp 算法(格式塔模式匹配)。
計算值是 0-1 之間的,越接近 1 說明文本越相似。
fuzzywuzzy
fuzzywuzzy 是一個第三方庫,基于萊文斯坦距離,需要安裝 python-Levenshtein,fuzzywuzzy,直接 pip 即可。
這個原理最容易說明,萊文斯坦距離一個字符串變?yōu)榱硗庖粋€字符串經(jīng)過刪除,插入,替換的編輯距離。
計算的值介于 0-100,值越大說明兩文本越相似。
余弦距離
接下來介紹的集中距離都是需要先將文本進行向量化的,通過向量化計算顯示距離。
文本向量化必須兩個對比的文本同時向量化操作,確保兩文本向量化的長度一樣才可進行計算,部分代碼:
兩對比文本向量化后,再進行相似度計算:
余弦相似度,值介于 0-1,越大說明兩文本越相似。
從結(jié)果上看對比前兩個,值要大于 0.9 才相當(dāng)于有 60% 以上的相似度,前兩種方法更為直觀。
其他距離
其他距離的計算方法還有歐式距離,曼哈頓距離,切比雪夫距離,杰爾德距離,漢明距離,這些值的范圍沒有上限,越小說明文本越相似。
還有皮爾遜相關(guān)系數(shù),這個計算的值介于 0-1,值越大說明文本越相似。
它們的實現(xiàn)方式都與余弦相似,詳細可查看源代碼。
結(jié)果
小編使用了所有方法計算相似度,fuzzywuzz 方法計算的時間最快,其次是 difflib,且結(jié)果比較直觀,其他方法都需要文本向量化在比較,所以在文本較長時,時間有點久。
最后使用 fuzzywuzz 計算的相似度,繪制熱力相關(guān)圖直觀的展示貓貓品種哪些描述較為相似:
異國短毛貓與加菲貓描述相似度較高,英囯藍白與英國短毛貓相似度也較高。
這樣一個文本相似度計算就完成了。
-End-
最近有一些小伙伴,讓我?guī)兔φ乙恍?nbsp;面試題 資料,于是我翻遍了收藏的 5T 資料后,匯總整理出來,可以說是程序員面試必備!所有資料都整理到網(wǎng)盤了,歡迎下載!

面試題】即可獲取











