[python] 使用scikit-learn工具計算文字TF-IDF值
阿新 • • 發佈:2019-01-06
轉載自:http://blog.csdn.net/liuxuejiang158blog/article/details/31360765
TF-IDF簡要介紹
(來自:http://blog.csdn.net/eastmount/article/details/50323063)
1 安裝scikit-learn包(如果安裝了Anaconda的話好像已經自帶了)
sudo pip install scikit-learn
2 中文分詞采用的jieba分詞,安裝jieba分詞包(如果是用的anaconda的話可以下載壓縮包然後解壓到anaconda/env裡,進入資料夾後pip就行了)
sudo pip install jieba
3 關於jieba分詞的使用非常簡單,參考這裡,關鍵的語句就是(這裡簡單試水,不追求效果4 )
import jieba.posseg as pseg
words=pseg.cut("對這句話進行分詞")
for key in words:
print key.word,key.flag
輸出結果:
對 p
這 r
句 q
話 n
進行 v
分詞 n
4 採用scikit-learn包進行tf-idf分詞權重計算關鍵用到了兩個類:CountVectorizer和TfidfTransformer,具體參見這裡
另外有兩個寫得比較詳細的部落格:
http://blog.csdn.net/eastmount/article/details/50323063
http://www.ruanyifeng.com/blog/2013/03/tf-idf.html
一個簡單的程式碼如下:
# coding:utf-8
__author__ = "liuxuejiang"
import jieba
import jieba.posseg as pseg
import os
import sys
from sklearn import feature_extraction
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer
if __name__ == "__main__":
corpus=["我 來到 北京 清華大學",#第一類文字切詞後的結果,詞之間以空格隔開
"他 來到 了 網易 杭研 大廈",#第二類文字的切詞結果
"小明 碩士 畢業 與 中國 科學院",#第三類文字的切詞結果
"我 愛 北京 天安門"]#第四類文字的切詞結果
#該類會將文字中的詞語轉換為詞頻矩陣,矩陣元素a[i][j] 表示j詞在i類文字下的詞頻
vectorizer=CountVectorizer()
#該類會統計每個詞語的tf-idf權值
transformer=TfidfTransformer()
#第一個fit_transform是計算tf-idf,第二個fit_transform是將文字轉為詞頻矩陣
tfidf=transformer.fit_transform(vectorizer.fit_transform(corpus))
#獲取詞袋模型中的所有詞語
word=vectorizer.get_feature_names()
#將tf-idf矩陣抽取出來,元素a[i][j]表示j詞在i類文字中的tf-idf權重
weight=tfidf.toarray()
#列印每類文字的tf-idf詞語權重,第一個for遍歷所有文字,第二個for便利某一類文字下的詞語權重
for i in range(len(weight)):
print u"-------這裡輸出第",i,u"類文字的詞語tf-idf權重------"
for j in range(len(word)):
print word[j],weight[i][j]
程式輸出:每行格式為:詞語 tf-idf權重
-------這裡輸出第 0 類文字的詞語tf-idf權重------ #該類對應的原文字是:"我來到北京清華大學"
中國 0.0
北京 0.52640543361
大廈 0.0
天安門 0.0
小明 0.0
來到 0.52640543361
杭研 0.0
畢業 0.0
清華大學 0.66767854461
碩士 0.0
科學院 0.0
網易 0.0
-------這裡輸出第 1 類文字的詞語tf-idf權重------ #該類對應的原文字是: "他來到了網易杭研大廈"
中國 0.0
北京 0.0
大廈 0.525472749264
天安門 0.0
小明 0.0
來到 0.414288751166
杭研 0.525472749264
畢業 0.0
清華大學 0.0
碩士 0.0
科學院 0.0
網易 0.525472749264
-------這裡輸出第 2 類文字的詞語tf-idf權重------ #該類對應的原文字是: "小明碩士畢業於中國科學院“
中國 0.4472135955
北京 0.0
大廈 0.0
天安門 0.0
小明 0.4472135955
來到 0.0
杭研 0.0
畢業 0.4472135955
清華大學 0.0
碩士 0.4472135955
科學院 0.4472135955
網易 0.0
-------這裡輸出第 3 類文字的詞語tf-idf權重------ #該類對應的原文字是: "我愛北京天安門"
中國 0.0
北京 0.61913029649
大廈 0.0
天安門 0.78528827571
小明 0.0
來到 0.0
杭研 0.0
畢業 0.0
清華大學 0.0
碩士 0.0
科學院 0.0
網易 0.0