python+NLTK 自然语言学习处理二:文本

在前面讲nltk安装的时候,我们下载了很多的文本。总共有9个文本。那么如何找到这些文本呢:

text1: Moby Dick by Herman Melville 1851

text2: Sense and Sensibility by Jane Austen 1811

text3: The Book of Genesis

text4: Inaugural Address Corpus

text5: Chat Corpus

text6: Monty Python and the Holy Grail

text7: Wall Street Journal

text8: Personals Corpus

text9: The Man Who Was Thursday by G . K . Chesterton 1908

直接输入它们的名字就可以了

print text1

print text2

E:\python2.7.11\python.exe
E:/py_prj/NLTK_study/chapter1.py

<Text: Moby Dick
by Herman Melville 1851>

<Text: Sense and
Sensibility by Jane Austen 1811>

我们还可以对文本中的单词进行查找。

print text1.concordance(‘monstrous‘)

结果如下,找到了11个匹配的地方

Displaying 11 of 11 matches:

ong the former , one was of a most monstrous size . ... This came towards us ,

ON OF THE PSALMS . " Touching that monstrous bulk of the whale or ork we have r

ll over with a heathenish array of monstrous clubs and spears . Some were thick

d as you gazed , and wondered what monstrous cannibal and savage could ever hav

that has survived the flood ; most monstrous and most mountainous ! That Himmal

they might scout at Moby Dick as a monstrous fable , or still worse and more de

th of Radney .‘" CHAPTER 55 Of the Monstrous Pictures of Whales . I shall ere l

ing Scenes . In connexion with the monstrous pictures of whales , I am strongly

ere to enter upon those still more monstrous stories of them which are to be fo

ght have been rummaged out of this monstrous cabinet there is no telling . But

of Whale - Bones ; for Whales of a monstrous size are oftentimes cast up dead u

None

如果我们想知道单词出现在文本的那些位置,比如是在文本开始处多些呢,还是在文本末尾开始多些。这里就用到dispersion_plot函数。Text4的名称为Inaugural Address Corpus,中文意思是就职演说的意思。因此在text4中有整理的美国总统就职演说的文本。从里面的文本来看有从1789年到2009年的总统就职演说

我们来看下citizens,democracy,freedom,duties,American出现的位置

print len(text4)
text4.dispersion_plot(["citizens","democracy","freedom","duties","American"])
E:\python2.7.11\python.exe E:/py_prj/NLTK_study/chapter1.py

145735

首先text4的长度为145735。上面的散点图就是生成的结果。注意,要得到这个散点图必须先安装Numpy以及Matplotlib。否则在画图的时候会报错。

从上面的这个散点图我们可以看到citizens是出现得最多的地方。Citizens的中文意思是市民,公民的意思。这也符合美国的一贯政治风格嘛。总统是在现场做演说自然首先就得来和选民们拉近关系。套套近乎嘛。而随着演讲的进行,American和freedom之类的词语就开始多起来了。和选民和拉近关系了后,后面就要开始普世价值以及爱国情绪煽动了。什么捍卫人类的freedom,为了American的强大之类的话语。

我们再多来点词汇看看:我们加入了china,tax,security,immigrant。分别是中国,税收,安全,移民

text4.dispersion_plot(["citizens","democracy","freedom","duties","American","china","tax",‘security‘,‘immigrant‘])

从上面的图可以看到明显少了的很多,除了security和tax有一些之外。诸如china,immigrant这些词基本就没出现。其实我们加入的china,tax,security,immigrant这些词语都是一些具体国家事务的词。但是在就职演说看不到半点的描述。因此我们可以认为总统的就职演说重点不是施政纲领,哪是在竞选的时候才会提到。就职演说就是个口才show。

如果想文本里面都有哪些单词,可以用set(text4)查看在总统的就职演说中出现了哪些词。由于量太大,这里就不列举出来了。既然知道了总的词数个数以及词的汇总,那么我们可以来计算每个词出现的频度了。从下面结果看到在text4中每个单词的出现频率平均是14次。

print ‘the length of text4 is %d‘ % len(text4)
print len(text4) / len(set(text4))

E:\python2.7.11\python.exe E:/py_prj/NLTK_study/chapter1.py

the length of text4 is 145735

14

那么在这些演讲中这些词出现的次数是多少呢。我们以上图的citizens为例。可以看到citizizens出现了230次。

print text4.count(‘citizens‘)
E:\python2.7.11\python.exe E:/py_prj/NLTK_study/chapter1.py

230

那如果我们要找出在总统就职演说中出现最多的词该怎么办呢。是通过对单词一个个的计数来得出结果? 那样太费时间了。NLTK提供了专门的函数做到这一点。

fdist1=FreqDist(text4)
vocabulary1=fdist1.keys()
print vocabulary1[:10]
fdist1.plot(10,cumulative=True)
FreqDist是一个统计频率分布的函数,通过fdist1.plot我们可以画出用得最多的10个单词的分布。

我们可以细化一点,如何统计次数超过500次的单词呢。

fdist1=FreqDist(text4)
list=[w for w in set(text4) if fdist1[w] > 500]

[u‘.‘, u‘has‘, u‘people‘, u‘for‘, u‘I‘, u‘with‘, u‘as‘, u‘to‘, u‘be‘, u‘by‘, u‘this‘, u‘we‘, u‘the‘, u‘not‘, u‘that‘, u‘a‘, u‘The‘, u‘;‘, u‘,‘, u‘is‘, u‘it‘, u‘in‘, u‘have‘, u‘our‘, u‘and‘, u‘its‘, u‘of‘, u‘or‘, u‘all‘, u‘are‘, u‘from‘, u‘their‘, u‘which‘, u‘will‘]

这些词的次数都超过500词,可以认为是高频词。

list=[w for w in set(text4) if len(w) > 15].结果如下:

[u‘internationality‘, u‘misappropriation‘, u‘irresponsibility‘, u‘enthusiastically‘, u‘disqualification‘, u‘misrepresentation‘, u‘misunderstanding‘, u‘antiphilosophists‘, u‘responsibilities‘, u‘contradistinction‘, u‘transcontinental‘, u‘unconstitutional‘, u‘discountenancing‘, u‘sentimentalizing‘, u‘uncharitableness‘, u‘constitutionally‘, u‘instrumentalities‘, u‘RESPONSIBILITIES‘

还可以通过print fdist1.max()来查看出现最多的单词。结果是the。
要计算单词的频率可以通过print fdist1.freq(‘internationality‘)来得到

				
时间: 2024-10-10 16:40:29

python+NLTK 自然语言学习处理二:文本的相关文章

python+NLTK 自然语言学习处理四:获取文本语料和词汇资源

在前面我们通过from nltk.book import *的方式获取了一些预定义的文本.本章将讨论各种文本语料库 1 古腾堡语料库 古腾堡是一个大型的电子图书在线网站,网址是http://www.gutenberg.org/.上面有超过36000本免费的电子图书,因此也是一个大型的预料库.NLTK也包含了其中的一部分 .通过nltk.corpus.gutenberg.fileids()就可以查看包含了那些文本. ['austen-emma.txt', 'austen-persuasion.tx

python+NLTK 自然语言学习处理五:词典资源

前面介绍了很多NLTK中携带的词典资源,这些词典资源对于我们处理文本是有大的作用的,比如实现这样一个功能,寻找由egivronl几个字母组成的单词.且组成的单词每个字母的次数不得超过egivronl中字母出现的次数,每个单词的长度要大于6. 要实现这样的一个功能,首先我们要调用FreqDist功能.来得到样本字母中各个字母出现的次数 puzzle_letters=nltk.FreqDist('egivrvonl') for k in puzzle_letters: print(k,puzzle_

NLTK学习笔记(二):文本、语料资源和WordNet汇总

[TOC] 语料库基本函数表 示例 描述 fileids() 语料库中的文件 fileids([categories]) 对应分类中的语料库文件 categories() 语料库的分类 categories([fileids]) 文件对应的语料库分类 raw(fileids=[f1,f2..],categories=[c1,c2...]) 对应文件和分类中原始内容.参数可以式空 words(fileids=[f1,f2..],categories=[c1,c2...]) 对应文件和分类的词汇.参

Python与自然语言处理(二)基于Gensim的Word2Vec

继续学习摸索,看到很多博客都在研究Word2Vec,感觉挺有意思,我也来尝试一下. 实验环境:Python3,Java8 Word2Vec的输入是句子序列,而每个句子又是一个单词列表,由于没有这样结构的现成输入,所以决定自己动手对原始语料进行预处理. NLPIR是一个汉语分词系统,挺感谢张华平博士,便利了我们的文本处理工作.下载地址:http://ictclas.nlpir.org/newsdownloads?DocId=389 这里还有一个自然语言处理与信息检索共享平台(感觉挺好的,有资料,还

python全栈学习总结二:数字、字符串、列表、元组、字典重要特点及方法

一 python中数据类型 整形:int 字符串:str 列表:list 元组:tuple 字典:dict 布尔值:bool 浮点型:float 一切皆对象,在python中,所有的数据类都是看做对象,故所有的类型名称都是类,通过类来建立对象,每个类中都有相应的方法,下面我们通过总结上面其中数据类型的特点以及常用的方法,来加深我们这些数据"类"的认识和理解. 二 各种数据类型总结 1 整形int 定义:age = 10 转换:value = int('158')  把字符串'158'转

Python Random函数学习(二)

一.Python Random模块常用方法和实例 random.random 描述:random.random()用于生成一个0到1到随机浮点数:0<=n<1.0 random.uniform 描述:random.uniform(a,b),用于生成一个指定范围内到浮点数,两个参数其中一个是上限,一个是下限.如果a>b,则生成到随机是n:a<=n<=b.如果a<b,则b<=n<=a 代码如下: print random.uniform(10,20) # 12.

RabbitMQ(python实现)学习之二:Producer发送消息至多个消息队列queue(广播消息)

1.1本部分内容简介 这部分我们将要发送一个消息到多个Consumer,这部分称之为"publish/subscribe" 我们实现的方式就是发送端,发送一个消息,与此同时,多个接收端将同时接收到消息并打印在屏幕上面. 1.2exchange简介 在前面的博文中,我们的讲解是:发送端发送消息至消息队列,接收端从消息队列获取消息.现在我们来介绍一下rabbitmq的完整消息传送模型. >Producer:用来发送消息的应用程序 >queue:用来存储消息的缓存 >Con

python re模块学习(二)

正则匹配之分组匹配 去已经匹配到的数据中再次提取数据 # match 分组 origin = 'has sdfsx x' # 普通正常正则匹配 r = re.match(r'h\w+', origin) print(r.group()) ==> has # 分组匹配 r = re.match(r'h(\w+)', origin) # 这里我加了一个圆括号 print(r.groups()) ==> ('as',) # 这里就会显示,我括住的都匹配到了哪些 # 分组字典 r = re.match

Python 自动化脚本学习(二)

流程控制 布尔值 temp = True temp = False 比较符号 == != < <= > >= 与或非 and or not 混合布尔的比较 (4<5)and (5<6) 流程控制元素 条件语句 if else 代码块 程序执行 流程描述 if else if name= John: print("my name is John"); esle: print("my name is not John"); elif(