計算多個文檔之間的文本類似程度

首先咱們上代碼:python

from sklearn.feature_extraction.text import CountVectorizer
corpus = [
'UNC played Duke in basketball',
'Duke lost the basketball game',
'I ate a sandwich'
]
vectorizer = CountVectorizer(binary=True,stop_words='english')#設置停用詞爲英語,這樣就會過濾掉
#過濾掉a an the 等沒必要要的冠詞,同時設定英語裏的同種詞的形式,單複數,過去式等爲一樣的詞語
print(vectorizer.fit_transform(corpus).todense())
print(vectorizer.vocabulary_)

輸出:ide

[[0 1 1 0 0 1 0 1]
 [0 1 1 1 1 0 0 0]
 [1 0 0 0 0 0 1 0]]
{'unc': 7, 'played': 5, 'duke': 2, 'basketball': 1, 'lost': 4, 'game': 3, 'ate': 0, 'sandwich': 6}

 前面三行的矩陣只有0和1兩個值,每個矩陣都有8個0或者1,這裏說明了咱們的詞庫當中一共有8個不一樣的英語詞彙,因爲以前咱們使用了代碼:函數

vectorizer = CountVectorizer(binary=True,stop_words='english')#設置停用詞爲英語,這樣就會過濾掉
#過濾掉a an the 等沒必要要的冠詞,同時設定英語裏的同種詞的形式,單複數,過去式等爲一樣的詞語

所以咱們已通過濾掉了a an tne 這種英語裏的冠詞,每個名次的單複數,動詞的過去,過去完成時等詞,好比說咱們的play和played計算機就會默認爲是同一個詞了,真的神奇。idea

後面的輸出0和1表示了全部詞庫當中的某一個詞是否出現,咱們全部的詞彙的所對應的數值已經計算出:spa

{'unc': 7, 'played': 5, 'duke': 2, 'basketball': 1, 'lost': 4, 'game': 3, 'ate': 0, 'sandwich': 6}

 在每一句話當中,出現就記爲1,不出現則記爲0,這就是上述矩陣的含義了。最後咱們經過sklearn庫當中的函數來計算這三個句子特徵向量的歐式距離,其實就是把咱們的矩陣拿來計算,計算的公式以下:
code

代碼以下:orm

from sklearn.metrics.pairwise import euclidean_distances
counts = vectorizer.fit_transform(corpus).todense()
for x,y in [[0,1],[0,2],[1,2]]:
    dist = euclidean_distances(counts[x],counts[y])
    print('文檔{}與文檔{}的距離{}'.format(x,y,dist))

所以咱們有輸出:blog

文檔0與文檔1的距離[[2.]]
文檔0與文檔2的距離[[2.44948974]]
文檔1與文檔2的距離[[2.44948974]]

 說明文檔2和文檔一、0的類似程度是同樣的。文檔

相關文章
相關標籤/搜索