英文分词与词性标注
我们最熟悉的nltk大概就是上面这样,而且因为适用场景主要是外文数据。所以没怎么碰nltk,这阵子又重新翻看了《用python做自然语言处理》一书(一年前看的时候因为不能处理中文,就没怎么学),发现稍微处理下中文数据,也是可以用强大的nltk实现的。下面我们开始尝试用nltk对中文数据进行分析,看看能做哪些东西。
一、搜索词语
这一章节,可以让你了解词语上下文查找、相似词语查找、统计词频、制作离散图。
实现上面的功能需要先将文本处理成nltk容易处理的Text类,方便进行文本搜索及计算。
1.1以三体小说为例,初始化Text类
1.2word的上下文
词语word在text中的上下文
1.3word的上下文中最相似的10个词
1.4多个词的上下文
1.5 统计词语频数
1.6离散图
1.7 按照已有风格,随机生成文本
根据text文本风格,按照给定的words随机生成一串文本。
但是不知道为啥,这里我没运行出来。 网上查了下,说可能跟nltk版本有关,待考证。
二、计算词语相似度
计算某个词与其他所有词的相似度这个功能,首先要将数据初始化为ContextIndex类。
三、计算TF-IDF
TF-IDF值反映了一个词代表某类文本的代表性的程度。比如金融类文本中,“股票”具有很强的代表性,相反“美食”几乎不具有代表性。
tf-idf值越大,说明这个词对于这类文本越具有代表性。
3.1 tf-idf学习
TF-IDF,最开始用于信息检索,在信息检索中其计算过程如下
TF-IDF模型的主要思想是:如果词w在一篇文档d中出现的频率高,并且在其他文档中很少出现,则认为词w具有很好的区分能力,适合用来把文章d和其他文章区分开来。该模型主要包含了两个因素:TF,IDF
词频TF(Term Frequency):词w在文档d中出现次数count(w, d)和文档d中总词数size(d)的比值:
逆向文档频率IDF(Inverse Document Frequency):文档总数n与词w所出现文件数docs(w, D)比值的对数:
TF-IDF= TF * IDF =(词频*词权)
TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比。所以,自动提取关键词的算法就很清楚了,就是计算出文档的每个词的TF-IDF值,然后按降序排列,取排在最前面的几个词。
3.2 实战
先将数据初始化为TextCollection类
3.2.1 计算tf
3.2.2 计算idf
3.2.3 计算tf-idf
可见,词语“金融”很能代表 财经类文本,可以作为财经类文本的关键词。
四、Ngrams的实现
nltk.util模块可以帮助我们快速实现Ngrams
4.1 bigrams/trigrams
4.2 ngrams(sequence, n)
将序列生成n连词组序列
4.3 skipgrams(sequence, n, k)
五、probability模块
probability模块中有两个比较好用的类,一个是FreqDist,另一个是ConditionFreqDist类。
FreqDist可以实现词频计算,并制图
ConditionFreqDist可以实现带条件的词频计算,并制图。
5.1 FreqDist类
5.1.1初始化词语列表为FreqDist对象
5.1.2 打印词语列表
5.1.3 打印词语与频数对
5.1.4 词语总数
5.1.5 打印出现次数最多的词语
5.1.6 输出某个词的出现次数
5.1.7 计算词频
5.1.8 绘制前20个词频数累计图
5.2 ConditionFreqDist类
带条件的频率分布类
条件和事件频率分布计算观察到的事件,如文本中出现的词汇。条件频率分布需要事件关联一个条件,所以不是处理一个词序列,而是配对的序列。
每对的形式:(条件,事件)。
六、文本分类之朴素贝叶斯
这里使用nltk提供的数据 male.txt female.txt做为训练出一个模型,输入一个名字,预测一个人名的性别。
训练模型需要使用特征,这里我们假定使用名字最后一个字母作为特征。这里类比一下,比如中文中出现"亭"/"芳",很大的可能性是女名。而“国”、“帅”、"凯"极大的可能性是男名。