Список вне диапазона: я попытался просмотреть файл, но не смог найти, где ошибка

#python #csv #dictionary #tags #treetagger

#python #csv #словарь #Теги #treetagger

Вопрос:

Я попробовал этот скрипт с моим файлом, который содержит приблизительно 16 столбцов и 5243 строки ,

первый столбец — это соответственно ключ (только целые числа от 1 до 5243), а второй столбец — значения, которые являются предложениями (предложения могут быть очень длинными вплоть до абзаца)

Когда я попытался с небольшим файлом, он работает, но с истинным файлом, он не работает.

 # -*- coding: UTF-8 -*-
import codecs 
import re
import os
import sys, argparse
import subprocess
import pprint
import csv
from itertools import islice
import pickle

try:
    import treetaggerwrapper
    from treetaggerwrapper import TreeTagger, make_tags
    print("import TreeTagger OK")
except:
    print("Import TreeTagger pas Ok")

from itertools import islice
from collections import defaultdict

#export le lexique de sentiments
pickle_in = open("dict_pickle", "rb")
dico_lexique = pickle.load(pickle_in)


# extraction colonne verbatim
d = {}
with open(sys.argv[1], 'r', encoding='cp1252',) as csv_file:
    csv_file.readline()
    for line in csv_file:
        token = line.split(';')
        d[token[0]] = token[1]
#print(d)

tagger = treetaggerwrapper.TreeTagger(TAGLANG='fr')
d_tag = {}
for key, val in d.items():
    newvalues = tagger.tag_text(val)
    d_tag[key] = newvalues

#print(d_tag)


d_lemma = defaultdict(list)
for k, v in d_tag.items():
    for elem in v:
        parts = elem.split('t')
        d_lemma[k].append(parts[2])

#print(d_lemma) 
print('ok')


  

Результаты

 
import TreeTagger OK
Traceback (most recent call last):
  File "CSV_dico.py", line 50, in <module>
    d_lemma[k].append(parts[2])
IndexError: list index out of range

  
 abordables      ADJ     abordable
sur     PRP     sur
le      DET:ART le
marché  NOM     marché
.       SENT    .
Moins   ADV     moins
cher    ADV     cher
...     PUN     ...
25      NUM     @card@
%       SYM     %
de      PRP     de
moins   ADV     moins
...     PUN     ...
C'      NAM     C'
est     VER:pres        être
quand   ADV     quand
-même   ADJ     même
moins   ADV     moins
qualitatif      ADJ     qualitatif
qu'     KON     que
un      DET:ART un
seau    NOM     seau
!       SENT    !

  

Комментарии:

1. распечатайте и проверьте, что находится в вашей переменной ‘token’, очевидно, пусто

2. … это означает, что есть строка без ‘;’

3. @ncica Я печатаю токен, и он выдает каждую строку

4. Пример файла был бы хорош

5. можете ли вы показать, как выглядит ваш токен

Ответ №1:

Не решение, а подсказка для поиска ошибки:

Попробуйте изменить эту часть:

 # extraction colonne verbatim
d = {}
with open(sys.argv[1], 'r', encoding='cp1252',) as csv_file:
    csv_file.readline()
    for line in csv_file:
        token = line.split(';')
        d[token[0]] = token[1]
  

К этому:

 # extraction colonne verbatim
d = {}
with open(sys.argv[1], 'r', encoding='cp1252',) as csv_file:
    csv_file.readline()
    for line in csv_file:
        token = line.split(';')
        try:
            d[token[0]] = token[1]
        except:
            print(line)
  

Это должно дать вам неправильную строку токена, и вы можете проверить ее на наличие ошибок

Комментарии:

1. спасибо, я использовал ваше решение для поиска ошибки, и оно работает, чем вы очень