nltk слишком много значений для распаковки (ожидается 2) - PullRequest
0 голосов
/ 02 ноября 2018
import nltk
from nltk.corpus import brown

brown_tagged_sents = brown.tagged_sents(categories='news')
((x[1],y[1],z[0],z[1])
    for sent in brown_tagged_sents
    for x,y,z in nltk.trigrams(sent))
cfd = nltk.ConditionalFreqDist(
    ((x[1],y[1],z[0],z[1])
    for sent in brown_tagged_sents
    for x,y,z in nltk.trigrams(sent))
)

Код выше будет происходить:

Traceback (most recent call last):  
  File "/Users/shike/Desktop/textprocess/nltktest.py", line 10, in <module>  
    for sent in brown_tagged_sents  
  File "/usr/local/lib/python3.6/site-packages/nltk/probability.py", line  
 1803, in __init__  
    for (cond, sample) in cond_samples:  
ValueError: too many values to unpack (expected 2)  

Понимание списка

((x[1],y[1],z[0],z[1])
    for sent in brown_tagged_sents
    for x,y,z in nltk.trigrams(sent))

может хорошо работать в одиночку, но что-то не так, когда он используется в качестве параметра. Я до сих пор не знаю почему. Весь код был протестирован в Python3.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Инициализатор nltk.ConditionalFreqDist() ожидается для двух параметров, условия и выборки. Итак, (x[1],y[1],z[0],z[1]) нужно записать как ((x[1],y[1],z[0]),z[1]).

0 голосов
/ 02 ноября 2018

nltk.ConditionalFreqDist ожидает итерируемый набор из двух элементов, например (condition, sample). Но вы передаете итеративный набор из 4 элементов (x[1],y[1],z[0],z[1]).

Возможно, вам придется ознакомиться с документацией и реализацией из этот класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...