2013-06-21 64 views
1

我想用NTLK获取一些单词的数量的缩写(现在2)。看起来我可以用它来处理第一个单词,但不是第二个单词。我猜我还有很多要学习NTLK。下面有一些简化的示例代码。我基本上试图得到两个缩略词列表,每个词有1个列表。所有的第一个循环都很好。当我尝试第二个字后,我得到:正确使用NTLK与python

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 

回答

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现在看起来如下:

.... # same as above 
      results.setdefault(word, set()).add(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',... 
+0

感谢这有所帮助。当我进入一个名单wordlist.append(results.get(“汽车”))我注意到主要的词“汽车”似乎重复了好几次..有没有办法解决这个问题? – user2495294

+0

@ user2495294:看我的编辑 – michaelmeyer

+0

感谢这似乎是工作(至少在大多数情况下)。当我搜索'猫'时,我似乎得到了一些意想不到的结果。我得到的结果像呕吐物,清除物,家伙等等。我不确定这些词是如何返回给猫的。看看在线词库,我看到像bobcat,kitty等这样的词,我期望在ntlk结果中看到(但不是)。想知道你是否知道这是为什么? – user2495294