产生一个文本,一般要基于一个已有的训练集,或者说是种子,来告诉程序词汇的分布以及用词习惯,下面是一个最为基础的文本产生函数,基于nltk的条件频率分布函数构建:
def generate_model(cfd, word, num=15):
for i in range (num):
print word #输出当前词汇
word = cfd[word].max() #该词汇的下一个"最有可能"与之联结的词汇, 并替代当前词汇,使之输入到下一次循环当中
text = nltk.corpus.genesis.words('english-kjv.txt')
bigrams = nltk.bigrams(text)
cfd = nltk.ConditionalFreqDist(bigrams)
这里想详细说说nltk.ConditionalFreqDist这个函数,个人感觉这个函数意义非凡。该函数是频率分布的集合,比如,我们想统计在新闻文体中和言情小说文体中给定词的频率分布,那么这里的“新闻”以及“言情小说”就是两个条件,而给定的词,就是我们观察到的事件。在一个ConditionalFreqDist函数中,(条件,事件)的集合,就是输入的argument,比如:
cfd = ConditionalFreqDist(条件,事件)
举例说明,我们想知道brown语料库中,news和romance两种文学体裁的词频分布,那么我们可以使用如下代码:
#我们先设置(条件,事件)的集合:
gen