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