2013-03-23 3 views
2

저는 파이썬 코딩에 익숙하지 않습니다. 백 워드 (RegexpTagger 인 경우)와 함께 UnigramTagger를 사용하고 싶습니다. 아래 오류가 무엇인지 파악하기가 어려웠습니다. 이것에 대한 도움을 주시면 감사하겠습니다. nltk의 백 오프 태거

>>> train_sents = (['@Sakshi', 'Hi', 'I', 'am', 'meeting', 'my', 'friend', 'today'])  
>>> from tag_util import patterns 
>>> from nltk.tag import RegexpTagger 
>>> re_tagger = RegexpTagger(patterns) 
>>> from nltk.tag import UnigramTagger 
>>> from tag_util import backoff_tagger 
>>> tagger = backoff_tagger(train_sents, UnigramTagger, backoff=re_tagger) 

Traceback (most recent call last): 
File "<pyshell#6>", line 1, in <module> 
    tagger = backoff_tagger(train_sents, UnigramTagger, backoff=re_tagger) 
    File "tag_util.py", line 12, in backoff_tagger 
    for cls in tagger_classes: 
TypeError: 'YAMLObjectMetaclass' object is not iterable 

는 패턴 tag_util에 내가 가진 코드와 backoff_tagger에만이 작업을 수행하려면 몇 가지를 변경해야

import re 
patterns = [ 
    (r'^@\w+', 'NNP'), 
    (r'^\d+$', 'CD'), 
    (r'.*ing$', 'VBG'), # gerunds, i.e. wondering 
    (r'.*ment$', 'NN'), 
    (r'.*ful$', 'JJ'), # i.e. wonderful 
    (r'.*', 'NN') 
] 

def backoff_tagger(train_sents, tagger_classes, backoff=None): 
    for cls in tagger_classes: 
     backoff = cls(train_sents, backoff=backoff) 
    return backoff 
+0

업데이트 된 답변을 참조하십시오. – Jared

답변

1

입니다.

오류는 클래스 UnigramTagger을 반복 할 수 없기 때문에 발생합니다. 다른 생각이 들었는지 확실하지 않지만 단지 for 루프를 제거하십시오. 또한 UnigramTaggerlist태그가 지정된 문장list s (단어, 태그) tuple s (단어 목록이 아님)로 표시해야합니다. 그렇지 않으면, 훈련 방법을 모른다. 이 부분은 다음과 같습니다.

[[('@Sakshi', 'NN'), ('Hi', 'NN'),...],...[('Another', 'NN'), ('sentence', 'NN')]] 

여기서 각 문장 자체는 list입니다. 또한, NTLK의 태그가있는 코퍼스를 사용할 수 있습니다 (나는 이것을 권장합니다).

편집 :

귀하의 게시물을 읽고 나면 당신이 입력/출력이 특정 기능에서 기대와 NLP의 의미에서 교육에 대한 이해를 결여 할 작업에 대한 혼란 모두 걸 나에게 보인다. 나는 당신이 reading the NLTK book, starting at the beginning에게서 크게 도움이 될 것이라고 생각합니다.

이 문제를 해결하는 방법을 알려 드리게되어 기쁩니다. 그러나 더 많은 연구가 없이는 기본 메커니즘에 대해 완전히 이해하지 못했을 것입니다. (코드 기준)

tag_util.py 출력 여기

>>> import tag_util 
>>> tag_util.brown.tagged_sents()[:2] 
[[('The', 'AT'), ('Fulton', 'NP-TL'), ('County', 'NN-TL'), ('Grand', 'JJ-TL'), ('Jury', 'NN-TL'), ('said', 'VBD'), ('Friday', 'NR'), ('an', 'AT'), ('investigation', 'NN'), ('of', 'IN'), ("Atlanta's", 'NP$'), ('recent', 'JJ'), ('primary', 'NN'), ('election', 'NN'), ('produced', 'VBD'), ('``', '``'), ('no', 'AT'), ('evidence', 'NN'), ("''", "''"), ('that', 'CS'), ('any', 'DTI'), ('irregularities', 'NNS'), ('took', 'VBD'), ('place', 'NN'), ('.', '.')], [('The', 'AT'), ('jury', 'NN'), ('further', 'RBR'), ('said', 'VBD'), ('in', 'IN'), ('term-end', 'NN'), ('presentments', 'NNS'), ('that', 'CS'), ('the', 'AT'), ('City', 'NN-TL'), ('Executive', 'JJ-TL'), ('Committee', 'NN-TL'), (',', ','), ('which', 'WDT'), ('had', 'HVD'), ('over-all', 'JJ'), ('charge', 'NN'), ('of', 'IN'), ('the', 'AT'), ('election', 'NN'), (',', ','), ('``', '``'), ('deserves', 'VBZ'), ('the', 'AT'), ('praise', 'NN'), ('and', 'CC'), ('thanks', 'NNS'), ('of', 'IN'), ('the', 'AT'), ('City', 'NN-TL'), ('of', 'IN-TL'), ('Atlanta', 'NP-TL'), ("''", "''"), ('for', 'IN'), ('the', 'AT'), ('manner', 'NN'), ('in', 'IN'), ('which', 'WDT'), ('the', 'AT'), ('election', 'NN'), ('was', 'BEDZ'), ('conducted', 'VBN'), ('.', '.')]] 

공지 사항 파이썬 인터프리터에서

from nltk.tag import RegexpTagger, UnigramTagger 
from nltk.corpus import brown 

patterns = [ 
    (r'^@\w+', 'NNP'), 
    (r'^\d+$', 'CD'), 
    (r'.*ing$', 'VBG'), 
    (r'.*ment$', 'NN'), 
    (r'.*ful$', 'JJ'), 
    (r'.*', 'NN') 
] 
re_tagger = RegexpTagger(patterns) 
tagger = UnigramTagger(brown.tagged_sents(), backoff=re_tagger) # train tagger 

. 나는 브라운 코퍼스에서 처음으로 두 문장을 태그 형 문장으로 받고 있습니다. 이것은 (UnigramTagger와 같이) 입력으로 타게저에 전달해야하는 데이터 유형입니다. 이제 우리가 훈련 한 타거를 tag_util.py에서 사용할 수 있습니다.

위로 파이썬 인터프리터

>>> tag_util.tagger.tag(['I', 'just', 'drank', 'some', 'coffee', '.']) 
[('I', 'PPSS'), ('just', 'RB'), ('drank', 'VBD'), ('some', 'DTI'), ('coffee', 'NN'), ('.', '.')] 

그리고 거기 당신은 그것을 가지고, POS는 당신의 접근 방식을 사용하여 문장의 단어를 태그.

0

내가 생각하고있는 backoff_tagger을 사용하는 경우. UnigramTagger은 아래 목록과 같은 목록이어야합니다.

tagger = backoff_tagger(train_sents, [UnigramTagger], backoff=re_tagger) 

이 정보가 도움이되기를 바랍니다.

관련 문제