1. 程式人生 > >[python] 使用scikit-learn工具計算文字TF-IDF值

[python] 使用scikit-learn工具計算文字TF-IDF值

轉載自: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