sklearn.feature_extraction.text.TfidfVectorizer
阿新 • • 發佈:2021-01-16
將原始文件轉換為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演算法來支援。