在python nltk中找到trigram的条件概率

Rik*_*hah 5 python nlp nltk n-gram

我已经开始学习,NLTK并且正在从这里开始学习教程,他们在这里使用像这样的双字母组合来找到条件概率。

import nltk
from nltk.corpus import brown
cfreq_brown_2gram = nltk.ConditionalFreqDist(nltk.bigrams(brown.words()))
Run Code Online (Sandbox Code Playgroud)

但是,我想使用三字母组找到条件概率。当我试图改变nltk.bigramsnltk.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)
Run Code Online (Sandbox Code Playgroud)

如何使用三字母组合来计算条件概率?

Ili*_*kov 5

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)
Run Code Online (Sandbox Code Playgroud)