2015-11-07 1 views
1

Я пытаюсь сделать код для генерации некоторых 3-грамм, но если я запускаю этот код, он дает мне ошибку:список индексов вне диапазона в 3-х грамм

list index out of range 

на линии в функция third_word на линии next_word = word_list[x+2].

def third_word(key): 
    third = {} 
    next_word = word_list[x+2] 

    if next_word not in third: 
     third[next_word] = 1 

    elif next_word in third: 
     third[next_word] += 1  

    return third 

x = 0 
for word in word_list: 
    key = (word_list[x], word_list[x+1]) 

    if key not in follow_ups: 
     follow_ups[key] = third_word(key) 

    x += 1 
+0

Что такое 'word_list'? –

+0

'x' будет работать от' 0' до 'len (word_list) -1'. Если последний ключ не находится в 'follow_ups', вы попытаетесь проиндексировать с помощью' len (word_list) + 1', который даст ошибку. Аналогично для второго-последнего ключа, который будет использовать 'len (word_list)', который также выходит за рамки. Кроме того, 'third' ничего не делает, поскольку он не является глобальным и всегда пуст в' third_word'. –

ответ

0

Для каждого слова в вашем word_list вы хотите получить доступ к элементу x + 2. Предположим, что ваш word_list имеет n элементов, индексированных от 0 до n-1, тогда вы хотите получить доступ к n + 1-му слову, когда мы находимся на последней итерации списка, что явно выходит за рамки.

Я предлагаю вам создать индекс с диапазоном вместо этого, идти с:

for x in range(len(word_list) - 2): 
    ... 
+0

вы, вероятно, имеете в виду 'len (word_list) -2' – Azad

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