Python基于textdistance實現計算文本相似度
textdistance是Python的第三方庫,用于計算文本之間的相似度或距離。它提供了30+個算法,簡單易用。

安裝
pip install textdistance # 使用擴展庫,提高性能 pip install "textdistance[extras]"
使用
import textdistance
# 計算編輯距離
distance = textdistance.levenshtein.distance("如何更換花唄綁定銀行卡", "花唄更改綁定銀行卡")
print("編輯距離:", distance)
# 計算余弦相似度
similarity = textdistance.cosine.similarity("如何更換花唄綁定銀行卡", "花唄更改綁定銀行卡")
print("余弦相似度:", similarity)
# 計算 Jaccard 系數
coefficient = textdistance.jaccard("如何更換花唄綁定銀行卡", "花唄更改綁定銀行卡")
print("Jaccard 系數:", coefficient)
# 計算 Hamming 距離
distance = textdistance.hamming.distance("如何更換花唄綁定銀行卡", "花唄更改綁定銀行卡")
print("Hamming 距離:", distance)
結果:
編輯距離: 5
余弦相似度: 0.8040302522073697
Jaccard 系數: 0.6666666666666666
Hamming 距離: 10
應用場景
拼寫檢查
在拼寫檢查中,可以使用編輯距離等算法來比較單詞之間的相似度,從而找出可能的正確拼寫。
import textdistance
# 拼寫檢查
word = "發(fā)憤圖強"
possible_spellings = ["發(fā)奮圖強", "發(fā)奮圖", "發(fā)憤圖"]
for spelling in possible_spellings:
distance = textdistance.levenshtein.distance(word, spelling)
if distance <= 1:
print("可能的正確拼寫:", spelling)
結果
可能的正確拼寫: 發(fā)奮圖強
可能的正確拼寫: 發(fā)憤圖
文檔相似度計算
在信息檢索和推薦系統(tǒng)中,經常需要計算文檔之間的相似度,以便為用戶提供相關的信息或推薦內容。
import textdistance
# 文檔相似度計算
doc1 = "Python is a programming language"
doc2 = "Python is used for web development"
doc3 = "Java is a programming language"
similarity1 = textdistance.cosine.similarity(doc1, doc2)
similarity2 = textdistance.cosine.similarity(doc1, doc3)
print("文檔1和文檔2的余弦相似度:", similarity1)
print("文檔1和文檔3的余弦相似度:", similarity2)
結果
文檔1和文檔2的余弦相似度: 0.6063390625908325
文檔1和文檔3的余弦相似度: 0.8391463916782737
數據清洗
在數據清洗過程中,可以使用 Hamming 距離等算法來比較數據條目之間的相似度,從而找出相似但不完全相同的數據。
import textdistance
# 數據清洗
data = ["配偶", "原配", "元配", "老婆", "夫人", "愛人"]
for i in range(len(data)):
for j in range(i+1, len(data)):
distance = textdistance.hamming.distance(data[i], data[j])
if distance <= 1:
print("相似但不完全相同的數據:", data[i], data[j])
結果:
相似但不完全相同的數據: 原配 元配
相似但不完全相同的數據: 夫人 愛人
import textdistance
# 姓名匹配
name1 = "李建國"
name2 = "張建國"
name3 = "王愛國"
coefficient1 = textdistance.jaccard.normalized_similarity(name1, name2)
coefficient2 = textdistance.jaccard.normalized_similarity(name1, name3)
print("姓名1和姓名2的Jaccard系數:", coefficient1)
print("姓名1和姓名3的Jaccard系數:", coefficient2)
結果
姓名1和姓名2的Jaccard系數: 0.5
姓名1和姓名3的Jaccard系數: 0.19999999999999996
textdistance 提供了豐富多樣的文本比較算法和距離度量方法,可以滿足各種不同的文本比較需求。
相關鏈接
到此這篇關于Python基于textdistance實現計算文本相似度的文章就介紹到這了,更多相關Python textdistance計算文本相似度內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

