使用sklearn提取文字的tfidf特徵

2021-09-22 14:08:25 字數 3203 閱讀 4161

from sklearn.feature_extraction.text import countvectorizer, tfidfvectorizer, tfidftransformer
corpus = [

'this is the first document.',

'this is the second second document.',

'and the third one.',

'is this the first document?',

]

countvectorizer是通過fit_transform函式將文字中的詞語轉換為詞頻矩陣

get_feature_names()可看到所有文字的關鍵字

vocabulary_可看到所有文字的關鍵字和其位置

toarray()可看到詞頻矩陣的結果

vectorizer = countvectorizer()

count = vectorizer.fit_transform(corpus)

print(vectorizer.get_feature_names())

print(vectorizer.vocabulary_)

print(count.toarray())

['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']

[[0 1 1 1 0 0 1 0 1]

[0 1 0 1 0 2 1 0 1]

[1 0 0 0 1 0 1 1 0]

[0 1 1 1 0 0 1 0 1]]

tfidftransformer是統計countvectorizer中每個詞語的tf-idf權值

transformer = tfidftransformer()

tfidf_matrix = transformer.fit_transform(count)

print(tfidf_matrix.toarray())

[[ 0.          0.43877674  0.54197657  0.43877674  0.          0.

0.35872874 0. 0.43877674]

[ 0. 0.27230147 0. 0.27230147 0. 0.85322574

0.22262429 0. 0.27230147]

[ 0.55280532 0. 0. 0. 0.55280532 0.

0.28847675 0.55280532 0. ]

[ 0. 0.43877674 0.54197657 0.43877674 0. 0.

0.35872874 0. 0.43877674]]

tfidfvectorizer可以把countvectorizer, tfidftransformer合併起來,直接生成tfidf值

tfidfvectorizer的關鍵引數:

max_df:這個給定特徵可以應用在 tf-idf 矩陣中,用以描述單詞在文件中的最高出現率。假設乙個詞(term)在 80% 的文件中都出現過了,那它也許(在劇情簡介的語境裡)只攜帶非常少資訊。

min_df:可以是乙個整數(例如5)。意味著單詞必須在 5 個以上的文件**現才會被納入考慮。設定為 0.2;即單詞至少在 20% 的文件**現 。

ngram_range:這個引數將用來觀察一元模型(unigrams),二元模型( bigrams) 和三元模型(trigrams)。參考n元模型(n-grams)。

token_pattern:token_pattern這個引數使用正規表示式來分詞,其預設引數為r"(?u)\b\w\w+\b",其中的兩個\w決定了其匹配長度至少為2的單詞,所以這邊減到1個(r"(?u)\b\w+\b")。對這個引數進行更多修改,可以滿足其他要求,比如這裡依然沒有得到標點符號,在此不詳解了。

tfidf_vec = tfidfvectorizer() 

tfidf_matrix = tfidf_vec.fit_transform(corpus)

print(tfidf_vec.get_feature_names())

print(tfidf_vec.vocabulary_)

['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']

print(tfidf_matrix.toarray())
[[ 0.          0.43877674  0.54197657  0.43877674  0.          0.

0.35872874 0. 0.43877674]

[ 0. 0.27230147 0. 0.27230147 0. 0.85322574

0.22262429 0. 0.27230147]

[ 0.55280532 0. 0. 0. 0.55280532 0.

0.28847675 0.55280532 0. ]

[ 0. 0.43877674 0.54197657 0.43877674 0. 0.

0.35872874 0. 0.43877674]]

如果想用訓練集的idf值來計算測試集的tf-idf值,可以通過fit() + transform()

tfidf_vec = tfidfvectorizer() 

tfidf_matrix = tfidf_vec1.fit(x_train).transform(x_test)

注:sklearn中計算tf-idf的公式和原理,可以參考tf-idf 原理及sklearn中的tf-idf例項分析

sklearn特徵的提取 上)

首先必須知道什麼是特徵工程 特徵工程是通過對原始資料的處理和加工,將原始資料屬性通過處理轉換為資料特徵的過程,屬性是資料本身具有的維度,特徵是資料中所呈現出來的某一種重要的特性,通常是通過屬性的計算,組合或轉換得到的。比如主成分分析就是將大量的資料屬性轉換為少數幾個特徵的過程。某種程度而言,好的資料...

sklearn特徵的提取 下)

上文特徵的提取 上 詞袋模型的方法很好用,也很直接,但在有些場景下很難使用,比如分詞後的詞彙字典表非常大,達到100萬 此時如果直接使用詞頻向量或tf idf權重向量的方法,將對應的樣本對應特徵矩陣載 入記憶體,有可能將記憶體撐爆,在這種情況下我們該怎麼辦呢?詞袋模型的方法很好用,也很直接,但在有些...

使用awk提取文字

1.使用awk提取文字 問題本案例要求使用awk工具完成下列過濾任務 練習awk工具的基本用法 提取本機的ip位址 根分割槽使用率 格式化輸出 etc passwd檔案中的使用者名稱 uid 宿主目錄資訊 格式化輸出passwd檔案內容時,要求第一行為列表標題,最後一行提示一共已處理文字的總行數,如...