自然语言处理2——条件频率分布

前面我们学习过使用FreqDist(textlist)函数来计算textlist链表中每个项目出现的次数,现在我们推广这一想法。

当语料文本分为几类(文体、主题、作者)时,可以计算每个类别独立的频率分布,这样就可以研究类别之间的系统性差异。——nltk.ConditionalFreqDist来实现、

条件频率分布是频率分布的集合,每个频率分布有一个不同的‘条件’(通常为文本的类别)——(条件,事件)的形式。如果我们按照问题处理整个布朗语料库,将得到15个条件(一个文体一个条件)和1161192个事件(一个词一个事件)

【按文体计数词汇】

>>>from nltk.corpus import brown
>>>cfd=nltk.ConditionalFreqDist((genre,word) for genre in brown.categories()
                                              for word in brown.words(categories=genre)  )

上面两行代码就是对brown语料库按照问题进行统计单词的数量,我们也可以只看部分问题,例如:新闻和言情。

>>>genre_word=[(genre,word) for genre in [‘news‘,‘romance‘] for word in brown.words(categories=genre)]>>>len(genre_word)  170576

上面生成的genre_word前面配对会是(‘news‘,word)的形式,而后面会是(‘romance‘,word)的形式

现在我们就可以对此链表创建一个ConditionalFreqDist:

>>>cfd=nltk.ConditionalFreqDist(genre_word)
>>>cfd.conditions()
[‘news‘,‘romance‘]

这两个条件他们每一个只有一个频率分布。要访问某个条件的某个单词的频率,只需和访问字典元素一样操作即可:例如访问‘Romance‘下的‘could‘频率

>>>cfd[‘romance‘][‘could‘]
193

【绘制分布图和分布表】

绘制分布图:cfd.plot()

例子:绘制特定演讲中出现[‘america‘,‘citizen‘]的次数随时间变化情况

from nltk.corpus import inaugural
cfd=nltk.ConditionalFreqDist((target,fileid[:4]) for fileid in inaugural.fileids() for w in inaugural.words(fileid)
			       for target in [‘america‘,‘citizen‘] if w.lower().startswith(target))

cfd.plot()

绘制分布表:cfd.tabulate()[上节以及使用过]

注意在使用plot和tabulate时候可以使用condition=参数来制定显示哪些条件。同样也可以使用samples=参数来限制要显示的样本。

例如:我们只想看英语和德语中单词长度小于10个字符的词汇个数:

from nltk.corpus import udhr
lan=[‘Chickasaw‘,‘English‘,‘German_Deutsch‘,‘Greenlandic_Inuktikut‘,‘Hungarian_Magyar‘,‘Ibibio_Efik‘]
cfd=nltk.ConditionalFreqDist((lang,len(word) ) for lang in lan for word in udhr.words(lang+‘-Latin1‘))

cfd.tabulate(conditions=[‘English‘,‘German_Deutsch‘],samples=range(10),cumulative=True)

结果:

【使用双连词生成随机文本】

我们可以使用条件频率分布创建一个双连词表。bigrams()函数能接受一个词汇链表,并且建立起一个连续的词对链表

sent=[‘In‘,‘the‘,‘begining‘,‘God‘,‘created‘,‘the‘,‘heaven‘,‘and‘,‘the‘,‘earth‘,‘.‘]
print(list(nltk.bigrams(sent)))

输出:[(‘In‘, ‘the‘), (‘the‘, ‘begining‘), (‘begining‘, ‘God‘), (‘God‘, ‘created‘), (‘created‘, ‘the‘), (‘the‘, ‘heaven‘), (‘heaven‘, ‘and‘), (‘and‘, ‘the‘), (‘the‘, ‘earth‘), (‘earth‘, ‘.‘)]

例2-1.产生随机文本:程序获得《创世纪》文本中所有的双连词,然后构造一个条件频率分布来记录哪些词汇最有可能会跟在给定次后面。generate_model()函数适用这些数据和种子词来产生随机文本。

def generate_model(cfdist,word,num=15):
    for i in range(num):
        print (word,)
        word=cfdist[word].max()

text=nltk.corpus.genesis.words(‘english-kjv.txt‘)
bigrams=nltk.bigrams(text)
cfd=nltk.ConditionalFreqDist(bigrams)

测试living后面最长跟的双连词:

generate_model(cfd,‘living‘)

结果为:living,creature,that,he,said,and,the,land,of,the,land,of,the,land

发现在循环中卡住了。。

条件频率分布是一个对许多NLP任务都有用的数据结构。

时间: 2024-10-07 17:32:17

自然语言处理2——条件频率分布的相关文章

自然语言处理(3)之条件频率分布

自然语言处理(3)之条件频率分布 条件频率分布式频率分布的集合,每个频率分布有一个不同的条件. 从下面的例子就可以看出,cfd就是两个条件(news,romance)的频率分布集合 1 >>> cfd=nltk.ConditionalFreqDist( 2 ... (genre,word) 3 ... for genre in ['news','romance'] 4 ... for word in brown.words(categories=genre)) 5 >>>

Python自然语言工具包(NLTK)入门

在本期文章中,小生向您介绍了自然语言工具包(Natural Language Toolkit),它是一个将学术语言技术应用于文本数据集的 Python 库.称为“文本处理”的程序设计是其基本功能:更深入的是专门用于研究自然语言的语法以及语义分析的能力. 鄙人并非见多识广, 语言处理(linguistic processing) 是一个相对新奇的领域.如果在对意义非凡的自然语言工具包(NLTK)的说明中出现了错误,请您谅解.NLTK 是使用 Python 教学以及实践计算语言学的极好工具.此外,计

《Python自然语言处理》

<Python自然语言处理> 基本信息 作者: (美)Steven Bird    Ewan Klein    Edward Loper 出版社:人民邮电出版社 ISBN:9787115333681 上架时间:2014-6-13 出版日期:2014 年6月 开本:16开 页码:508 版次:1-1 所属分类:计算机 > 软件与程序设计 > Python 更多关于>>><Python自然语言处理> 内容简介 书籍 计算机书籍 自然语言处理(natural

《用Python进行自然语言处理》归纳一

1.自然语言工具包(NLTK) NLTK 创建于2001 年,最初是宾州大学计算机与信息科学系计算语言学课程的一部分.从那以后,在数十名贡献者的帮助下不断发展壮大.如今,它已被几十所大学的课程所采纳,并作为许多研究项目的基础.表P -2 列出了NLTK 的一些最重要的模块. 这本书提供自然语言处理领域非常方便的入门指南.它可以用来自学,也可以作为自然语言处理或计算语言学课程的教科书,或是人工智能.文本挖掘.语料库语言学课程的补充读物.本书的实践性很强,包括几百个实际可用的例子和分级练习. 本书基

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

主要总结一下简单的工具:条件频率分布.正则表达式.词干提取器和归并器. 条件分布频率 <自然语言学习>很多地方都用到了条件分布频率,nltk提供了两种常用的接口:FreqDist 和 ConditionalFreqDist .后面很多都会用到这两种方法,特别是第二个.因为第二个更符合定义,会智能的找到条件.然后根据绘图的库,可以做出来很漂亮的图形. 简单的FreqDist 函数接收list类型的参数后,会自动创建字典,生成对应的值为键值,而value就是元素的次数. from nltk imp

马尔可夫模型自动生成文章

马尔可夫链是一个随机过程,在这个过程中,我们假设前一个或前几个状态对预测下一个状态起决定性作用.和抛硬币不同,这些事件之间不是相互独立的.通过一个例子更容易理解. 想象一下天气只能是下雨天或者晴天.也就是说,状态空间是雨天或者晴天.我们可以将马尔可夫模型表示为一个转移矩阵,矩阵的每一行代表一个状态,每一列代表该状态转移到另外一个状态的概率. 然而,通过这个状态转移示意图更容易理解. 换句话说,假如今天是晴天,那么有90%的概率明天也是晴天,有10%的概率明天是下雨天. 文章生成器 马尔可夫模型有

&lt;NLP with python&gt;笔记:三

Accessing Text Corpora and Lexical Resources(文本语料库和词汇资源) 常用文本预料和词汇资源,如何通过python访问这些资源. 2.1 Accessing Text Corpora 语料:大量的文本资源. 访问语料的三个接口: raw(fileids) /sents(fileids) / words(fileids) Gutenberg Corpora nltk.corpus.gutenberg,通过raw(fileid)/sents(fileid)

名字尾字母与性别

Figure 2-7. Conditional frequency distribution: This plot shows the number of female and male names ending with each letter of the alphabet; most names ending with a, e, or i are female; names ending in h and l are equally likely to be male or female

数学之路(机器学习实践指南)-文本挖掘与NLP(5)

#条件频率,每个词条在不同分类中出现的频率 print "------------------" cfd=nltk.ConditionalFreqDist(samplewords) fdist=cfd[u'财经'] for word in fdist: print word print "---------流动性出现次数-----------" print cfd[u'财经'][u'流动性'] print "----------条件:分类---------