我已经开始学习NLTK
,并且我正在遵循这里的教程,在那里他们使用像这样的双元图找到条件概率。
import nltk
from nltk.corpus import brown
cfreq_brown_2gram = nltk.ConditionalFreqDist(nltk.bigrams(brown.words()))
然而,我想找到条件概率使用三元组。当我尝试将nltk.bigrams
更改为nltk.trigrams
时,我得到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "home/env/local/lib/python2.7/site-packages/nltk/probability.py", line 1705, in __init__
for (cond, sample) in cond_samples:
ValueError: too many values to unpack (expected 2)
如何使用三元组计算条件概率?
nltk.ConditionalFreqDist
期望它的数据是(condition, item)
元组的序列。nltk.trigrams
返回长度为3的元组,这导致了您发布的确切错误。
从你的帖子中,你不太清楚你想用什么作为条件,但在做语言建模时的惯例是将最后一个词作为条件。下面的代码演示了如何实现它。
brown_trigrams = nltk.trigrams(brown.words())
condition_pairs = (((w0, w1), w2) for w0, w1, w2 in brown_trigrams)
cfd_brown = nltk.ConditionalFreqDist(condition_pairs)
您可以使用这里描述的n-gram模型。
用法示例:
from nltk.util import ngrams
input= '...'
N = 3
trigrams = ngrams(input.split(), N)
for grams in trigrams:
print grams
我强烈建议您阅读上述文档,我希望它会有所帮助。