2016-02-13 3 views
0

Я использую арабский wordnet для поиска синонимов; она отлично работает, используя приведенный ниже код и выводит правильный синоним:Python Index вне диапазона?

import unicodedata 
from nltk.corpus import wordnet as wn 
yxz='work' 
jan = wn.synsets(yxz)[0] 
abc=jan.lemma_names(lang='arb') 
for bca in abc: #Converting from unicode to arabic done 
    nfkd_form = unicodedata.normalize('NFKD', bca) 
    encoded=nfkd_form.encode('utf-8')#this works fine 
    encoded= u"".join([c for c in nfkd_form if not unicodedata.combining(c)]) 
    print encoded 

Однако я хочу перебрать выше части и изменить слово (YXZ) каждый раз, но это не работает, потому что индекс выходит диапазона: (у меня есть документ XML, я хочу, чтобы получить синонимы для глаголов только в определенном предложении глаголы присутствуют между тегами <v> в документе XML)

Synonyms=[] 

for phrase in root.findall('./PHRASE'): 
    ens = {en.get('x'): en.text for en in phrase.findall('en')} 
    if 'ORG' in ens and 'PERS' in ens: 
    if (((ens["ORG"] ==u"جامعة بيت لحم")and (ens["PERS"]==u" ه أحمد")) or ((ens["ORG"] ==u"جامعة كولومبيا.")and (ens["PERS"]==u"رئيس الجمهورية السيد محمد المنصف المرزوقي")) or ((ens["ORG"] ==u"معمل باريكادي ")and (ens["PERS"]==u"رئيس فنزويلا")) or ((ens["ORG"] ==u"شركة جوجل")and (ens["PERS"]==u"لاري بيدج وسيرغي برين")) or((ens["ORG"] ==u"محترفه الباريسي")and (ens["PERS"]==u"بول"))): 
    for v in phrase.findall('V'): 
        #----------------------------------------ENGLISH SYNONYM TRIAL--------------------------- 

      print("------ English Synonym Trial----------") 
      #-------Step 8.3] Google Translate API working fine) now want it to translate from ar to en from Diacritics---------- 
      #-----8.3.1] Translate Diactrics Array words to english----------------------- 
      gs = goslate.Goslate() 
      engVerb=gs.translate(unicode(v.text), 'en') #english word is the output 
      print("---EngVerb---") 
      print(engVerb) 
      #-----8.3.2] use Arabic Wordnet to get the synonyms[English->output unicode] Working ----------------------- 
      #yxz='work' 
      jan = wn.synsets(engVerb)[0] 
      abc=jan.lemma_names(lang='arb') 
      for bca in abc: #Converting from unicode to arabic done 
      nfkd_form = unicodedata.normalize('NFKD', bca) 
      encoded=nfkd_form.encode('utf-8')#this works fine 
      encoded= u"".join([c for c in nfkd_form if not unicodedata.combining(c)]) 
      #print encoded 
      Synonyms.append(encoded) 
print("----------------------------PRINTING SYNONYMS---------------------------") 
print Synonyms 

Однако я всегда получаю ошибку

jan = wn2.synsets(engVerb)[0] 

IndexError: список индексов вне диапазона

ответ

1

Эта ошибка означает, что wn2.synsets(engVerb) является пустой список (используйте print для отладки, это очень помогает), и вы пытаетесь получить доступ к его первый элемент, который не существует.

Попробуйте вместо этого:

x = wn2.synsets(engVerb) 
if len(x) == 0: 
    continue 
else: 
    jan = x[0] 

 Смежные вопросы

  • Нет связанных вопросов^_^