日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

sklearn.feature_extraction.text.CountVectorizer 学习

發布時間:2025/7/14 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sklearn.feature_extraction.text.CountVectorizer 学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CountVectorizer:?

  CountVectorizer可以將文本文檔集合轉換為token計數矩陣。(token可以理解成詞)
  此實現通過使用scipy.sparse.csr_matrix產生了計數的稀疏表示。
  如果不提供一個先驗字典,并且不使用進行某種特征選擇的分析器,那么特征的數量將與通過分析數據得到的詞匯表的大小一致。
  參數:
  input:

    默認content 可選 filename、file、content
    如果是filename,傳給fit的參數必須是文件名列表
    如果是file,傳給fit的參數必須是文件對象,有read方法
    如果是content,這是字符串序列或者是字節序列
  encoding:

    默認是utf-8。如果需要分析的文本是bytes 字節碼 或者是 文件(文件列表),就使用這個encoding參數來對文件或者bytes進行解碼。
  decode_error:
    默認是strict。當用來分析的字節序列中包含encoding指定的編碼集中沒有的字符時的指令。strict的意思是直接報錯UnicodeDecodeError。ignore是忽視。replace是替換。
  strip_accents:
    默認是None。在文本預處理的過程去除掉重音(音調). ascii方法較快,僅作用于ASCII碼。unicode碼稍慢,適合任意字符。None就是不做這個操作。
  analyzer:
    默認是word。一般使用默認,可設置為string類型,如'word', 'char', 'char_wb',還可設置為callable類型,比如函數是一個callable類型
  preprocessor: 默認是None,可傳入callable
    重寫預處理(字符串轉換)階段,同時保留標記化和N-gram生成步驟
  tokenizer:
    在保留預處理和N-gram生成步驟的同時重寫字符串標記化步驟。僅適用于anlayzer = "word".
  ngram_range:tuple (min_n, max_n) 默認 (1, 1)
    N值的范圍的下界和上界用于提取不同的N-gram。n的所有值都將使用Min n=n<=Max n。
  stop_words : string {‘english’}, list, or None (default)
    english表示使用內置的英語單詞停用表
    如果是list列表,該列表中的詞會作為停止詞。僅適用于analyzer=word。
    如果是None,就不會使用停止詞。max_df參數可以被設置在(0.7, 1.0)的范圍內,用來基于語料庫內文檔中術語的頻率來自動檢測和過濾停止詞。
  lowercase: 默認是True,將文本轉換為小寫。
  token_pattern: 默認r"(?u)\b\w\w+\b"
    使用正則表達式表示什么樣的形式才是一個token,只有當analyzer=word是才有用。默認的正則表達式是至少2個或者更多的字母。標點符號被完全忽略或者只是作為分隔符。

  max_df: 默認是1 [0, 1]之間的小數或者是整數。
    當構建詞匯表時,忽略那些文檔頻率嚴格高于給定閾值的術語(特定于語料庫的停止詞)。如果是浮點數,參數表示一個文件的比例。如果是整數,表示術語的絕對計數。如果vocabulary不是None,則忽略此參數。
  min_df: 與max_df類似。 默認是1.
  max_features: 默認是None, None或者是整數。
    如果不是None,表示建立一個只考慮最前面的max_features個術語來表示語料庫。如果vocabulary參數不是None的話,忽略這個參數。
  vocabulary: 默認是None。Mapping或者Iterable
    無論是Mapping還是字典,items是key, 索引是value,都是特征矩陣中的索引,或者是可迭代的terms。如果沒有給出,則從輸入文檔中確定詞匯表。映射中的索引不應該重復,并且不應該在0和最大索引之間有任何間隙。
  binary:
    如果為真,則所有非零計數設置為1。這對于模擬二進制事件而不是整數計數的離散概率模型是有用的。
  dtype :
    fit_transform或者transform返回的matrix的類型。

  屬性:
    vocabulary_: 詞和詞在向量化后的計數矩陣中列索引的映射關系。
    stop_words_: 停止詞集合。

  方法:
    build_analyzer:
      返回一個進行預處理和分詞的分析器函數對象。
    build_preprocessor:
      返回一個在分詞之前進行預處理的可調用方法。
    build_tokenizer:
      返回一個將字符串分為詞語序列的方法
    decode:
      將輸入轉換為unicode字符表示
      解碼的策略參照vectorizer的參數。
    fit(raw_documents, y=None):
      學習出一個詞匯字典。這個詞匯字典的格式是{word, word在向量矩陣中的列的索引}
      raw_documents是string,unicode,file對象構成的可迭代對象。
    fit_transform:
      學習詞匯字典并轉換為矩陣。等同于先調用fit,再調用transform,不過更有效率。
      返回向量矩陣。[n_samples, n_features]。行表示文檔,列表示特征。
    get_feature_names:
      特征名稱列表
    get_params:
      獲得向量器的參數。
    get_stop_words:
      獲取stopword列表
    inverse_transform(X):
      返回每個文檔中數量不是0的詞語
      返回結果是array組成的列表
    set_params:
      設置估計器參數
    transform(raw_documents):
      將文檔轉換成詞匯計數矩陣。使用fit擬合的詞匯表或者提供給構造函數的詞匯表來提取傳入文檔的詞語計數。

  CountVectorizer處理文本的步驟應該是先使用 preprocessor參數提供預處理器,對文本進行預處理。在使用tokenizer對文本進行拆分。再使用fit擬合得到詞匯表,再使用transform轉換為計數矩陣。

def count_vectorizer_example():from sklearn.feature_extraction.text import CountVectorizervectorizer = CountVectorizer()corpus = ['This is the first document.','This is the second second document.','And the third one.','Is this the first document?',]X = vectorizer.fit_transform(corpus)feature_names = vectorizer.get_feature_names()# 會產生一個矩陣,行表示文章,列表是詞匯,列的數字表示詞匯的數量array = X.toarray()# 得到document詞所在的列的索引document_count = vectorizer.vocabulary_.get("document")# 在訓練語料庫中未出現的詞,會被完全忽略test = vectorizer.transform(["Something completely new."]).toarray()# 除了提取1-grams詞 而且提取2-grams詞。這樣是為了防止詞組順序顛倒。bigram_vectorizer = CountVectorizer(ngram_range=(1, 2),stop_words=['AAAAAA'],token_pattern=r"\b\w+\b", min_df=1)analyze = bigram_vectorizer.build_analyzer()print(analyze("Bi-grams are cool!"))# 構建的向量矩陣會變得更大X_2 = bigram_vectorizer.fit_transform(corpus).toarray()# is this這樣的疑問形式也會出現在向量中feature_index = bigram_vectorizer.vocabulary_.get("is this")print(X_2[:, feature_index])# ################測試各個函數的功能# build_analyzer: 返回一個進行預處理和分詞的調用對象analyzer = bigram_vectorizer.build_analyzer()print(analyzer("This is a test."))# build_preprocessor: 返回一個進行預處理的調用對象。preprocessor = bigram_vectorizer.build_preprocessor()# 這個預處理對象好像只進行了小寫轉換print(preprocessor("This is a test."))# build_tokenizer: 返回一個只對字符串進行分詞的可調用方法tokenizer = bigram_vectorizer.build_tokenizer()print(tokenizer("This is a test."))# decode(doc): 將輸入轉換為unicode字符表示。解碼策略使用vectorizer的參數print(bigram_vectorizer.decode("This is a test.這是一個測試。"))# fit(raw_documents, y=None): 從傳入的raw_documents的所有詞匯中學習出一個詞匯字典# 這個詞匯字典是 {word: word在向量矩陣中的列索引,...}# raw_documents: 字符串、unicode或者file對象構成的可迭代對象# y好像并沒有在函數中使用raw_documents = ["This is a test", "Is this a test?"]print(bigram_vectorizer.fit(raw_documents).vocabulary_)# fit_transform(raw_documents, y=None)# 學習出一個詞匯字典,并且返回一個行為文本,列為詞匯的矩陣。# 這個函數等價于先調用fit函數,再調用transform函數。但是是更高效的實現。print(bigram_vectorizer.fit_transform(corpus).toarray())# get_feature_names:返回一個特征名列表,特征的順序是特征在矩陣中的順序。print(bigram_vectorizer.get_feature_names())# get_params: 返回估計器的參數print(bigram_vectorizer.get_params())# get_stop_words: 返回停止詞表print(bigram_vectorizer.get_stop_words())# inverse_transform(X): 返回每個文檔中數量不是0的詞語# 返回的是array組成的list。len = n_samplesprint(bigram_vectorizer.inverse_transform(bigram_vectorizer.fit_transform(corpus).toarray()))# set_params 設置估計器的參數print(bigram_vectorizer.set_params(stop_words=["2"]).get_stop_words())# transform(raw_documents): 將文檔轉換成術語矩陣。# 使用fit擬合的詞匯表或提供給構造函數的詞匯表提取原始文本文檔中的詞語計數。print(bigram_vectorizer.transform(corpus).toarray())if __name__ == "__main__":count_vectorizer_example()

  

轉載于:https://www.cnblogs.com/hufulinblog/p/9953255.html

總結

以上是生活随笔為你收集整理的sklearn.feature_extraction.text.CountVectorizer 学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。