[python]使⽤scikit-learn⼯具计算⽂本TF-IDF值(转载学习) 在⽂本聚类、⽂本分类或者⽐较两个⽂档相似程度过程中,可能会涉及到TF-IDF值的计算。这⾥主要讲述基于Python的机器学习模块和开源⼯具:scikit-learn。
希望⽂章对你有所帮助,相关⽂章如下:
⽬录:
⼀.Scikit-learn概念
1.概念知识
2.安装软件
⼆.TF-IDF基础知识
1.TF-IDF
2.举例介绍
三.TF-IDF调⽤两个⽅法
1.CountVectorizer
2.TfidfTransformer
3.别⼈⽰例
⼀. Scikit-learn概念
1.概念知识
Scikit-learn的基本功能主要被分为六个部分:分类(Classification)、回归(Regression)、聚类(Clustering)、数据降维(Dimensionality reduction)、模型选择(Model selection)、数据预处理(Preprocessing)。
Scikit-Learn中的机器学习模型⾮常丰富,包括SVM,决策树,GBDT,KNN等等,可以根据问题的类型选择合适的模型,具体可以参考官⽹⽂档,推荐⼤家从官⽹中下载资源、模块、⽂档进⾏学习。
2.安装软件
Python 2.0我推荐使⽤"pip install scikit-learn"或"easy_install scikit-learn"全⾃动安装,再通
过"from sklearn import feature_extraction"导⼊。
安装时如果出现错误"unknown encoding: cp65001",输⼊"chcp 936"将编码⽅式由utf-8变为简体中⽂gbk。
⼆. TF-IDF基础知识
1.TF-IDF
TF-IDF(Term Frequency-InversDocument Frequency)是⼀种常⽤于信息处理和数据挖掘的加权技术。该技术采⽤⼀种统计⽅法,根据字词的在⽂本中出现的次数和在整个语料中出现的⽂档频率来计算⼀个字词在整个语料中的重要程度。它的优点是能过滤掉⼀些常见的却⽆关紧要本的词语,同时保留影响整个⽂本的重要字词。计算⽅法如下⾯公式所⽰。
其中,式中tfidfi,j表⽰词频tfi,j和倒⽂本词频idfi的乘积。TF-IDF值越⼤表⽰该特征词对这个⽂本的重要性越⼤。
TF(Term Frequency)表⽰某个关键词在整篇⽂章中出现的频率。
IDF(InversDocument Frequency)表⽰计算倒⽂本频率。⽂本频率是指某个关键词在整个语料所有⽂章中出现的次数。倒⽂档频率⼜称为逆⽂档频率,它是⽂档频率的倒数,主要⽤于降低所有⽂档中⼀些常见却对⽂档影响不⼤的词语的作⽤。
下⾯公式是TF词频的计算公式。
其中,ni,j为特征词ti在⽂本dj中出现的次数,是⽂本dj中所有特征词的个数。计算的结果即为某个特征词的词频。
下⾯公式是IDF的计算公式。
其中,|D|表⽰语料中⽂本的总数,表⽰⽂本中包含特征词ti的数量。为防⽌该词语在语料库中不存在,即分母为0,则使⽤作为分母。
2.⽰例
⽰例参考仿造阮⼀峰⼤神的例⼦进⾏简单讲解,推荐⼤家去阅读:
下⾯通过⼀个⽰例进⾏讲解TF-IDF权重计算的⽅法。
假设现在有⼀篇⽂章《贵州的⼤数据分析》,这篇⽂章包含了10000个词组,其中“贵州”、“⼤数据”、“分析”各出现100次,“的”出现500次(假设没有去除停⽤词),则通过前⾯TF词频计算公式,可以计算得到三个单词的词频,即:
现在预料库中共存在1000篇⽂章,其中包含“贵州”的共99篇,包含“⼤数据”的共19篇,包含“分析”的共“59”篇,包
含“的”共“899”篇。则它们的IDF计算如下:
由IDF可以发现,当某个词在语料库中各个⽂档出现的次数越多,它的IDF值越低,当它在所有⽂档中都出现时,其IDF计算结果为0,⽽通常这些出现次数⾮常多的词或字为“的”、“我”、“吗”等,它对⽂章的权重计算起不到⼀定的作⽤。
同时计算TF-IDF值如下:
通过TF-IDF计算,“⼤数据”在某篇⽂章中出现频率很⾼,这就能反应这篇⽂章的主题就是关于“⼤数据”⽅向的。如果只选择⼀个词,“⼤数据”就是这篇⽂章的关键词。所以,可以通过TF-IDF⽅法统计⽂
章的关键词。同时,如果同时计算“贵州”、“⼤数据”、“分析”的TF-IDF,将这些词的TF-IDF相加,可以得到整篇⽂档的值,⽤于信息检索。
TF-IDF算法的优点是简单快速,结果⽐较符合实际情况。缺点是单纯以词频衡量⼀个词的重要性,不够全⾯,有时重要的词可能出现次数并不多。⽽且,这种算法⽆法体现词的位置信息。
三. TF-IDF计算
Scikit-Learn中TF-IDF权重计算⽅法主要⽤到两个类:CountVectorizer和TfidfTransformer。
1.CountVectorizer
CountVectorizer类会将⽂本中的词语转换为词频矩阵,例如矩阵中包含⼀个元素a[i][j],它表⽰j词在i类⽂本下的词频。它通过
fit_transform函数计算各个词语出现的次数,通过get_feature_names()可获取词袋中所有⽂本的关键字,通过toarray()可看到词频矩阵的结果。
代码如下:
1. # coding:utf-8
2. from sklearn. import CountVectorizer
3.
4. #语料
5. corpus = [
6. 'This is the first document.',
7. 'This is the second second document.',
8. 'And the third one.',
9. 'Is this the first document?',
python中文文档0. ]
1. #将⽂本中的词语转换为词频矩阵
2. vectorizer = CountVectorizer()
3. #计算个词语出现的次数
4. X = vectorizer.fit_transform(corpus)
5. #获取词袋中所有⽂本关键词
6. word = _feature_names()
7. print word
8. #查看词频结果
9. array()
输出如下所⽰:
1. >>>
2. [u'and', u'document', u'first', u'is', u'one', u'second', u'the', u'third', u'this']
3. [[0 1 1 1 0 0 1 0 1]
4. [0 1 0 1 0 2 1 0 1]
5. [1 0 0 0 1 0 1 1 0]
6. [0 1 1 1 0 0 1 0 1]]
7. >>>
从结果中可以看到,总共包括9个特征词,即:
[u'and', u'document', u'first', u'is', u'one', u'second', u'the', u'third', u'this']
同时在输出每个句⼦中包含特征词的个数。例如,第⼀句“This is the first document.”,它对应的词频为[0, 1, 1, 1, 0, 0, 1, 0, 1],假设初始序号从1开始计数,则该词频表⽰存在第2个位置的单词“document”共1次、第3个位置的单词“first”共1次、第4个位置的单词“is”共1次、第9个位置的单词“this”共1词。所以,每个句⼦都会得到⼀个词频向量。
2.TfidfTransformer
TfidfTransformer⽤于统计vectorizer中每个词语的TF-IDF值。具体⽤法如下:
1. # coding:utf-8
2. from sklearn. import CountVectorizer
3.
4. #语料
5. corpus = [
6. 'This is the first document.',
7. 'This is the second second document.',
8. 'And the third one.',
9. 'Is this the first document?',
0. ]
1. #将⽂本中的词语转换为词频矩阵
2. vectorizer = CountVectorizer()
3. #计算个词语出现的次数
4. X = vectorizer.fit_transform(corpus)
5. #获取词袋中所有⽂本关键词
6. word = _feature_names()
7. print word
8. #查看词频结果
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论