布朗新闻语料库中n-gram的计数?
我知道nltk可以告诉你在特定上下文中一个词出现的可能性,具体可以参考nltk语言模型(ngram)如何计算一个词在上下文中的概率。
但是,它能告诉你在布朗语料库中某个特定的ngram出现的次数(或者可能性)吗?比如,它能告诉你“巧克力奶昔”这个短语在布朗语料库中出现了多少次吗?
我知道你可以用谷歌的ngram来做到这一点,但数据有点复杂。我在想有没有更简单的方法可以用nltk来实现。
2 个回答
0
使用 nltk.bigrams(<tokenizedtext>)
,你可以很容易地计算出二元组的数量。首先,创建一个空字典,然后遍历二元组列表,逐个增加或更新每个二元组的计数(这个字典的格式是 {<bigram>: <count>}
)。一旦你有了这个字典,就可以通过 dict[<bigram>]
来查找你感兴趣的任何二元组。
举个例子,假设布朗语料库的标记在一个列表 brown_bigrams
中:
frequencies = {}
for ngram in brown_bigrams:
if ngram in frequencies:
frequencies[ngram] += 1
else:
frequencies[ngram] = 1
#frequency of ('chocolate', 'milkshake')
print frequencies[('chocolate', 'milkshake')]
3
from collections import Counter
from nltk.corpus import brown
from nltk.util import ngrams
n = 2
bigrams = ngrams(brown.words(), n)
bigrams_freq = Counter(bigrams)
print bigrams_freq[('chocolate', 'milkshake')]
print bigrams_freq.most_common()[2000]
[out]:
0
(('beginning', 'of'), 42)