2013-06-21 65 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