4

入力テキスト ファイルから単語を取得し、WordNet を使用してその単語の同義語、定義、例文を出力する次のコードがあります。品詞に基づいて類義語を synset から分離します。つまり、動詞である類義語と形容詞である類義語は別々に出力されます。

flabbergasted という単語の例としては、1) flabbergast 、boggle 、bowl over という動詞と、2) dumbfounded 、dumfounded 、flabbergasted 、stupefied 、thunderstruck 、damstruck 、damstricken という形容詞があります。

類義語と一緒に品詞を印刷するにはどうすればよいですか? 私はこれまでに持っているコードを以下に提供しました:


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 
4

3 に答える 3

1

レンマにはsynset属性があり、その属性には独自の品詞がありposます。したがって、レンマ as がある場合l、次のように仕様のその部分にアクセスできます。

>>> 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

この 2 つの調整については、読者の演習として残しておきます。

于 2011-06-08T10:18:30.297 に答える
1

インデントを台無しにしたようです:

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

syns = wn.synsets(a)forループ内にある必要があるように見えるwordsので、すべての単語に対してこれを行うことができます:

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
于 2011-05-11T19:02:12.020 に答える