在python中正确使用NTLK

在python中正确使用NTLK,python,nltk,Python,Nltk,我正在尝试将python与NTLK结合使用,以获得许多单词的首字母缩略词(目前为2)。看来我可以用第一个词来表达,但第二个词不行。我猜关于NTLK我还有很多东西要学。下面是一些简化的示例代码。我基本上是想得到两个缩略语列表,每个单词一个列表。第一个for循环一切顺利。在我尝试了第二个词之后,我得到了: syn2 = wn.synsets(word)[0].lemmas[y] IndexError: list index out of range 希望有人能帮助我理解为什么会发生这种情况 imp

我正在尝试将python与NTLK结合使用,以获得许多单词的首字母缩略词(目前为2)。看来我可以用第一个词来表达,但第二个词不行。我猜关于NTLK我还有很多东西要学。下面是一些简化的示例代码。我基本上是想得到两个缩略语列表,每个单词一个列表。第一个for循环一切顺利。在我尝试了第二个词之后,我得到了:

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  

在我之前的回答中,我可能使用了
wn.synsets(word)[0]。引理[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)
结果现在如下所示:

{'car': ['car', 'auto', 'automobile', 'machine'...],
'loan': ['loan', 'loanword', 'loan', 'lend', 'loan'...],
'cheap': ['cheap', 'inexpensive', 'brassy', 'cheap...]}
要为提交的每个单词获得独立于其他单词的唯一结果,请执行以下操作:

要获取提交的所有单词的唯一单词列表,请执行以下操作:

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',...

在我之前的回答中,我可能使用了
wn.synsets(word)[0]。引理[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)
结果现在如下所示:

{'car': ['car', 'auto', 'automobile', 'machine'...],
'loan': ['loan', 'loanword', 'loan', 'lend', 'loan'...],
'cheap': ['cheap', 'inexpensive', 'brassy', 'cheap...]}
要为提交的每个单词获得独立于其他单词的唯一结果,请执行以下操作:

要获取提交的所有单词的唯一单词列表,请执行以下操作:

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',...

谢谢,这有点帮助。当我进入一个列表wordlist.append(results.get(“car”))时,我注意到主单词“car”似乎重复了好几次。有没有办法解决这个问题?谢谢,这似乎很有效(至少在大部分情况下)。不过,当我搜索“猫”时,似乎得到了一些意想不到的结果。我得到的结果像呕吐、净化、盖伊等等。我不知道这些话是如何为猫返回的。另外,在在线词典中,我看到返回的单词,如bobcat、kitty等,我希望在ntlk结果中看到它们(但不是)。想知道这是为什么吗?谢谢这有点帮助。当我进入一个列表wordlist.append(results.get(“car”))时,我注意到主单词“car”似乎重复了好几次。有没有办法解决这个问题?谢谢,这似乎很有效(至少在大部分情况下)。不过,当我搜索“猫”时,似乎得到了一些意想不到的结果。我得到的结果像呕吐、净化、盖伊等等。我不知道这些话是如何为猫返回的。另外,在在线词典中,我看到返回的单词,如bobcat、kitty等,我希望在ntlk结果中看到它们(但不是)。不知你是否知道这是为什么?