首先咱們上代碼: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的類似程度是同樣的。文檔