1. 程式人生 > 其它 >sklearn.feature_extraction.text.TfidfVectorizer

sklearn.feature_extraction.text.TfidfVectorizer

將原始文件轉換為TFIDF功能矩陣,等效CountVectorizer將文字轉換為n-gram計數的稀疏矩陣,其次TfidfTransformer從提供的計數矩陣執行TF-IDF轉換。

>>> from sklearn.feature_extraction.text import TfidfVectorizer
>>> corpus = [
...     'This is the first document.',
...     'This document is the second document.',
...     'And this is the third one.',
...     'Is this the first document?',
... ]
>>> vectorizer = TfidfVectorizer()
>>> X = vectorizer.fit_transform(corpus)
>>> print(vectorizer.get_feature_names())
['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']
>>> print(X.shape)
(4, 9)

X.todense()可將X轉換為常規矩陣,(4,9)就是這個常規矩陣的shape。

參考程式碼:https://blog.csdn.net/yeziand01/article/details/85951581

#!/usr/bin/python3n
#code-python(3.6)
from sklearn.feature_extraction.text import TfidfVectorizer

document = ['This is a dog!' ,'that is an ...apple.']
'''
這裡有兩個文件,文件0是‘this is a dog’,文件1是’that is a cat’。每個文件都是一個樣本點。
'''

model = TfidfVectorizer().fit(document)
'''
(1)   fit()會先分析語料庫,提取詞典等;
(2)   從兩個文件中,將所有大寫轉小寫,去掉所有符號,再分別提出的詞語集合['this', 'is', 'a', 'dog'],['that', 'is', 'an', 'apple']。
(3)   對兩個集合去重,得到[‘a','an', 'apple', 'dog', 'is', 'that', 'this']。但這裡面有的詞語不在該語料庫中,比如'a',要剔除,得到詞語集合['an', 'apple', 'dog', 'is', 'that', 'this'],每個詞語都是一個特徵。
'''

print(model.get_feature_names())
'''
從文件中提取的詞語(特徵) = ['an', 'apple', 'dog', 'is', 'that', 'this']
'''

print(model.vocabulary_)
'''
返回詞語與索引 = {'an': 0, 'apple': 1',dog': 2,'is': 3,'that': 4, 'this': 5},表示'an'是第一個特徵,'apple'是第二個特徵,'this'是最後一個特徵,共6個特徵。
'''

print(model.idf_)
'''
[1.40 1.40 1.40 1  1.40 1.40]
'''
matrix = model.transform(document)    # transform()會把每篇文件轉換為向量;得到tf-idf矩陣;

print(matrix.shape)    #矩陣是2行6列;即有2個文件,每個文件有6個詞語(特徵)

print(matrix)
'''
稀疏矩陣表示法
(0, 5)	0.63	#文件0的第5個特徵this的權重值是0.63
(0, 3)	0.44
(0, 2)	0.63
(1, 4)	0.53	#文件1的第4個特徵that的權重值是0.53
(1, 3)	0.37
(1, 1)	0.53
(1, 0)	0.53
'''
print(matrix.todense())    # 轉化為更直觀的一般矩陣
'''
[[0      0      0.63    0.44   0.     0.63]
 [0.53   0.53   0       0.37   0.53   0   ]]
'''

TF-IDF值計算

TF(詞頻) =某個詞在文章中的出現次數

IDF(逆文件頻率)

計算TF-IDf值 =TF *IDF

可以看到,TF-IDF值與一個詞在文件中的出現次數成正比,與該詞在整個語言中的出現次數成反比。所以,自動提取關鍵詞的演算法就很清楚了,

就是計算出文件的每個詞的TF-IDF值,然後按降序排列,取排在最前面的幾個詞。

優缺點

TF-IDF的優點是簡單快速,而且容易理解。缺點是有時候用詞頻來衡量文章中的一個詞的重要性不夠全面,有時候重要的詞出現的可能不夠多,而且這種計算無法體現位置資訊,無法體現詞在上下文的重要性。如果要體現詞的上下文結構,那麼你可能需要使用word2vec演算法來支援。