Correction IA pos neg
import csv
def dicoPlusMoins(nomDeFichier):
'''
a partir du nom de fichier csv contenant des avis positifs (1) ou négatifs (0)
construit le dictionnaire des mots en ajoutant à chaque mot 1 si l avis est positif et enlevant 1 si l'avis est négatif
renvoie le dictionnaire ainsi construit
'''
tab=[]
dico={}
with open(nomDeFichier,'r',encoding='utf-8') as fichier:
lecteur=csv.reader(fichier,delimiter=';')
for row in lecteur:
tab.append(row)
for element in tab:
element[0]=element[0].split()
for avis in tab:
for mot in avis[0]:
#si le mot est déjà présent dans le dictionnaire et que l'avis est positif
if mot in dico and avis[1]=='1':
dico[mot]+=1
#si le mot n'est pas présent dans le dictionnaire et que l'avis est positif
elif mot not in dico and avis[1]=='1':
dico[mot]=1
#si le mot est déjà présent dans le dictionnaire et que l'avis est négatif
if mot in dico and avis[1]=='0':
dico[mot]-=1
#si le mot est déjà présent dans le dictionnaire et que l'avis est négatif
elif mot not in dico and avis[1]=='0':
dico[mot]=-1
return dico
def dicoPlusMoinsV2(nomDeFichier):
'''
a partir du nom de fichier csv contenant des avis positifs (1) ou négatifs (0)
construit le dico des mots en calculant le score de l'avis
si le score est en accord avec l'avis (+-) on ne change rien
sinon ajoutant 1 si l avis est positif et enlevant 1 si l'avis est négatif
renvoie le dico
'''
tab=[]
dico={}
with open(nomDeFichier,'r',encoding='utf-8') as fichier:
lecteur=csv.reader(fichier,delimiter=';')
for row in lecteur:
tab.append(row)
for element in tab:
element[0]=element[0].split()
for avis in tab:
val_avis=0
#calcul de la valeur de l'avis avec l'etat actuel du dico
for mot in avis[0]:
if mot in dico:
val_avis=val_avis+dico[mot]
else:
dico[mot]=0
#si l'avis est + et que le score est -
if avis[1]=='1' and val_avis<=0:
for mot in avis[0]:
if mot in dico:
dico[mot]=dico[mot]+1
else:
dico[mot]=1
#si l'avis est - et que le score est +
if avis[1]=='0' and val_avis>0:
for mot in avis[0]:
if mot in dico:
dico[mot]=dico[mot]-1
else:
dico[mot]=-1
return dico
def AnalysedeTexte(avis,dico):
'''
avis est une chaine de caractères
dico est un dictionnaire. les clefs sont des mots, les valeurs sont les notes attributés à chaque mot par la fonction dicoPlusMoins
la fonction renvoie une note attribuée à la chaine de caractères avis
exemple :
AnalysedeTexte("très mauvais restaurant")
>>> -38
Cet exemple ne peut servir de test unitaire, le dictionnaire dépendant lui même des données utilisées.
'''
score=0
texte=avis.split()
for mot in texte:
if mot in dico:
score=score+dico[mot]
return avis,score