Demo1
TfidfTransformer + CountVectorizer = TfidfVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer, TfidfTransformer
corpus = [
'This This is the first document.',
'This This is the second second document.',
'And the third one.',
'Is this the first document?',
]
tfidf_model = TfidfVectorizer()
tfidf_matrix = tfidf_model.fit_transform(corpus)
word_dict = tfidf_model.get_feature_names()
print(word_dict)
print(tfidf_matrix)
['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']
(0, 1) 0.3493402123185688
(0, 2) 0.431504661587479
(0, 6) 0.2856085141790751
(0, 3) 0.3493402123185688
(0, 8) 0.6986804246371376
(1, 5) 0.7717016211057586
(1, 1) 0.24628357422338598
(1, 6) 0.20135295972313796
(1, 3) 0.24628357422338598
(1, 8) 0.49256714844677196
(2, 4) 0.5528053199908667
(2, 7) 0.5528053199908667
(2, 0) 0.5528053199908667
(2, 6) 0.2884767487500274
(3, 1) 0.4387767428592343
(3, 2) 0.5419765697264572
(3, 6) 0.35872873824808993
(3, 3) 0.4387767428592343
(3, 8) 0.4387767428592343
參數設置
關於參數:
-
input:string{'filename', 'file', 'content'}
-
如果是'filename',序列作為參數傳遞給擬合器,預計為文件名列表,這需要讀取原始內容進行分析
-
如果是'file',序列項目必須有一個”read“的方法(類似文件的對象),被調用作為獲取內存中的字節數
-
否則,輸入預計為序列串,或字節數據項都預計可直接進行分析。
-
-
encoding:string, ‘utf-8’by default
- 如果給出要解析的字節或文件,此編碼將用於解碼
-
decode_error: {'strict', 'ignore', 'replace'}
- 如果一個給出的字節序列包含的字符不是給定的編碼,指示應該如何去做。默認情況下,它是'strict',這意味着的UnicodeDecodeError將提高,其他值是'ignore'和'replace'
-
strip_accents: {'ascii', 'unicode', None}
- 在預處理步驟中去除編碼規則(accents),”ASCII碼“是一種快速的方法,僅適用於有一個直接的ASCII字符映射,"unicode"是一個稍慢一些的方法,None(默認)什么都不做
-
analyzer:string,{'word', 'char'} or callable
- 定義特征為詞(word)或n-gram字符,如果傳遞給它的調用被用於抽取未處理輸入源文件的特征序列
-
preprocessor:callable or None(default)
- 當保留令牌和”n-gram“生成步驟時,覆蓋預處理(字符串變換)的階段
-
tokenizer:callable or None(default)
- 當保留預處理和n-gram生成步驟時,覆蓋字符串令牌步驟
-
ngram_range: tuple(min_n, max_n)
- 要提取的n-gram的n-values的下限和上限范圍,在min_n <= n <= max_n區間的n的全部值
-
stop_words:string {'english'}, list, or None(default)
-
如果為english,用於英語內建的停用詞列表
-
如果為list,該列表被假定為包含停用詞,列表中的所有詞都將從令牌中刪除
-
如果None,不使用停用詞。max_df可以被設置為范圍[0.7, 1.0)的值,基於內部預料詞頻來自動檢測和過濾停用詞
-
-
lowercase:boolean, default True
- 在令牌標記前轉換所有的字符為小寫
-
token_pattern:string
- 正則表達式顯示了”token“的構成,僅當analyzer == ‘word’時才被使用。兩個或多個字母數字字符的正則表達式(標點符號完全被忽略,始終被視為一個標記分隔符)。
-
max_df: float in range [0.0, 1.0] or int, optional, 1.0 by default
- 當構建詞匯表時,嚴格忽略高於給出閾值的文檔頻率的詞條,語料指定的停用詞。如果是浮點值,該參數代表文檔的比例,整型絕對計數值,如果詞匯表不為None,此參數被忽略。
-
min_df:float in range [0.0, 1.0] or int, optional, 1.0 by default
- 當構建詞匯表時,嚴格忽略低於給出閾值的文檔頻率的詞條,語料指定的停用詞。如果是浮點值,該參數代表文檔的比例,整型絕對計數值,如果詞匯表不為None,此參數被忽略。
-
max_features: optional, None by default
- 如果不為None,構建一個詞匯表,僅考慮max_features--按語料詞頻排序,如果詞匯表不為None,這個參數被忽略
-
vocabulary:Mapping or iterable, optional
- 也是一個映射(Map)(例如,字典),其中鍵是詞條而值是在特征矩陣中索引,或詞條中的迭代器。如果沒有給出,詞匯表被確定來自輸入文件。在映射中索引不能有重復,並且不能在0到最大索引值之間有間斷。
-
binary:boolean, False by default
- 如果為True,所有非零計數被設置為1,這對於離散概率模型是有用的,建立二元事件模型,而不是整型計數
-
dtype:type, optional
- 通過fit_transform()或transform()返回矩陣的類型
-
norm:'l1', 'l2', or None,optional
- 范數用於標准化詞條向量。None為不歸一化
-
use_idf:boolean, optional
- 啟動inverse-document-frequency重新計算權重
-
smooth_idf:boolean,optional
- 通過加1到文檔頻率平滑idf權重,為防止除零,加入一個額外的文檔
-
sublinear_tf:boolean, optional
- 應用線性縮放TF,例如,使用1+log(tf)覆蓋tf
Demo2
from sklearn.feature_extraction.text import TfidfVectorizer, TfidfTransformer
# 1
tfidf_model = TfidfVectorizer(binary=False, decode_error='ignore', stop_words='english')
vec = tfidf_model.fit_transform(corpus)
tfidf_model.get_feature_names()
# 2
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_model = TfidfVectorizer(stop_words='english', ngram_range=(1, 1),
analyzer='word', max_df=.57, binary=False,
token_pattern=r"\w+",sublinear_tf=False)
vec = tfidf_model.fit_transform(corpus)
tfidf_model.get_feature_names()
# stop_words:string {'english'}, list, or None(default)如果為english,用於英語內建的停用詞列表。
# - 如果為list,該列表被假定為包含停用詞,列表中的所有詞都將從令牌中刪除;
# - 如果None,不使用停用詞。
# ngram_range(min,max):是指將text分成min,min+1,min+2,.........max 個不同的詞組。
# 比如'Python is useful'中ngram_range(1,3)之后可得到'Python' 'is' 'useful' 'Python is' 'is useful' 和'Python is useful'
# 如果是ngram_range (1,1) 則只能得到單個單詞'Python' 'is'和'useful'
# analyzer:string,{'word', 'char'} or callable定義特征為詞(word)或n-gram字符
# max_df可以被設置為范圍[0.7, 1.0)的值,基於內部預料詞頻來自動檢測和過濾停用詞。
# max_df: float in range [0.0, 1.0] or int, optional, 1.0 by default當構建詞匯表時,嚴格忽略高於給出閾值的文檔頻率的詞條,語料指定的停用詞。
# - 如果是浮點值,該參數代表文檔的比例,整型絕對計數值,如果詞匯表不為None,此參數被忽略。
# binary:boolean, False by default
# - 如果為True,所有非零計數被設置為1,這對於離散概率模型是有用的,建立二元事件模型,而不是整型計數。
# token_pattern: 正則表達式顯示了”token“的構成,僅當analyzer == ‘word’時才被使用。
# sublinear_tf:boolean, optional應用線性縮放TF,例如,使用1+log(tf)覆蓋tf
http://www.javashuo.com/article/p-rkocllvo-kp.html
參數設置:https://blog.csdn.net/laobai1015/article/details/80451371 ; https://www.jianshu.com/p/ce0be2f8a4ee