使用treetagger时出错:列表索引超出范围



我正在使用treetagger来提取单词的引理。我有一个功能可以做到这一点,但对于一些单词来说,它给出了列表范围错误:

def treetagger_process(texte):
''' process le texte et renvoie un dictionnaire '''

d_tag = {}
for line in texte:
newvalues = tagger.tag_text(line)
d_tag[line] = newvalues

#print(d_tag)

#lemmatisation  
d_lemma = defaultdict(list)
d_lemma_1 = defaultdict(list)
for k, v in d_tag.items():
print(k)
for p in v:
#print(p)
parts = p.split('t')
print(parts)
forme=parts[0]
cat=parts[1]
lemme = parts[2] # un seul mot
print(lemme)
try:
if lemme =='':
d_lemma[k].append(forme)
elif "|" in lemme :
print(lemme)
lemme_double = lemme.split("|")
lemme_final = lemme_double[1]
print(lemme_final)
d_lemma[k].append(lemme_final)
else:
d_lemma[k].append(lemme)

except:
print(parts)


for k, v in d_lemma.items(): 
d_lemma_1[k]=" ".join(v)


# Suppression de l'espace
print(d_lemma_1)
return d_lemma_1

有办法克服这个错误吗;dns remplacé"正在引起问题,但我要求如果"|"找不到,单词会自动发送到词典。错误:

...
L'idée de départ est amusante mais elle est très mal exploitée en raison notamment d'une mise en scène paresseuse , d'une intrigue à laquelle on ne croit pas une seconde et d'acteurs qui semblent à l'abandon .
["L'", 'DET:ART', 'le']
le
['idée', 'NOM', 'idée']
idée
['de', 'PRP', 'de']
de
['départ', 'NOM', 'départ']
départ
['est', 'VER:pres', 'être']
être
['amusante', 'ADJ', 'amusant']
amusant
['mais', 'KON', 'mais']
mais
['elle', 'PRO:PER', 'elle']
elle
['est', 'VER:pres', 'être']
être
['très', 'ADV', 'très']
très
['mal', 'ADV', 'mal']
mal
['exploitée', 'VER:pper', 'exploiter']
exploiter
['en', 'PRP', 'en']
en
['raison', 'NOM', 'raison']
raison
['notamment', 'ADV', 'notamment']
notamment
["d'", 'PRP', 'de']
de
['une', 'DET:ART', 'un']
un
['mise', 'NOM', 'mise']
mise
['en', 'PRP', 'en']
en
['scène', 'NOM', 'scène']
scène
['paresseuse', 'ADJ', 'paresseux']
paresseux
[',', 'PUN', ',']
,
["d'", 'PRP', 'de']
de
['une', 'DET:ART', 'un']
un
['intrigue', 'NOM', 'intrigue']
intrigue
['à', 'PRP', 'à']
à
['laquelle', 'PRO:REL', 'lequel']
lequel
['on', 'PRO:PER', 'on']
on
['ne', 'ADV', 'ne']
ne
['croit', 'VER:pres', 'croire']
croire
['pas', 'ADV', 'pas']
pas
['une', 'DET:ART', 'un']
un
['seconde', 'NUM', 'second']
second
['et', 'KON', 'et']
et
["d'", 'PRP', 'de']
de
['acteurs', 'NOM', 'acteur']
acteur
['qui', 'PRO:REL', 'qui']
qui
['semblent', 'VER:pres', 'sembler']
sembler
['à', 'PRP', 'à']
à
["l'", 'DET:ART', 'le']
le
['abandon', 'NOM', 'abandon']
abandon
['.', 'SENT', '.']
.
"Faux cul ed wright dit que son film est un hommage aux buddy movies hollywoodiens et nottament bad boys.aussi se permet il de parodier des scènes de ce """"chef d'oeuvre""""au tics de caméra prés,et si on le savait pas déjà on se rend compte à quel point michael bay est un tacheron;Hot Fuzz ne se contente pas d'être une parodie de plus à la """"y'a t-il un flic..."
['"', 'PUN:cit', '"']
"
['Faux', 'ADJ', 'faux']
faux
['cul', 'NOM', 'cul']
cul
['ed', 'NOM', 'ed']
ed
['wright', 'NOM', 'wright']
wright
['dit', 'VER:pper', 'dire']
dire
['que', 'KON', 'que']
que
['son', 'DET:POS', 'son']
son
['film', 'NOM', 'film']
film
['est', 'VER:pres', 'être']
être
['un', 'DET:ART', 'un']
un
['hommage', 'NOM', 'hommage']
hommage
['aux', 'PRP:det', 'au']
au
['buddy', 'NOM', 'buddy']
buddy
['movies', 'NOM', 'movies']
movies
['hollywoodiens', 'ADJ', 'hollywoodien']
hollywoodien
['et', 'KON', 'et']
et
['nottament', 'VER:pres', 'nottament']
nottament
['bad', 'NOM', 'bad']
bad
['dns-remplacé', 'ADJ', 'dns-remplacé']
dns-remplacé
['<repdns text="boys.aussi" />']
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-25-a8bd3e42b86e> in <module>
21         #l_1_dict = spacy_process(l_1)
22         #l_1_dict = spacy_process_treet(l_1)
---> 23         l_1_dict = treetagger_process(l_1)
24 
25         print(type(l_1_dict))
<ipython-input-24-20ed242ad8de> in treetagger_process(texte)
18             parts = p.split('t')
19             forme=parts[0]
---> 20             cat=parts[1]
21             lemme = parts[2] # un seul mot
22             print(lemme)
IndexError: list index out of range

文本示例:

您得到的列表索引超出范围错误是因为您为\t拆分了一个对象,并期望它返回一个由3个组件组成的数组。dns替换似乎在该列表中只返回了1个对象。

在本例中,您有3个对象:

bad
['dns-remplacé', 'ADJ', 'dns-remplacé']

这里只有一个对象:

dns-remplacé
['<repdns text="boys.aussi" />']

我建议您检查"\t"上的拆分是否返回大小为3的列表,如果没有,则需要相应地处理

parts = p.split('t')
if len(parts) == 3:
#do normal processing
else:
#handle this situation

最新更新