2011-05-11 3 views
2

입력 텍스트 파일에서 단어를 가져 와서 WordNet을 사용하여 단어의 동의어, 정의 및 예문을 인쇄하는 다음 코드가 있습니다. 이것은 품사에 기초한 동의어, 즉 동사 인 동의어와 형용사 인 동의어를 분리하여 인쇄한다.단어의 동의어와 함께 품사 인쇄하기

flabbergasted라는 단어의 예는 1) flabbergast, boggle, 동사는 그릇, 2) dumbfounded, dumfounded, flabbergasted, stupefied, thunderstruck, dumbstrck, dumbstricken은 형용사입니다.

동의어와 함께 품사체를 어떻게 인쇄합니까?


import nltk 
from nltk.corpus import wordnet as wn 
tokenizer = nltk.data.load('tokenizers/punkt/english.pickle') 
fp = open('sample.txt','r') 
data = fp.read() 
tokens= nltk.wordpunct_tokenize(data) 
text = nltk.Text(tokens) 
words = [w.lower() for w in text] 
for a in words: 
    print a 
syns = wn.synsets(a) 
for s in syns: 
    print 
    print "definition:" s.definition 
    print "synonyms:" 
    for l in s.lemmas: 
     print l.name 
    print "examples:" 
    for b in s.examples: 
     print b 
    print 

답변

1

당신이 당신의 들여 쓰기를 엉망 것 같은데 : : 나는 지금까지 아래에있는 코드를 제공 한

for a in words: 
    print a 
syns = wn.synsets(a) 

는 모든이 작업을 수행 할 수 있도록 루프의 words 내부에 있어야한다 syns = wn.synsets(a)처럼 보인다 단어 :

for w in words: 
    print w 
    syns = wn.synsets(w) 
    for s in syns: 
     print 
     print "definition:", s.definition 
     print "synonyms:" 
     for l in s.lemmas: 
      print l.name 
     print "examples:" 
     for b in s.examples: 
      print b 
    print 
0

표제어는 pos 속성의 연설 자체의 부분이있는 synset 속성을 가지고 있습니다. 그래서, 우리는 l 같은 보조 정리가있을 경우, 우리는 다음과 같이 spech의 그 부분을 액세스 할 수 있습니다

>>> l = Lemma('gladden.v.01.joy') 
>>> l.synset.pos 
'v' 

는 더 일반적으로, 우리는 당신의 파일을 읽기 위해 루프로이를 확장 할 수 있습니다. 루프가 완료되면 파일을 멋지게 닫으므로 with 문을 사용하고 있습니다. 당신은 당신이 현재에 대해 이야기하는 단어로 연설의 동일한 부분에 보조 정리를 선택하고 있는지 확인하려면

>>> with open('sample.txt') as f: 
...  raw = f.read() 
...  for sentence in nltk.sent_tokenize(raw): 
...   sentence = nltk.wordpunct_tokenize(sentence) 
...   for word in sentence: 
...    for synset in wn.synsets(word): 
...     for lemma in synset.lemmas: 
...      print lemma.name, lemma.synset.pos 
... 

, 당신은 너무 언론의 그 단어의 일부를 식별해야합니다

>>> import nltk 
>>> from nltk.corpus import wordnet as wn 
>>> with open('sample.txt') as f: 
...  raw = f.read() 
...  for sentence in nltk.sent_tokenize(raw): 
...   sentence = nltk.pos_tag(nltk.wordpunct_tokenize(sentence)) 
...   for word, pos in sentence: 
...    print word, pos 

나는이 두 가지를 독자의 연습 문제로 조정할 것입니다.

+0

pos 함수를 사용하면 다음과 같은 오류가 발생합니다. lemma.synset.pos AttributeError : 'function'객체에 'pos'속성이 없습니다. –

+0

메모 주셔서 감사합니다. 이 대답을 쓴 이후로 NLTK API가 변경되었습니다. 이 답변을 업데이트 할 시간을 갖습니다. –

+0

당신은 저에게 synset과 함께 보조 정리를 사용하여 pos를 줄 수있는 함수를 말할 수 있습니까? –