2016-05-24 2 views
-1

Я пытаюсь идентифицировать все экземпляры конкретного синтаксического шаблона, найденного в тексте: RB + NN | NNS | NP | PP. То есть, я ищу наречия, за которыми сразу следуют существительные. Я пометил свой текст, используя TreeTagger. Помеченный текст хранится в списке под названием «теги», который выглядит следующим образом:Является ли 'поиск' вызывая 'String index out the range'? (Python)

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) как я могу это исправить. Любое руководство, которое вы, ребята, можете предложить, было бы оценено по достоинству.

+2

Несомненно, 'w [n + 1]' является наиболее вероятным источником вашей индексной ошибки. Какая у вас гарантия, что 'n + 1' меньше длины вашей строки' w'? – khelwood

+0

Я думал, что просил Python посмотреть на слово после наречия и проверить, является ли это существительным? Разве это не то, что я делаю? – Gabriel

+0

'w [n + 1]' не слово за чем-то. Если 'w' - это слово, то' w [n + 1] 'является буквой в этом слове. – khelwood

ответ

0

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

w[n+1] 

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

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