diff --git a/code/Traitement Langage Naturel/ReviewAnalysis.py b/code/Traitement Langage Naturel/ReviewAnalysis.py index dcb7a4c..065c831 100644 --- a/code/Traitement Langage Naturel/ReviewAnalysis.py +++ b/code/Traitement Langage Naturel/ReviewAnalysis.py @@ -1,6 +1,3 @@ -import nltk -import os -from dataclasses import dataclass from vaderSentiment_fr.vaderSentiment import SentimentIntensityAnalyzer #Emplacements des fichiers contenants le lexique et les avis @@ -33,9 +30,11 @@ scoreWords.close() ### Partie analyse d'avis ### + file = open(reviewPath, "r", encoding='UTF-8') reviews = (file.read()).split('//') + #liste (partielle) de mots-clé pertinents pour un musée keys=['attente', "d'attente", 'queue', 'patienter', 'patience', 'patient', 'patients', 'patiente', 'patientes', 'file', 'files', @@ -60,10 +59,12 @@ keyWords = [] #Score moyen d'un avis averageScore = 0 + vaderScore = {'neg': 0, 'neu': 0, 'pos': 0, 'compound': 0} SIA = SentimentIntensityAnalyzer() + #Fonction de recherche d'un mot d'un avis parmis le lexique def search(word): if (len(word) != 0): @@ -86,7 +87,7 @@ def isNegative(sentence): vaderCriteria = ['neg', 'neu', 'pos', 'compound'] -for Review in reviews: +def ReviewAnalyzer(review): reviewScore = 0 #miniKey donne les mots-clé contenus dans l'avis en train d'être analysé @@ -98,11 +99,6 @@ for Review in reviews: sentences = Review.split('.') for sent in sentences: - #Ces 3 lignes sont pour comparer avec le score de VADER - score = SIA.polarity_scores(sent) - for criteria in vaderCriteria: - vaderScore[criteria] += score[criteria] - #On découpe la phrase en une liste de mots sentence = list(e.strip(',.') for e in sent.split()) for Word in sentence: @@ -113,14 +109,14 @@ for Review in reviews: #recherche d'un éventuel mot-clé associé à ce caractère positif/négatif if (temp != -1): + + #On change la valeur du score associé au mot-clé + #si la phrase contient une négation + if (isNegative(sentence)): + temp[1] = -temp[1] + for key in keys: if (key in sentence): - - - #On change la valeur du score associé au mot-clé - #si la phrase contient une négation - if (isNegative(sentence)): - temp[1] = -temp[1] #Récupération des mots-clés déjà détectés dans tous les avis cles = list(e[0] for e in keyWords) @@ -138,15 +134,18 @@ for Review in reviews: #Mise à jour du score de l'avis reviewScore += temp[1] - - #Mise à jour du score moyen de tous les avis - averageScore += reviewScore #Caractéristiques de l'avis analysé miniKey = set(miniKey) - print("Mots-Clé: ", miniKey) - print("Score: ", reviewScore) - print('') + return(miniKey, reviewScore) + +for Review in reviews: + ReviewAnalayzer(Review) + + #Ces 3 lignes sont pour comparer avec le score de VADER + score = SIA.polarity_scores(sent) + for criteria in vaderCriteria: + vaderScore[criteria] += score[criteria] averageScore /= len(reviews) print("Format: [[Mot-clé, score associé]]")