2016-05-24 3 views
-1

Ich versuche, alle Instanzen eines bestimmten syntaktischen Musters in einem Text zu finden: RB + NN | NNS | NP | PP. Das heißt, ich suche nach Adverbien, denen sofort Substantive folgen. Ich habe meinen Text mit TreeTagger markiert. Der markierte Text wird in einer Liste namens ‚Tags‘ gespeichert, die wie folgt aussieht:Führt 'Suche' dazu, dass 'String index out of range' ist? (Python)

how WRB 
    hard JJ 
    it PP 
    was VBD 

Dies ist der relevante Teil meines Codes:

adverb = re.compile(r'RB$') 
noun = re.compile(r'NN') 
for n in range(len(tags)):                               
    w = tags[n] 
    if adverb.search(w) != None and noun.search(w[n+1]) != None: 
     print(' '.join(tags[n-2 : n+3])) 

Mein Problem ist, dass die fünfte Zeile erzeugt den folgend Fehler:

 if adverb.search(w) != None and noun.search(w[n+1]) != None: 
    IndexError: string index out of range 

Wenn die vierte Zeile Code ist dies ...

 if adverb.search(w) != None: 

... dann wird eine Liste von Adverbien zurückgegeben.

Ich bin wirklich verloren zu 1) warum ich diesen Fehler bekomme und 2) wie ich es beheben kann. Jede Führung, die Sie anbieten können, wäre super geschätzt. diese

+2

Sicherlich ist 'w [n + 1]' die wahrscheinlichste Quelle für Ihren Indexfehler. Welche Garantie haben Sie, dass 'n + 1' kleiner ist als die Länge Ihres Strings' w'? – khelwood

+0

Ich dachte, ich hätte Python gebeten, das Wort nach dem Adverb zu sehen und nachzusehen, ob es ein Nomen ist? Mache ich das nicht? – Gabriel

+0

'w [n + 1]' ist nicht das Wort nach allem. Wenn "w" ein Wort ist, dann ist "w [n + 1]" ein Buchstabe in diesem Wort. – khelwood

Antwort

0

ist Ihr Problem:

w[n+1] 

Sie sind verwirrend Ihre Liste tags mit einem String in dieser Liste, w. Wenn Sie auf ein anderes Element in der Liste zugreifen möchten, müssen Sie tags[...], nicht w[...] verwenden. Außerdem sollten Sie sicherstellen, dass der von Ihnen verwendete Index innerhalb des Listenbereichs liegt.

Verwandte Themen