sklearn: CountVectorize處理及一些使用參數


sklearn: CountVectorize處理及一些使用參數

CountVectorizer是屬於常見的特征數值計算類,是一個文本特征提取方法。對於每一個訓練文本,它只考慮每種詞匯在該訓練文本中出現的頻率。

CountVectorizer會將文本中的詞語轉換為詞頻矩陣,它通過fit_transform函數計算各個詞語出現的次數。

CountVectorizer(analyzer='word', binary=False, decode_error='strict',
        dtype=<class 'numpy.int64'>, encoding='utf-8', input='content',
        lowercase=True, max_df=1.0, max_features=None, min_df=1,
        ngram_range=(1, 1), preprocessor=None, stop_words=None,
        strip_accents=None, token_pattern='(?u)\\b\\w\\w+\\b',
        tokenizer=None, vocabulary=None)

CountVectorizer類的參數很多,分為三個處理步驟:preprocessing、tokenizing、n-grams generation.

一般要設置的參數是:ngram_range,max_df,min_df,max_features,analyzer,stop_words,token_pattern等,具體情況具體分析

  1. ngram_range : 例如ngram_range(min,max),是指將text分成min,min+1,min+2,.........max 個不同的詞組。比如 '我 愛 中國' 中ngram_range(1,3)之后可得到'我' '愛' '中國' '我 愛' '愛 中國' 和'我 愛 中國',如果是ngram_range (1,1) 則只能得到單個單詞'我' '愛'和'中國'。
  2. max_df:可以設置為范圍在[0.0 1.0]的float,也可以設置為沒有范圍限制的int,默認為1.0。 這個參數的作用是作為一個閾值,當構造語料庫的關鍵詞集的時候,如果某個詞的document frequence大於max_df,這個詞不會被當作關鍵詞。如果這個參數是float,則表示詞出現的次數與語料庫文檔數的百分比,如果是int,則表示詞出現的次數。如果參數中已經給定了vocabulary,則這個參數無效。
  3. min_df: 類似於max_df,不同之處在於如果某個詞的document frequence小於min_df,則這個詞不會被當作關鍵詞。
  4. max_features:默認為None,可設為int,對所有關鍵詞的term frequency進行降序排序,只取前max_features個作為關鍵詞集。
  5. analyzer:一般使用默認,可設置為string類型,如’word’, ‘char’, ‘char_wb’,還可設置為callable類型,比如函數是一個callable類型。
  6. stop_words:設置停用詞,設為english將使用內置的英語停用詞,設為一個list可自定義停用詞,設為None不使用停用詞,設為None且max_df∈[0.7, 1.0)將自動根據當前的語料庫建立停用詞表。
  7. token_pattern:過濾規則,表示token的正則表達式,需要設置analyzer == ‘word’,默認的正則表達式選擇2個及以上的字母或數字作為token,標點符號默認當作token分隔符,而不會被當作token。
  8. decode_error:默認為strict,遇到不能解碼的字符將報UnicodeDecodeError錯誤,設為ignore將會忽略解碼錯誤,還可以設為replace,作用尚不明確。
  9. binary:默認為False,一個關鍵詞在一篇文檔中可能出現n次,如果binary=True,非零的n將全部置為1,這對需要布爾值輸入的離散概率模型的有用的。

實例:

from sklearn.feature_extraction.text import CountVectorizer
corpus = ['我 愛 中國 中國','爸爸 媽媽 愛 我','爸爸 媽媽 愛 中國']
# corpus = ['我愛中國','爸爸媽媽愛我','爸爸媽媽愛中國']
vectorizer = CountVectorizer(min_df=1, ngram_range=(1, 1)) ##創建詞袋數據結構,里面相應參數設置
features = vectorizer.fit_transform(corpus)  #擬合模型,並返回文本矩陣
 
print("CountVectorizer:")
print(vectorizer.get_feature_names())   #顯示所有文本的詞匯,列表類型
#詞表
#['中國', '媽媽', '爸爸'] 

print(vectorizer.vocabulary_)    #詞匯表,字典類型
#key:詞,value:對應編號
#{'中國': 0, '爸爸': 2, '媽媽': 1} 

print(features)   #文本矩陣
#第一行 (0, 0)	2 表示為:第0個列表元素,**詞典中索引為0的元素**, 詞頻為2
#  (0, 0)	2       
#  (1, 1)	1
#  (1, 2)	1
#  (2, 1)	1
#  (2, 2)	1
#  (2, 0)	1

print(features.toarray())   #.toarray() 是將結果轉化為稀疏矩陣
#將結果轉化為稀疏矩陣
#[[2 0 0]
# [0 1 1]
# [1 1 1]]

print(features.toarray().sum(axis=0)) #統計每個詞在所有文檔中的詞頻
#文本中的詞頻
#[3 2 2]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM