2017-03-10 12 views
0

파이썬 NLTK 서적 (7 장)을 기반으로 NLP- 파이프 라인을 구축 중입니다. 코드의 첫 번째 세그먼트는 데이터를 올바르게 전처리,하지만 난 내 NP-chunker을 통해 출력을 실행할 수 없습니다입니다 : 이것은NP- 청크 값 오류 (Python nltk)

import nltk, re, pprint 

#Import Data 

data = 'This is a test sentence to check if preprocessing works' 

#Preprocessing 

def preprocess(document): 
    sentences = nltk.sent_tokenize(document) 
    sentences = [nltk.word_tokenize(sent) for sent in sentences] 
    sentences = [nltk.pos_tag(sent) for sent in sentences] 
    return(sentences) 

tagged = preprocess(data) 
print(tagged) 

#regular expression-based NP chunker 

grammar = "NP: {<DT>?<JJ>*<NN>}" 
cp = nltk.RegexpParser(grammar) #chunk parser 
chunked = [] 
for s in tagged: 
    chunked.append(cp.parse(tagged)) 
print(chunked) 

역 추적 내가 얻을 :

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Users\u0084411\AppData\Local\Continuum\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile 
    execfile(filename, namespace) 
    File "C:\Users\u0084411\AppData\Local\Continuum\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile 
    exec(compile(f.read(), filename, 'exec'), namespace) 
    File "C:/Users/u0084411/Box Sync/Procesmanager DH/Text Mining/Tools/NLP_pipeline.py", line 24, in <module> 
    chunked.append(cp.parse(tagged)) 
    File "C:\Users\u0084411\AppData\Local\Continuum\Anaconda3\lib\site-packages\nltk\chunk\regexp.py", line 1202, in parse 
    chunk_struct = parser.parse(chunk_struct, trace=trace) 
    File "C:\Users\u0084411\AppData\Local\Continuum\Anaconda3\lib\site-packages\nltk\chunk\regexp.py", line 1017, in parse 
    chunkstr = ChunkString(chunk_struct) 
    File "C:\Users\u0084411\AppData\Local\Continuum\Anaconda3\lib\site-packages\nltk\chunk\regexp.py", line 95, in __init__ 
    tags = [self._tag(tok) for tok in self._pieces] 
    File "C:\Users\u0084411\AppData\Local\Continuum\Anaconda3\lib\site-packages\nltk\chunk\regexp.py", line 95, in <listcomp> 
    tags = [self._tag(tok) for tok in self._pieces] 
    File "C:\Users\u0084411\AppData\Local\Continuum\Anaconda3\lib\site-packages\nltk\chunk\regexp.py", line 105, in _tag 
    raise ValueError('chunk structures must contain tagged ' 
ValueError: chunk structures must contain tagged tokens or trees 
>>> 

내 실수는 여기에 무엇입니까 ? 'Tagged'가 토큰 화되었으므로 프로그램이 이것을 왜 인식하지 못합니까?

감사합니다. 톰

+0

[왜 오류가 발생합니까? ValueError : 청크 구조체에 태그가 추가 된 토큰 또는 트리가 있어야합니다.] (http://stackoverflow.com/questions/13269543/whya-am-i-getting-error-valueerror-chunk-structures-must-contain-tagged-tokens). –

+0

이것을 구현했지만 동일한 추적을 얻을 수 있습니다. –

+0

'tags'는 튜플 또는 Tree 여야합니다. http://www.nltk.org/_modules/nltk/chunk/regexp.html을 참조하십시오. –

답변

1

당신은 이것을 볼 때 당신의 이마를 때린다. 대신이

for s in tagged: 
    chunked.append(cp.parse(tagged)) 

의 그것은이 있었어야 :

for s in tagged: 
    chunked.append(cp.parse(s)) 

당신은 당신이 태그 문장 cp.parse()을 통과하지 않았기 때문에 오류를 받고 있지만 목록되었다.

+0

OK, 고맙습니다. 이제 결과가 나옵니다. 그러나 어떻게 해석해야 할 지 잘 모르겠습니다. [Tree (('포함', 'VBZ'), '(' ',' ',' ')', '' ('Noun', 'NN')]), Tree ('NP', [('phrase', 'NN')]))])]) –

+0

전화 할 수 없습니다. chunked.draw (시각적 표현을 얻기 위해), traceback이 나에게 준다 : AttributeError : 'list'객체는 'draw'속성을 가지고 있지 않다 –

+0

당신은'chunked.draw()'를 타이프하고있다. 'chunked [0] .draw()'를 시도하십시오. – alexis