TF-IDF学习笔记(二)
这篇文章将将TF-IDF的python实现。TF-IDF的原理可以参考:TF-IDF学习笔记(一)
(一)库介绍
使用的库为Scikit-learn:它是一个用于数据挖掘和数据分析的简单且有效的工具,它是基于Python的机器学习模块,基于BSD开源许可证。
Scikit-learn的基本功能主要被分为六个部分:分类(Classification)、回归(Regression)、聚类(Clustering)、数据降维(Dimensionality reduction)、模型选择(Model selection)、数据预处理(Preprocessing)。
Scikit-Learn中的机器学习模型非常丰富,包括SVM,决策树,GBDT,KNN等等,可以根据问题的类型选择合适的模型,具体可以参考官网文档,推荐大家从官网中下载资源、模块、文档进行学习。
Scikit-Learn的安装需要numpy、scipy、matplotlib等模块。
官方网址:http://scikit-learn.org/stable/

(二)TF-IDF计算
Scikit-Learn中TF-IDF权重计算方法主要用到两个类:CountVectorizer和TfidfTransformer。
1.CountVectorizer
CountVectorizer类会将文本中的词语转换为词频矩阵,例如矩阵中包含一个元素a[i][j],它表示j词在i类文本下的词频。它通过fit_transform函数计算各个词语出现的次数,通过get_feature_names()可获取词袋中所有文本的关键字,通过toarray()可看到词频矩阵的结果。
代码如下:
# coding=utf-8
from sklearn.feature_extraction.text import CountVectorizer
#语料
corpus = [
'This is the first document.',
'This is the second second document.',
'And the third one.',
'Is this the first document?',
]
vectorizer = CountVectorizer() #类调用
X = vectorizer.fit_transform(corpus) #计算个词语出现的次数
word = vectorizer.get_feature_names() #获取词袋中所有文本关键词
print word #查看词袋中所有文本关键词
print X.toarray() #查看词频结果
输出结果为:

2.TfidfTransformer
TfidfTransformer用于统计vectorizer中每个词语的TF-IDF值。具体用法如下:
# coding:utf-8
from sklearn.feature_extraction.text import CountVectorizer
#语料
corpus = [
'This is the first document.',
'This is the second second document.',
'And the third one.',
'Is this the first document?',
]
vectorizer = CountVectorizer() #将文本中的词语转换为词频矩阵
X = vectorizer.fit_transform(corpus)#计算个词语出现的次数
word = vectorizer.get_feature_names()#获取词袋中所有文本关键词
from sklearn.feature_extraction.text import TfidfTransformer
transformer = TfidfTransformer() #类调用
tfidf = transformer.fit_transform(X) #将词频矩阵X统计成TF-IDF值
print tfidf.toarray() #查看数据结构 tfidf[i][j]表示i类文本中的tf-idf权重
运行结果如下:

(三)liuxuejiang158大神的例子:python scikit-learn计算tf-idf词语权重
代码如下:
# coding:utf-8
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer
if __name__ == "__main__":
#语料库是分词后的结果
corpus=["我 来到 北京 清华大学",
"他 来到 了 网易 杭研 大厦",
"小明 硕士 毕业 与 中国 科学院",
"我 爱 北京 天安门"]
vectorizer=CountVectorizer()#该类会将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i类文本下的词频
transformer=TfidfTransformer()#该类会统计每个词语的tf-idf权值
tfidf=transformer.fit_transform(vectorizer.fit_transform(corpus))#第一个fit_transform是计算tf-idf,第二个fit_transform是将文本转为词频矩阵
word=vectorizer.get_feature_names()#获取词袋模型中的所有词语
weight=tfidf.toarray()#将tf-idf矩阵抽取出来,元素a[i][j]表示j词在i类文本中的tf-idf权重
for i in range(len(weight)):#打印每类文本的tf-idf词语权重,第一个for遍历所有文本,第二个for便利某一类文本下的词语权重
print u"-------这里输出第",i,u"类文本的词语tf-idf权重------"
for j in range(len(word)):
print word[j],weight[i][j]
运行结果为:
-------这里输出第 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

浙公网安备 33010602011771号