1

NTLKでpythonを使用して、いくつかの単語の頭字語を取得しようとしています(今のところ2)。最初の単語では動作するようですが、2 番目の単語では動作しないようです。NTLK については、まだ学ぶべきことがたくさんあると思います。以下にいくつかの単純化されたコード例があります。私は基本的に頭字語の 2 つのリストを取得しようとしています。単語ごとに 1 つのリストです。すべてが最初の for ループでうまくいきました。2番目の単語を試した後、次のようになりました。

syn2 = wn.synsets(word)[0].lemmas[y]
IndexError: list index out of range

なぜこれが起こっているのかを理解するのに誰かが私を助けてくれることを願っています.

import nltk
from nltk.corpus import wordnet as wn
import string
from array import * 

syn1 = '' 
syn2 = '' 
mylist = []    
mylist2 = []    
mylist3 = []  


Web_Keywd = 'car loan'
wuser_words = Web_Keywd.split()   

for word in wuser_words:                           


     i=i+1
     #first
     if (i == 1) :
         synset1 = wn.synsets(word)    
         y = 0     
         for synset in synset1:
             syn1 = wn.synsets(word)[0].lemmas[y]
             syn1 = syn1.name
             mylist2.append(syn1)
             y=y+1
     if (i == 2) :
         y = 0     
         for synset2 in wn.synsets(word):
             syn2 = wn.synsets(word)[0].lemmas[y]
             syn2 = syn2.name
             mylist3.append(syn2)
             y=y+1  
4

1 に答える 1

1

を使用して、以前の回答で誤解を招いた可能性がありwn.synsets(word)[0].lemmas[y]ます。レンマがいくつあるかは事前にわからないため、明示的にレンマをループする必要があります。使用例:

Web_Keywd = 'car loan cheap'

results = {}
for word in Web_Keywd.split():
    for synset in wn.synsets(word):
        for lemma in synset.lemmas:
            results.setdefault(word, []).append(lemma.name)

results次のようになります。

{'car': ['car', 'auto', 'automobile', 'machine'...],
'loan': ['loan', 'loanword', 'loan', 'lend', 'loan'...],
'cheap': ['cheap', 'inexpensive', 'brassy', 'cheap...]}

他の単語とは関係なく、送信された単語ごとに固有の結果を取得するには:

.... # same as above
            results.setdefault(word, set()).add(lemma.name)

送信されたすべての単語の一意の単語のリストを取得するには:

Web_Keywd = 'car loan cheap'

words = set(Web_Keywd.split())
results = set(
    lemma.name
    for word in words
        for synset in wn.synsets(word)
            for lemma in synset.lemmas
)
# results -> {'loanword', 'tatty', 'automobile', 'cheap', 'chinchy',...
于 2013-06-21T15:30:48.653 に答える