Python 自然语言处理——nltk库入门之词性标注

nltk 自然语言处理库源自宾夕法尼亚大学计算机与信息科学系的计算机语言学课程,在数十名优秀的贡献者的帮助下不断壮大,成为最常用的自然语言处理库之一。
下面列出了nltk库中的一些重要的模块
——nltk.corpus
————获取语料库。
——————语料库和词典的标准化接口
——nltk.tokenize,nltk.stem
————字符串处理
——————分词,句子分解,提取主干
——nltk.collocations
————搭配探究
——————t检验,卡方检验,点互信息
——nltk.tag
————词性标识符
——————n-gram,backoff,Brill,HMM,TnT
——nltk.classify,nltk.cluster
————分类
——————决策树,最大熵,朴素贝叶斯,EM,k-means
——nltk.chunk
————分块
——————正则表达式,n-gram,命名实体
——nltk.parse
————解析
——————图表,基于特征,一致性,概率性,依赖项
——nltk.sem,nltk.inference
————语义解释
——————λ演算,一阶逻辑,模型检验
——nltk.metrics
————指标评测
——————精度,召回率,协议系数
——nltk.probability
————概率与估计
——————频率分布,平滑概率分布
——nltk.app,nltk.chat
————应用
——————图形化的关键词排序,分析器,WordNet查看器,聊天机器人
——nltk.toolbox
————语言学领域的工作
——————处理SIL工具箱格式的数据

  • 下载数据集

在本文中将使用nltk自带的twitter sample进行练习,在linux终端或者windows控制台中输入:

$ python -m nltk.downloader twitter_samples

即可下载数据集

  • 下载词性标注器

$ python -m nltk.downloader averaged_perceptron_tagger
  • 开始使用

下面在linux终端分步演示:

$ python
  • 导入数据集,数据集中包含了两万条从推特API中获取到的JSON格式的文本
>>> from nltk.corpus import twitter_samples
  • 查看数据集,其总包含了如下三个文件
>>> twitter_samples.fileids()
['negative_tweets.json', 'positive_tweets.json', 'tweets.20150430-223406.json']
  • 查看其中一个文件
twitter_samples.strings('tweets.20150430-223406.json')

然后你就会被大段文字刷屏了,看到这些文字说明twitter数据集已经下载成功了。

  • 词性标注

接下来我们要使用nltk统计这段文本中出现了多少个形容词,多少个名词。

  • 用Ctrl+D退出python环境,使用vim新建一个名为nlp.py的文件
$ vim nlp.py
from nltk.corpus import twitter_samples
#导入词性标注器
from nltk.tag import pos_tag_sents
#获取字符串
tweets = twitter_samples.strings('positive_tweets.json')
#分词--将句子转化为单词列表
tweets_tokens=twitter_samples.tokenized('positive_tweets.json')
#标注词性
tweets_tagged = pos_tag_sents(tweets_tokens)
#打印前两句
print(tweets_tagged[:2])

退出vim后运行代码,结果如下:

$ python nlp.py
[[('#FollowFriday', 'JJ'), ('@France_Inte', 'NNP'), ('@PKuchly57', 'NNP'), ('@Milipol_Paris', 'NNP'), ('for', 'IN'), ('being', 'VBG'), ('top', 'JJ'), ('engaged', 'VBN'), ('members', 'NNS'), ('in', 'IN'), ('my', 'PRP$'), ('community', 'NN'), ('this', 'DT'), ('week', 'NN'), (':)', 'NN')], [('@Lamb2ja', 'NN'), ('Hey', 'NNP'), ('James', 'NNP'), ('!', '.'), ('How', 'NNP'), ('odd', 'JJ'), (':/', 'NNP'), ('Please', 'NNP'), ('call', 'VB'), ('our', 'PRP$'), ('Contact', 'NNP'), ('Centre', 'NNP'), ('on', 'IN'), ('02392441234', 'CD'), ('and', 'CC'), ('we', 'PRP'), ('will', 'MD'), ('be', 'VB'), ('able', 'JJ'), ('to', 'TO'), ('assist', 'VB'), ('you', 'PRP'), (':)', 'VBP'), ('Many', 'JJ'), ('thanks', 'NNS'), ('!', '.')]]

每个tuple的第二个元素就是词性,在nltk中,JJ是形容词(-_-|||),NN是单数名词,NNS是复数名词。

  • 统计词频

from nltk.corpus import twitter_samples
#导入词性标注器
from nltk.tag import pos_tag_sents
#获取字符串
tweets = twitter_samples.strings('positive_tweets.json')
#分词--将句子转化为单词列表
tweets_tokens=twitter_samples.tokenized('positive_tweets.json')
#标注词性
tweets_tagged = pos_tag_sents(tweets_tokens)
JJ_count = 0
NN_count = 0
for tweet in tweets_tagged:
        for pair in tweet:
                tag = pair[1]
                if tag == 'JJ':
                        JJ_count += 1
                elif tag == 'NN':
                        NN_count += 1
print('总计形容词:%d 个' % JJ_count)
print('总计单数名词:%d个' % NN_count)

  • 最终结果

$ python nlp.py
总计形容词:6094 个
总计单数名词:13180个

总结:
最近在学习自然语言处理,看了很多中文和英文教程,发现中文博主和英文博主最大的区别就是,很多中文博主即便所写入门教程也喜欢把自己觉得简单的步骤跳过去,让初学者看得有点懵。
我以后的文章会尽量把所有可能出错的步骤描述清晰,方便大家交流。

参考:《python自然语言处理》
博客文章 :https://www.digitalocean.com/community/tutorials/how-to-work-with-language-data-in-python-3-using-the-natural-language-toolkit-nltk

你可能感兴趣的:(Python 自然语言处理——nltk库入门之词性标注)