2.2条件频率分布
条件频率分布是频率分布的集合,每个频率分布有一个不同的条件。这个条件通常是文本的类别。当预料分为几类时,可以计算每个类别独立的领率分布。就可以研究类别之间的系统性差异。
2.2.1按照文本计数词汇
import nltk
from nltk.corpus import brown
cfd = nltk.ConditionalFreqDist(
(genre,word)
for genre in brown.categories()
for word in brown.words(categories = genre)
)
#对于每个问题,遍历文体中的每个词以产生文体与词的配对
genre_word = [(genre,word)
for genre in ['news','romance']
for word in brown.words(categories = genre)]
print(len(genre_word)) #一共产生了多少配对
print(genre_word[:4]) #news与word的配对
print(genre_word[-4:]) #romance与word的配对
cfd = nltk.ConditionalFreqDist(genre_word)
print(cfd) #确认有两个条件
print(cfd.conditions()) #输出具体的两个条件是什么
print(cfd['news'])
print(cfd['romance'])
print(list(cfd['romance']))
print(cfd['romance']['could'])
2.2.2绘制分布图和分布表
ConditionalFreqDist除了提供组合两个或两个以上的频率分布及更容易初始化功能之外,还提供了制表和绘图的功能
例1:绘制分布图
import nltk
form nltk.corpus import inaugural
cfd = nttk.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
例2:绘制分布表
import nltk
from nltk.corpus import udhr
languages = ['Chickasaw','English','German_Deutsch',
'Greenlandic_Inuktikut','Hungarian_Magyar','Ibibio_Efik']
cfd = nltk.ConditionalFreqDist(
(lang,len(word))
for lang in languages
for word in udhr.words(lang + '-Latin1')
)
cfd.tabulate(conditions = ['English','German_Deutsch'],
samples = range(10),cumulative = True)
2.2.3使用双连词生成随机文本
sent = ['In','the','beginning','God','created','the','heaven','and','the','earth','.']
print(nltk.bigrams(sent)) #建立了一个连续的词对链表
例3:产生随机文本:将每个词作为一个条件,对于每个词都有效的依据后续词的创建频率分布
generate_model()函数包含简单的循环以生成文本
import nltk
def generate_model(cfdist,word,num=15):
for i in range(num):
print