日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sklearn.feature_extraction.text.CountVectorizer 学习

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

CountVectorizer:?

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

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

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

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

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

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

  CountVectorizer處理文本的步驟應(yīng)該是先使用 preprocessor參數(shù)提供預(yù)處理器,對文本進(jìn)行預(yù)處理。在使用tokenizer對文本進(jìn)行拆分。再使用fit擬合得到詞匯表,再使用transform轉(zhuǎn)換為計數(shù)矩陣。

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()# 會產(chǎn)生一個矩陣,行表示文章,列表是詞匯,列的數(shù)字表示詞匯的數(shù)量array = X.toarray()# 得到document詞所在的列的索引document_count = vectorizer.vocabulary_.get("document")# 在訓(xùn)練語料庫中未出現(xiàn)的詞,會被完全忽略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!"))# 構(gòu)建的向量矩陣會變得更大X_2 = bigram_vectorizer.fit_transform(corpus).toarray()# is this這樣的疑問形式也會出現(xiàn)在向量中feature_index = bigram_vectorizer.vocabulary_.get("is this")print(X_2[:, feature_index])# ################測試各個函數(shù)的功能# build_analyzer: 返回一個進(jìn)行預(yù)處理和分詞的調(diào)用對象analyzer = bigram_vectorizer.build_analyzer()print(analyzer("This is a test."))# build_preprocessor: 返回一個進(jìn)行預(yù)處理的調(diào)用對象。preprocessor = bigram_vectorizer.build_preprocessor()# 這個預(yù)處理對象好像只進(jìn)行了小寫轉(zhuǎn)換print(preprocessor("This is a test."))# build_tokenizer: 返回一個只對字符串進(jìn)行分詞的可調(diào)用方法tokenizer = bigram_vectorizer.build_tokenizer()print(tokenizer("This is a test."))# decode(doc): 將輸入轉(zhuǎn)換為unicode字符表示。解碼策略使用vectorizer的參數(shù)print(bigram_vectorizer.decode("This is a test.這是一個測試。"))# fit(raw_documents, y=None): 從傳入的raw_documents的所有詞匯中學(xué)習(xí)出一個詞匯字典# 這個詞匯字典是 {word: word在向量矩陣中的列索引,...}# raw_documents: 字符串、unicode或者file對象構(gòu)成的可迭代對象# y好像并沒有在函數(shù)中使用raw_documents = ["This is a test", "Is this a test?"]print(bigram_vectorizer.fit(raw_documents).vocabulary_)# fit_transform(raw_documents, y=None)# 學(xué)習(xí)出一個詞匯字典,并且返回一個行為文本,列為詞匯的矩陣。# 這個函數(shù)等價于先調(diào)用fit函數(shù),再調(diào)用transform函數(shù)。但是是更高效的實現(xiàn)。print(bigram_vectorizer.fit_transform(corpus).toarray())# get_feature_names:返回一個特征名列表,特征的順序是特征在矩陣中的順序。print(bigram_vectorizer.get_feature_names())# get_params: 返回估計器的參數(shù)print(bigram_vectorizer.get_params())# get_stop_words: 返回停止詞表print(bigram_vectorizer.get_stop_words())# inverse_transform(X): 返回每個文檔中數(shù)量不是0的詞語# 返回的是array組成的list。len = n_samplesprint(bigram_vectorizer.inverse_transform(bigram_vectorizer.fit_transform(corpus).toarray()))# set_params 設(shè)置估計器的參數(shù)print(bigram_vectorizer.set_params(stop_words=["2"]).get_stop_words())# transform(raw_documents): 將文檔轉(zhuǎn)換成術(shù)語矩陣。# 使用fit擬合的詞匯表或提供給構(gòu)造函數(shù)的詞匯表提取原始文本文檔中的詞語計數(shù)。print(bigram_vectorizer.transform(corpus).toarray())if __name__ == "__main__":count_vectorizer_example()

  

轉(zhuǎn)載于:https://www.cnblogs.com/hufulinblog/p/9953255.html

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。