条件和事件
在计算各种时间(单词出现频率等)。条件频率分布都需要给它们关联上一个条件,所以处理的就是一个配对的序列,对应的形式(条件,事件)
按照文本计数词汇
使用nltk包下的ConditionalFreqDist(条件频率分布)统计词汇数就很方便
import nltk
from nltk.corpus import brown
#使用产生式初见一个由文体和单词组成的元组列表
genre_word =[
(genre,word)
for genre in ['news','romance']
for word in brown.words(categories=genre)
]
#使用条件频率分布构建文本的频率分布
cfd = nltk.ConditionalFreqDist(genre_word)
print(cfd)
print(cfd.conditions())
#news 和 romance都是一个频率分布
print("news分类下的单词数",cfd['news'])
#输出单词
print(list(cfd['romance']))
#统计其中的单词数
sum = cfd['romance']['love']
print("浪漫主题下的love这个单词出现;",sum)
绘制分布图和直方图
ConditionalFreqDist为绘制表和绘制
import nltk
from nltk.corpus import brown
cfd = nltk.ConditionalFreqDist(
#以文件表示符的前4个以及'america'或者'citizen'为元组创建条件频率分布
(target,fileid[:4])
for fileid in brown.fileids() #文件标识
for word in brown.words(fileid) #通过文件标识获取文件中的所有单词
for target in ['america','citizen'] #目标单词
if word.lower().startswith(target) #是否以目标单词开头
)
print(brown.fileids()) #输出所有的标识符
print(cfd.conditions()) #条件
print(cfd['citizen'])
for fileid in brown.fileids():
print(cfd['citizen'][fileid]) #逐文件输出其中citizen开头的单词数目
经过上面的两段代码,ConditionalFreqDist基本上已经是明白了怎么使用了,使用可迭代的元组作为参数,第一个是条件(分类),第二个是想要统计的值。
cfd.tabulate用于绘制表格,用法如下:
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(conditons=languages,samples=range(10),cumulative=True)

网友评论