TfidfVectorizer#
- class sklearn.feature_extraction.text.TfidfVectorizer(*, input='content', encoding='utf-8', decode_error='strict', strip_accents=None, lowercase=True, preprocessor=None, tokenizer=None, analyzer='word', stop_words=None, token_pattern='(?u)\\b\\w\\w+\\b', ngram_range=(1, 1), max_df=1.0, min_df=1, max_features=None, vocabulary=None, binary=False, dtype=<class 'numpy.float64'>, norm='l2', use_idf=True, smooth_idf=True, sublinear_tf=False)[原始碼]#
將原始文件集合轉換為 TF-IDF 特徵矩陣。
等同於
CountVectorizer
,後面接著TfidfTransformer
。有關使用範例,請參閱 使用稀疏特徵對文字文件進行分類。
若要比較不同特徵提取器的效率,請參閱 FeatureHasher 和 DictVectorizer 比較。
有關文件分群並與
HashingVectorizer
比較的範例,請參閱 使用 k-means 分群文字文件。請在 使用者指南 中閱讀更多資訊。
- 參數:
- input{‘filename’, ‘file’, ‘content’}, 預設值=’content’
如果為
'filename'
,則傳遞給 fit 作為參數的序列預期會是檔案名稱列表,需要讀取這些檔案以獲取要分析的原始內容。如果為
'file'
,則序列項目必須具有 'read' 方法(類檔案物件),該方法會被呼叫以獲取記憶體中的位元組。如果為
'content'
,則輸入預期會是字串或位元組類型項目的序列。
- encodingstr,預設值=’utf-8’
如果提供位元組或檔案進行分析,則會使用此編碼進行解碼。
- decode_error{‘strict’, ‘ignore’, ‘replace’}, 預設值=’strict’
關於如果給定要分析的位元組序列包含給定
encoding
中沒有的字元時該怎麼辦的說明。預設情況下,它是 'strict',表示將會引發 UnicodeDecodeError。其他值為 'ignore' 和 'replace'。- strip_accents{‘ascii’, ‘unicode’} 或可呼叫物件,預設值=None
在預處理步驟中移除重音並執行其他字元正規化。 'ascii' 是一種快速方法,僅適用於具有直接 ASCII 對應的字元。 'unicode' 是一種稍慢的方法,適用於任何字元。 None(預設值)表示不執行字元正規化。
'ascii' 和 'unicode' 都使用來自
unicodedata.normalize
的 NFKD 正規化。- lowercasebool,預設值=True
在標記化之前將所有字元轉換為小寫。
- preprocessor可呼叫物件,預設值=None
覆寫預處理(字串轉換)階段,同時保留標記化和 n 元語法生成步驟。僅當
analyzer
不可呼叫時才適用。- tokenizer可呼叫物件,預設值=None
覆寫字串標記化步驟,同時保留預處理和 n 元語法生成步驟。僅當
analyzer == 'word'
時才適用。- analyzer{‘word’, ‘char’, ‘char_wb’} 或可呼叫物件,預設值=’word’
特徵應該由單字還是字元 n 元語法組成。選項 'char_wb' 僅從單字邊界內的文字建立字元 n 元語法;單字邊緣的 n 元語法會以空格填充。
如果傳遞一個可呼叫物件,則會使用它從原始、未經處理的輸入中提取特徵序列。
在 0.21 版中變更: 自 v0.21 起,如果
input
為'filename'
或'file'
,則會先從檔案讀取資料,然後將其傳遞給給定的可呼叫分析器。- stop_words{‘english’}, list, 預設值=None
如果是字串,則會將其傳遞給 _check_stop_list,並傳回適當的停止詞列表。 'english' 目前是唯一支援的字串值。 'english' 有幾個已知的問題,您應該考慮替代方案(請參閱使用停止詞)。
如果是一個列表,則假設該列表包含停用詞,所有停用詞都會從產生的詞彙中移除。僅當
analyzer == 'word'
時適用。如果為 None,則不使用停用詞。在這種情況下,將
max_df
設定為較高的值,例如在 (0.7, 1.0) 範圍內,可以根據詞彙在語料庫文件中的頻率自動偵測並過濾停用詞。- token_patternstr,預設值為 r”(?u)\b\w\w+\b”
表示構成「詞彙」的正規表示式,僅當
analyzer == 'word'
時使用。預設的正規表示式選擇 2 個或更多字母數字字元的詞彙(標點符號會被完全忽略,並始終被視為詞彙分隔符)。如果 token_pattern 中存在捕獲群組,則捕獲群組的內容(而非整個匹配項)會成為詞彙。最多允許一個捕獲群組。
- ngram_rangetuple (min_n, max_n),預設值為 (1, 1)
要提取的不同 n-gram 的 n 值範圍的下限和上限。將使用所有滿足 min_n <= n <= max_n 的 n 值。例如,
ngram_range
為(1, 1)
表示只使用 unigram,(1, 2)
表示使用 unigram 和 bigram,而(2, 2)
表示只使用 bigram。僅當analyzer
不可調用時適用。- max_dffloat 或 int,預設值為 1.0
在建立詞彙表時,忽略文件頻率嚴格高於給定閾值的詞彙(語料庫特定的停用詞)。如果 float 值在 [0.0, 1.0] 範圍內,則參數表示文件比例,如果是整數則表示絕對計數。如果詞彙表不為 None,則會忽略此參數。
- min_dffloat 或 int,預設值為 1
在建立詞彙表時,忽略文件頻率嚴格低於給定閾值的詞彙。這個值在文獻中也稱為 cut-off。如果 float 值在 [0.0, 1.0] 範圍內,則參數表示文件比例,如果是整數則表示絕對計數。如果詞彙表不為 None,則會忽略此參數。
- max_featuresint,預設值為 None
如果不是 None,則建立一個詞彙表,只考慮語料庫中詞頻最高的
max_features
個詞彙。否則,將使用所有特徵。如果詞彙表不為 None,則會忽略此參數。
- vocabularyMapping 或 iterable,預設值為 None
可以是 Mapping (例如,字典),其中鍵是詞彙,值是特徵矩陣中的索引,也可以是詞彙的 iterable。如果未給定,則從輸入的文件中決定詞彙表。
- binarybool,預設值為 False
如果為 True,則所有非零的詞彙計數都會設為 1。這並不表示輸出只會有 0/1 值,僅表示 tf-idf 中的 tf 項是二元的。(將
binary
設為 True,use_idf
設為 False,norm
設為 None,可獲得 0/1 輸出)。- dtypedtype,預設值為 float64
由 fit_transform() 或 transform() 返回的矩陣類型。
- norm{'l1', 'l2'} 或 None,預設值為 'l2'
每個輸出行的範數都是單位範數,可以為以下之一:
‘l2’: 向量元素的平方和為 1。當應用 l2 範數時,兩個向量之間的餘弦相似度就是它們的點積。
‘l1’: 向量元素的絕對值總和為 1。請參閱
normalize
。None: 不進行正規化。
- use_idfbool,預設值為 True
啟用反向文件頻率重新加權。如果為 False,則 idf(t) = 1。
- smooth_idfbool,預設值為 True
透過將 1 加到文件頻率來平滑 idf 權重,如同額外看到一個文件,該文件恰好包含集合中的每個詞彙一次。防止零除法。
- sublinear_tfbool,預設值為 False
應用次線性 tf 縮放,即將 tf 替換為 1 + log(tf)。
- 屬性:
- vocabulary_dict
詞彙到特徵索引的對應關係。
- fixed_vocabulary_bool
如果使用者提供了詞彙到索引對應的固定詞彙表,則為 True。
idf_
形狀為 (n_features,) 的陣列反向文件頻率向量,僅當
use_idf=True
時定義。
參見
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) >>> vectorizer.get_feature_names_out() array(['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this'], ...) >>> print(X.shape) (4, 9)
- build_analyzer()[原始碼]#
返回一個可調用對象來處理輸入資料。
可調用對象處理預處理、詞彙化和 n-gram 生成。
- 返回:
- analyzer: 可調用對象
一個處理預處理、詞彙化和 n-gram 生成的函式。
- decode(doc)[原始碼]#
將輸入解碼為 unicode 符號的字串。
解碼策略取決於向量化器的參數。
- 參數:
- docbytes 或 str
要解碼的字串。
- 返回:
- doc: str
一個 unicode 符號的字串。
- fit(raw_documents, y=None)[原始碼]#
從訓練集中學習詞彙和 idf。
- 參數:
- raw_documents可迭代物件
一個可產生 str、unicode 或檔案物件的可迭代物件。
- yNone
此參數不需要計算 tfidf。
- 返回:
- self物件
已擬合的向量化器。
- fit_transform(raw_documents, y=None)[原始碼]#
學習詞彙和 idf,並返回文件詞彙矩陣。
這等同於先執行 fit 再執行 transform,但效率更高。
- 參數:
- raw_documents可迭代物件
一個可產生 str、unicode 或檔案物件的可迭代物件。
- yNone
此參數會被忽略。
- 返回:
- X(n_samples, n_features)的稀疏矩陣
Tf-idf 加權的文件詞彙矩陣。
- get_feature_names_out(input_features=None)[原始碼]#
取得轉換的輸出特徵名稱。
- 參數:
- input_features字串或 None 的類陣列,預設值=None
不使用,這裡為了 API 的一致性而存在。
- 返回:
- feature_names_out字串物件的 ndarray
轉換後的特徵名稱。
- get_metadata_routing()[原始碼]#
取得此物件的中繼資料路由。
請查看 使用者指南 了解路由機制如何運作。
- 返回:
- routingMetadataRequest
一個封裝路由資訊的
MetadataRequest
。
- get_params(deep=True)[原始碼]#
取得此估算器的參數。
- 參數:
- deepbool,預設值=True
如果為 True,將返回此估算器和包含的子物件(為估算器)的參數。
- 返回:
- paramsdict
參數名稱映射到其值的字典。
- 屬性 idf_#
反向文件頻率向量,僅當
use_idf=True
時定義。- 返回:
- 形狀為 (n_features,) 的 ndarray
- inverse_transform(X)[原始碼]#
返回 X 中具有非零項目的每個文件的詞彙。
- 參數:
- X形狀為 (n_samples, n_features) 的 {類陣列, 稀疏矩陣}
文件詞彙矩陣。
- 返回:
- X_inv形狀為 (n_samples,) 的陣列列表
詞彙陣列的列表。