"Поиск" вызывает "Строковый индекс вне диапазона"? (Python)

Я пытаюсь идентифицировать все экземпляры определенного синтаксического шаблона, найденного в тексте: RB + NN|NNS|NP|PP. То есть я ищу наречия, за которыми сразу следуют существительные. Я пометил свой текст с помощью TreeTagger. Текст с тегами хранится в списке под названием "теги", который выглядит следующим образом:

    how  WRB
    hard JJ
    it   PP
    was  VBD

Это соответствующая часть моего кода:

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]))

Моя проблема в том, что пятая строка выдает следующую ошибку:

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

Если четвертая строка кода это...

     if adverb.search(w) != None:

... затем возвращается список наречий.

Я действительно заблудился относительно 1) почему я получаю эту ошибку и 2) как я могу это исправить. Любое руководство, которое вы, ребята, можете предложить, будет очень ценным

1 ответ

Решение

Ваша проблема заключается в следующем:

w[n+1]

Вы путаете свой список tags со строкой в ​​этом списке, w, Если вы хотите получить доступ к другому элементу в списке, вам нужно использовать tags[...]не w[...], Кроме того, вы должны убедиться, что используемый вами индекс находится внутри диапазона списка.

Другие вопросы по тегам