【发布时间】:2018-03-09 01:14:32
【问题描述】:
我正在尝试使用nltk 中的ngram 和freqDist 函数来计算各种ngrams 的频率。
由于 ngram 函数输出是 generator 对象,我想在计算频率之前合并每个 ngram 的输出。
但是,我在合并各种生成器对象时遇到了问题。
我试过itertools.chain,它创建了一个itertools 对象,而不是合并生成器。
我终于选择了permutations,但事后解析对象似乎是多余的。
目前的工作代码是:
import nltk
from nltk import word_tokenize, pos_tag
from nltk.collocations import *
from itertools import *
from nltk.util import ngrams
import re
corpus = 'testing sentences to see if if if this works'
token = word_tokenize(corpus)
unigrams = ngrams(token,1)
bigrams = ngrams(token,2)
trigrams = ngrams(token,3)
perms = list(permutations([unigrams,bigrams,trigrams]))
fdist = nltk.FreqDist(perms)
for x,y in fdist.items():
for k in x:
for v in k:
words = '_'.join(v)
print words, y
正如您在结果中看到的那样,freq dist 没有正确计算来自各个生成器对象的单词,因为每个生成器对象的频率都是 1。 有没有更蟒蛇的方式来正确地做到这一点?
【问题讨论】:
标签: python-2.7 nltk generator word-frequency