[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  

猜你喜欢

转载自blog.csdn.net/qq_35399846/article/details/78701877