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
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
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
'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