布朗新闻语料库中n-gram的计数?

0 投票
2 回答
2028 浏览
提问于 2025-04-18 08:55

我知道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)

撰写回答