nltkConditionalFreDistribution - juedaiyuer/researchNote GitHub Wiki
条件频率分布
条件频率分布是频率分布的集合,每个频率分布有一个不同的‘条件’(通常为文本的类别)——(条件,事件)的形式。如果我们按照问题处理整个布朗语料库,将得到15个条件(一个文体一个条件)和1161192个事件(一个词一个事件)
1. 按文体统计词汇
遍历文体,产生配对。对于每个文体,遍历文本中的每个词以产生文体与词的配对。这里以'新闻'和'言情'两种文体为例
>>> import nltk
>>> from nltk.corpus import brown
>>> genre_word = [(genre, word)
... for genre in ['news', 'romance']
... for word in brown.words(categories=genre)]
>>> len(genre_word)
170576
使用此配对链表创建一个ConditionalFreqDist,并保存
>>> cfd = nltk.ConditionalFreqDist(genre_word)
>>> cfd
<ConditionalFreqDist with 2 conditions>
>>> cfd.conditions()
['romance', 'news']
>>> cfd['news']
FreqDist({u'the': 5580, u',': 5188, u'.': 4030, u'of': 2849, u'and': 2146, u'to': 2116, u'a': 1993, u'in': 1893, u'for': 943, u'The': 806, ...})
>>> cfd['romance']
FreqDist({u',': 3899, u'.': 3736, u'the': 2758, u'and': 1776, u'to': 1502, u'a': 1335, u'of': 1186, u'``': 1045, u"''": 1044, u'was': 993, ...})
要访问某个条件的某个单词的频率,只需和访问字典元素一样操作即可:例如访问'Romance'下的'could'频率
>>> cfd['romance']['could']
193
绘制分布图和分布表
除了组合两个或两个以上的频率分布及更容易初始化之外,ConditionalFreqDist还为制表和绘图提供了一些有用的方法。