NLTK——NLP编程的基础工具

原创 2015年07月06日 22:29:13

1.NLTK入门

1.下载NLTK,可用pip install nltk,anaconda本身已经有NLTK了,可直接使用。

2.下载NLTK的范例文本,

import nltk
nltk.download()
#下载Collections下的book

3.使用基本函数

3.1 concordance 查找指定词

from nltk.book import *
text1.concordance("monstrous")

3.2 similar 查找与monstrous相关的词,比如出现的上下文相同

text1.silimar("monstrous")

3.3 common_contexts 共用2个或2个以上词汇的上下文

text2.common_contexts(["monstrous","very"])

3.4 dispersion_plot 单词在文章中的分布

text4.dispersion_plot(["citizens","demoracy","freedom","duties","America"])
//需要用到Numpy和Matplotlib,好像Anaconda都有的

这里写图片描述
3.5 generate 产生随机文本

text3.generate()//重复使用源文本中常见的单词和短语,从而使我们能感觉到它的风格和内容。

3.6.1 计数词汇

len(text3)//创世纪有44764个单词和标点符号,也被称作标识符
sorted(set(text3))//用sorted包裹set(text3),得到一个词汇条目的排序表,以各种标点符号开始,然后接着是以A开头的词汇。大写单词排在小写单词前面。通过求集合中各种项目的个数,可以间接获得词汇表的大小。用len获得。
len(set(text3))//2789

3.6.2 测量词汇丰富度

print len(text3)/len(set(text3))  #16.050197... 每个词平均出现了16次

3.6.3 count 计算一个词在文本中出现的次数,和百分比

text3.count("smote")              #5
100*text4.count('a')/len(text4)   #1.4643....

4.将文本当做词链表

链表的连接,append添加元素,索引(下标),index,切片

sent1=['Call','me','Ishmael','.']
print len(sent1)   #4
lexical_diversity(sent1)  #1.0  词汇分离图?
sent2=['The','family','of','Dashwood','had','long','been','settled','in','Sussex','.']
sent3=['In','the','beginning','God','created','the','heaven','and','the','earth','.']
print sent2+sent3  #连接,将多个链表组合为一个链表
#['The', 'family', 'of', 'Dashwood', 'had', 'long', 'been', 'settled', 'in', 'Sussex', '.', 'In', 'the', 'beginning', 'God', 'created', 'the', 'heaven', 'and', 'the', 'earth', '.']

sent1.append('some')
print sent1  #sent1=['Call','me','Ishmael','.','some']
print text4[173]  #'awaken'
print text4.index('awaken')   #173  第一次出现的位置
#切片(获取子链表)
print text5[16715:16735]
print text6[1600:1625]
#字符串
name='Monty'
print name[0]     #'M'
print name[:4]    #'Mont'
#乘法和加法
print name*2      #'MontyMonty'
print name+'!'    #'Monty!'
#词链表组合成单个字符串,字符串拆分成词链表
''.join(['Monty',' Python'])    #'Monty Python'
'Monty Python'.split()          #['Monty','Python']
print 'Monty Python'.split('y') #['Mont', ' P', 'thon']

5.简单的统计

5.1 利用FreqDist寻找《白鲸记》中最常见的50个词
fdist1 = FreqDist(text1)
print fdist1                        #<FreqDist with 19317 samples and 260819 outcomes>
vocabulary1 = fdist1.keys()
print vocabulary1[:50]
fdist1['whale']                     #906
fdist.plot(50,cumulative=True)      #累积分布图

最常用50个单词的累积频率图,这些词占了所有标识符的近一半
最常用50个单词的累积频率图,这些词占了所有标识符的近一半
高频词对我们并没有什么帮助。(全是 a,the ,of, to 这种)

5.2 统计只出现一次的词:hapaxes

fdist1.hapaxes()           #9000多个,然并卵

5.3 细粒度的选择词

#找出文本词汇表中长度超过15的词
V=set(text1)
long_words=[w for w in V if (len(w)>15)
sorted(long_words)

#找出文本词汇表中长度超过7,出现频率超过7次的词
fdist5=FreqDist(text5)
sorted([w for w in set(text5) if len(w)>7 and fdist5[w]>7])

6. 词语搭配和双连词

6.1 提取双连词 bigrams(),collocations()

bigrams(['more','is','said','than','done'])

text4.collocations()
text8.collocations()

7.计算其他东西(如词长)

[len(w) for w in text1]
fdist=FreqDist([len(w) for w in text1])
print fdist         #260819
print fdist.keys()        #把词长从频率高到少排列,keys函数似乎没有作用
print fdist.max(),fdist[3],fdist.freq(3)   # 3,50223, 0.1925588...

8. NLTK中频率分布定义的函数

例子 描述
fdist=FreqDist(samples) 创建包含指定样本的频率分布
fdist.inc(sample) 增加样本
fdist[‘monstrous’] 计数给定样本出现的次数
fdist.freq(‘monstrous’) 给定样本的频率
fdist.N() 样本总数
fdist.keys() 以频率递减顺序排序的样本链表
for sample in fdist: 以频率递减的顺序遍历样本
fdist.max() 数值最大的样本
fdist.tabulate() 绘制频率分布表
fdist.plot() 绘制频率分布图
fdist.plot(cumulative=True) 绘制累计频率分布图
fdist < fdist2 测试样本在fdist中出现的频率是否小于fdist2

9. 决策和控制

print "sent7:",sent7
print [w for w in sent7 if len(w)<4]
print [w for w in sent7 if len(w)<=4]
print [w for w in sent7 if len(w)==4]

9.1词汇比较运算符

函数 含义
s.startswith(t) 测试s是否以t开头
s.endswith(t) 测试是否以t结尾
t in s 测试s中是否含有t
s.islower() 测试s中所有字符是否都是小写字母
s.isupper() 测试s中所有字符是否都是大写字母
s.isalpha() 测试s中所有字符是否都是字母
s.isalnum() 测试s中是否都是字母或数字
s.isdigit() 测试s中所有字符是否都是数字
s.istitle() 测试s是否首字母大写(s中所有的词都首字母大写)
print sorted([w for w in set(text1) if w.endswith('ableness')])
print sorted([term for term in set(text4) if 'gnt' in  term])
print sorted([item for item in set(text6) if item.istitle()])
print sorted([item for item in set(sent7) if item.isdigit()])

9.2对每个元素进行操作
表达形式为[f(w) for …] 或 [w.f() for…] f是一个函数用来计算词长或将字母转换为大写等

[len(w) for w in text1]
[w.upper() for w in text1]

len(text1)                                        #260819
len(set(text1))                                   #19317
len(set([word.lower() for word in text1]))         #17231,不重复计算大小写不同的词
len(set([word.lower() for word in text1 if word.alpha()]))   #16948 过滤掉非字母元素

tricky=sorted([w for w in set(text2) if 'cie' in w or 'cei' in w])
for word in tricky:
    print word,

10. 自动理解自然语言

10.1 词义消歧
10.2 指代消解
等等

网易2017年实习生NLP岗编程题--赶去公司

终于到周末啦!小易走在市区的街道上准备找朋友聚会,突然服务器发来警报,小易需要立即回公司修复这个紧急bug。假设市区是一个无限大的区域,每条街道假设坐标是(X,Y),小易当前在(0,0)街道,办公室在...
  • u014293234
  • u014293234
  • 2017年03月26日 20:37
  • 774

不是你无法入门自然语言处理(NLP),而是你没找到正确的打开方式

AI研习社按:本文作者 Mr.Scofield,原文载于作者个人博客,雷锋网已获授权。 〇、序 之前一段时间,在结合深度学习做 NLP 的时候一直有思考一些问题,其中有一个问题算是最核心一...
  • AMDS123
  • AMDS123
  • 2017年06月04日 17:19
  • 1381

NLTK学习笔记(三):NLTK的一些工具

主要总结一下简单的工具:条件频率分布、正则表达式、词干提取器和归并器。 条件分布频率 《自然语言学习》很多地方都用到了条件分布频率,nltk提供了两种常用的接口:FreqDist 和 ...
  • e62ces0iem
  • e62ces0iem
  • 2017年06月13日 21:18
  • 221

《python自然语言处理》笔记---chap1 语言处理与python

>>> from nltk.book import * *** Introductory Examples for the NLTK Book *** Loading text1, ..., te...
  • u010454729
  • u010454729
  • 2014年03月27日 20:07
  • 1596

NLTK学习笔记——Classify模块(2)

注:本文为实战过程作铺垫,因为参考原文是英文的,每看一遍都要琢磨一遍单词和语法,因此总结一下原文的过程,以备忘之用。本文主要介绍原文中利用NLTK进行twitter语句分类的过程,在下一节就记录本人的...
  • cangqiong112758
  • cangqiong112758
  • 2016年03月03日 20:19
  • 707

NLTK——NLP编程的基础工具

1.NLTK入门1.下载NLTK,可用pip install nltk,anaconda本身已经有NLTK了,可直接使用。2.下载NLTK的范例文本,import nltk nltk.download...
  • power0405hf
  • power0405hf
  • 2015年07月06日 22:29
  • 1290

Python自然语言处理(NLP)入门教程(NLTK库的安装和使用)

原文地址:https://my.oschina.net/jhao104/blog/1545325 本文简要介绍Python自然语言处理(NLP),使用Python的NLTK库。NLTK是Python的...
  • tz_zs
  • tz_zs
  • 2017年10月02日 17:47
  • 924

NLTK学习笔记——信息抽取(1)

信息抽取的内容在《Natural Language Processing》第7章,对于文本的信息抽取,命名实体及其关系的识别是至关重要要的,信息抽取分为以下几个步骤: 1. 文本切分,将strin...
  • cangqiong112758
  • cangqiong112758
  • 2016年03月03日 20:37
  • 2073

【segmentation & parsing & dependency parsing】nltk调用stanford NLP工具包

环境:win 7 + python 3.5.2 + nltk 3.2.1Chinese word segmentation前期准备 下载stanford-segmenter-2015-12-09(2...
  • mengmengz07
  • mengmengz07
  • 2017年05月15日 22:13
  • 753

Python自然语言处理(一)--利用NLTK自带方法完成NLP基本任务

Python自然语言处理(一)--利用NLTK自带方法完成NLP基本任务 liushulinle 2014-01-27 14:01:58 点击: 29167 | 收藏 9 ...
  • liyaoqing
  • liyaoqing
  • 2017年02月09日 18:14
  • 377
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NLTK——NLP编程的基础工具
举报原因:
原因补充:

(最多只允许输入30个字)