Я пытаюсь рассчитать недоумение для данных, которые у меня есть. Код, который я использую:
import sys
sys.path.append("/usr/local/anaconda/lib/python2.7/site-packages/nltk")
from nltk.corpus import brown
from nltk.model import NgramModel
from nltk.probability import LidstoneProbDist, WittenBellProbDist
estimator = lambda fdist, bins: LidstoneProbDist(fdist, 0.2)
lm = NgramModel(3, brown.words(categories='news'), True, False, estimator)
print lm
Но я получаю сообщение об ошибке,
File "/usr/local/anaconda/lib/python2.7/site-packages/nltk/model/ngram.py", line 107, in __init__
cfd[context][token] += 1
TypeError: 'int' object has no attribute '__getitem__'
Я уже выполнил скрытое распределение Дирихле для имеющихся у меня данных и сгенерировал униграммы и их соответствующие вероятности (они нормализованы, поскольку сумма общих вероятностей данных равна 1).
Мои униграммы и их вероятность выглядят так:
Negroponte 1.22948976891e-05
Andreas 7.11290670484e-07
Rheinberg 7.08255885794e-07
Joji 4.48481435106e-07
Helguson 1.89936727391e-07
CAPTION_spot 2.37395965468e-06
Mortimer 1.48540253778e-07
yellow 1.26582575863e-05
Sugar 1.49563800878e-06
four 0.000207196011781
Это всего лишь фрагмент файла юниграмм, который у меня есть. Тот же формат используется примерно для 1000 строк. Суммарные вероятности (второй столбец) дают 1.
Я начинающий программист. Этот ngram.py принадлежит пакету nltk, и я не знаю, как это исправить. Пример кода, который у меня есть, взят из документации nltk, и я не знаю, что теперь делать. Пожалуйста, помогите, что я могу сделать. Заранее спасибо!