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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容