2017-05-14 4 views
0

IndexError: list index out of range lorsque la méthode tag_sents() de NLTK SennaTagger (http://www.nltk.org/_modules/nltk/tag/senna.html) est appelée.index de liste erreur hors plage lorsque la méthode tag_sents() de NLTK SennaTagger est appelée

Une liste de phrases est donnée en entrée de la méthode tag_sents.

Un fichier exécutable senna est nécessaire pour exécuter le taggeur. Le guide d'installation de la boîte à outils SENNA peut être trouvé ici. http://ronan.collobert.com/senna/

code:

from nltk.tag import SennaTagger 

SENNA_EXECUTABLE_DIR = '../../tools/senna' 

pos_tagger = SennaTagger(SENNA_EXECUTABLE_DIR) 

tagged = pos_tagger.tag_sents(["All the banks are closed", "Today is Sunday"]) 

Sortie:

Traceback (most recent call last): 

    File "<ipython-input-90-886051c3d91d>", line 1, in <module> 
    tagged = pos_tagger.tag_sents(["All the banks are closed", "Today is Sunday"]) 

    File "F:\Programs\Anaconda3\lib\site-packages\nltk\tag\senna.py", line 55, in tag_sents 
    tagged_sents = super(SennaTagger, self).tag_sents(sentences) 

    File "F:\Programs\Anaconda3\lib\site-packages\nltk\classify\senna.py", line 161, in tag_sents 
    result[tag] = tags[map_[tag]].strip() 

IndexError: list index out of rangeenter code here 

Répondre

1

L'entrée pour senna.tag_sents est la liste de la liste des chaînes, ce qui peut être réalisé par [word_tokenize(sent) for sent in sents]

>>> from nltk import word_tokenize 
>>> from nltk.tag import SennaTagger 
>>> senna = SennaTagger('/home/alvas/senna/') 
>>> sents = ["All the banks are closed", "Today is Sunday"] 

>>> tokenized_sents = [word_tokenize(sent) for sent in sents] 
>>> senna.tag_sents(tokenized_sents) 
[[('All', u'PDT'), ('the', u'DT'), ('banks', u'NNS'), ('are', u'VBP'), ('closed', u'VBN')], [('Today', u'NN'), ('is', u'VBZ'), ('Sunday', u'NNP')]] 

Ou utilisez map si vous ne voulez pas matérialiser tokenized_sents avant l'étiquetage:

>>> tokenized_sents = map(word_tokenize, sents) 
>>> senna.tag_sents(tokenized_sents) 
[[('All', u'PDT'), ('the', u'DT'), ('banks', u'NNS'), ('are', u'VBP'), ('closed', u'VBN')], [('Today', u'NN'), ('is', u'VBZ'), ('Sunday', u'NNP')]]