Python的scikit-learn包下有计算tf-idf的api,研究了下做个笔记
1 安装scikit-learn包
-
sudo pip install scikit-learn
2 中文分词采用的jieba分词,安装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,具体参见这里
一个简单的代码如下:
-
-
__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=["我 来到 北京 清华大学",
-
"他 来到 了 网易 杭研 大厦",
-
"小明 硕士 毕业 与 中国 科学院",
-
"我 爱 北京 ***"]
-
vectorizer=CountVectorizer()
-
transformer=TfidfTransformer()
-
tfidf=transformer.fit_transform(vectorizer.fit_transform(corpus))
-
word=vectorizer.get_feature_names()
-
weight=tfidf.toarray()
-
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
注:这里随便举了几个文本,所以tf-idf也没什么实际价值,旨在说明scikit-learn包关于tf-idf计算API的调用