mirror of
https://git.roussel.pro/telecom-paris/pact.git
synced 2026-02-09 02:20:17 +01:00
Merge branch 'quentin' of gitlab.enst.fr:pact/2022-2023/pact71 into quentin
This commit is contained in:
101
code/Traitement Langage Naturel/ScoreOnlyReviewAnalysis.py
Normal file
101
code/Traitement Langage Naturel/ScoreOnlyReviewAnalysis.py
Normal file
@@ -0,0 +1,101 @@
|
||||
#Emplacements des fichiers contenants le lexique et les avis
|
||||
lexiconPath = r"C:\Users\kesha\Desktop\TelecomParis\PACT\fr_lexicon.txt"
|
||||
|
||||
#Création d'une liste de listes ordonnée alphabétiquement pour ne pas
|
||||
#avoir à chercher un mot d'un avis dans le lexique en entier à chaque fois.
|
||||
#La dernière case correspond aux expressions n'étant pas des mots.
|
||||
scoreWords = open(lexiconPath, "r")
|
||||
scoreTable = [[] for i in range(27)]
|
||||
line = scoreWords.readline()
|
||||
|
||||
#Fonction d'ajout d'une paire mot-score par ordre alphabétique avec les
|
||||
#expressions n'étant pas des mots à la dernière case.
|
||||
#L'indice de la bonne case est trouvée avec le code ASCII en minuscule
|
||||
#(a vaut 97 et z vaut 122)
|
||||
def add(scoreword):
|
||||
if (ord(scoreword[0][0]) < 97 or ord(scoreword[0][0]) > 122):
|
||||
scoreTable[26].append(scoreword)
|
||||
else:
|
||||
scoreTable[ord(scoreword[0][0])-97].append(scoreword)
|
||||
|
||||
#Ajout des paires mot-score dans scoreTable
|
||||
while (line != ''):
|
||||
line = line.strip().split("->")
|
||||
add([line[0].lower(), float(line[1])])
|
||||
line = scoreWords.readline()
|
||||
scoreWords.close()
|
||||
|
||||
### Partie analyse d'avis ###
|
||||
|
||||
#liste (partielle) de mots-clé pertinents pour un musée
|
||||
keys=['attente', "d'attente", 'queue', 'patienter', 'patience', 'patient',
|
||||
'patients', 'patiente', 'patientes', 'file', 'files',
|
||||
'impolitesse' ,'impolie', 'impolies', 'impoli', 'impolis',
|
||||
'gentillesse', 'amabilité', 'aimable', 'aimables','gentil', 'gentils',
|
||||
'gentille', 'gentilles', 'personnel',
|
||||
'sales', 'sale', 'saleté', 'propre', 'propres', 'propreté',
|
||||
'acceuil', 'prix', 'cher', 'chers', 'chère', 'chères',
|
||||
'onéreux', 'onéreuse', 'onéreuses', 'abordable',
|
||||
'raisonnable', 'raisonnables', 'accessible', 'accessibilité',
|
||||
'handicapé', 'handicapée', 'handicapés', 'handicapées', 'orienter','employé',
|
||||
'employés', 'employées', 'employée', 'agent', 'agente',
|
||||
'orientation', 'orienté', "s'orienter", 'dédale',
|
||||
'désorienter', 'désorienté', 'désorientée', 'désorientés', 'désorientées',
|
||||
'panneau', 'panneaux', 'signalétique', 'labyrinthe',
|
||||
'perdu', 'perdus', 'perdue', 'perdues',
|
||||
'toilettes',
|
||||
'restaurant', 'restaurants', 'restauration', 'manger', 'mangé', 'déjeuner', 'déjeuné']
|
||||
|
||||
#Fonction de recherche d'un mot d'un avis parmis le lexique
|
||||
def search(word):
|
||||
if (len(word) != 0):
|
||||
if (ord(word[0]) < 97 or ord(word[0]) > 122):
|
||||
mots = list(e[0] for e in scoreTable[26])
|
||||
if (word in mots):
|
||||
return([word, scoreTable[26][mots.index(word)][1]])
|
||||
else:
|
||||
return(-1)
|
||||
mots = list(e[0] for e in scoreTable[ord(word[0])-97])
|
||||
if (word in mots):
|
||||
return([word, scoreTable[ord(word[0])-97][mots.index(word)][1]])
|
||||
return(-1)
|
||||
|
||||
#Fonction déterminant si une phrase contient une négation et renvoyant un booléen
|
||||
def isNegative(sentence):
|
||||
if (('ne' in sentence) or ("n'" in sentence) or ("pas" in sentence)):
|
||||
return True
|
||||
return False
|
||||
|
||||
def ReviewAnalyzer(review):
|
||||
reviewScore = 0
|
||||
|
||||
#miniKey donne les mots-clé contenus dans l'avis en train d'être analysé
|
||||
miniKey = []
|
||||
|
||||
### Recherche de mots positifs/négatifs ###
|
||||
|
||||
#On découpe l'avis en une liste de phrases
|
||||
sentences = Review.split('.')
|
||||
for sent in sentences:
|
||||
|
||||
#On découpe la phrase en une liste de mots
|
||||
sentence = list(e.strip(',.') for e in sent.split())
|
||||
for Word in sentence:
|
||||
|
||||
#On met tout les mots en minuscule pour ne pas prendre en compte les majuscules
|
||||
word = Word.lower()
|
||||
temp = search(word)
|
||||
|
||||
#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]
|
||||
|
||||
#Mise à jour du score de l'avis
|
||||
reviewScore += temp[1]
|
||||
|
||||
#Sur demande de Quentin: on ne renvoie que le score de l'avis pour l'instant
|
||||
return(reviewScore)
|
||||
412
code/Traitement Langage Naturel/TALnew.ipynb
Normal file
412
code/Traitement Langage Naturel/TALnew.ipynb
Normal file
@@ -0,0 +1,412 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 39,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"#pip install unidecode\n",
|
||||
"#pip install dataclass\n",
|
||||
"#pip install nltk\n",
|
||||
"#import os\n",
|
||||
"#from unidecode import unidecode\n",
|
||||
"#import nltk\n",
|
||||
"#from dataclasses import dataclass"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Première partie : presentation du problème et du materiel\n",
|
||||
"\n",
|
||||
"Nous cherchons a attribuer à une liste d'avis laissés un score global de satisfaction, ainsi qu'un score de satisfaction concernant chaque point pour lequel il sera particulierement interessant de se pencher (par exemple le delais d'attente dans un parc d'attraction ou la propreté dans un hotel).\n",
|
||||
"\n",
|
||||
"Nous allons pour cela utiliser une base de mots français associés chacun a un score de positivité, ainsi qu'une liste d'avis concernant le musée du Louvre.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 40,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"#Emplacmement du fichier contenant des mots francais associés a une score sous la forme\n",
|
||||
"#mot1->son score\n",
|
||||
"#mot2->son score\n",
|
||||
"#mot3->son score ...\n",
|
||||
"\n",
|
||||
"lexiconPath = r\"fr_lexicon.txt\" \n",
|
||||
"nomsCommunsPath= r\"mots-communs.txt\"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"#Emplacmement du fichier contenant des des avis sur le musée du Louvre sous la forme\n",
|
||||
"#Avis1\n",
|
||||
"#//Avis2\n",
|
||||
"#//Avis3 ...\n",
|
||||
"\n",
|
||||
"reviewPath = r\"LouvreAvis.txt\""
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Nous créons une liste de listes ordonnée alphabétiquement pour ne pas avoir à chercher un mot d'un avis dans le lexique en entier à chaque fois. La dernière case correspond aux expressions n'étant pas des mots."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 41,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"scoreWords = open(lexiconPath, \"r\")\n",
|
||||
"scoreTable = [[] for i in range(27)]\n",
|
||||
"line = scoreWords.readline()\n",
|
||||
"\n",
|
||||
"#Fonction d'ajout d'une paire mot-score par ordre alphabétique avec les\n",
|
||||
"#expressions n'étant pas des mots à la dernière case.\n",
|
||||
"#L'indice de la bonne case est trouvée avec le code ASCII en minuscule\n",
|
||||
"#(a vaut 97 et z vaut 122)\n",
|
||||
"\n",
|
||||
"def add(scoreword):\n",
|
||||
" if (ord(scoreword[0][0]) < 97 or ord(scoreword[0][0]) > 122):\n",
|
||||
" scoreTable[26].append(scoreword)\n",
|
||||
" else:\n",
|
||||
" scoreTable[ord(scoreword[0][0])-97].append(scoreword)\n",
|
||||
" \n",
|
||||
"#Ajout des paires mot-score dans scoreTable\n",
|
||||
"while (line != ''):\n",
|
||||
" line = line.strip().split(\"->\")\n",
|
||||
" add([line[0].lower(), float(line[1])])\n",
|
||||
" line = scoreWords.readline()\n",
|
||||
"scoreWords.close()\n",
|
||||
"\n",
|
||||
"print(line)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 42,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"['abandon', -2.4]\n",
|
||||
"['abandonnant', -1.6]\n",
|
||||
"['abandonne', -1.3]\n",
|
||||
"['badass', 1.4]\n",
|
||||
"['badin', 1.2]\n",
|
||||
"['badine', 1.2]\n",
|
||||
"['cachant', -1.2]\n",
|
||||
"['cache', -0.7]\n",
|
||||
"['cachent', -0.7]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"for i in range (3):\n",
|
||||
" print(scoreTable[i][0])\n",
|
||||
" print(scoreTable[i][1])\n",
|
||||
" print(scoreTable[i][2])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Deuxieme partue : analyse d'avis"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 57,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"C:\\Users\\yanni\\anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:87: FutureWarning: Function get_feature_names is deprecated; get_feature_names is deprecated in 1.0 and will be removed in 1.2. Please use get_feature_names_out instead.\n",
|
||||
" warnings.warn(msg, category=FutureWarning)\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"file = open(reviewPath, \"r\", encoding='UTF-8')\n",
|
||||
"reviews = (file.read()).split('//')\n",
|
||||
" \n",
|
||||
"import pandas as pd\n",
|
||||
"from sklearn.feature_extraction.text import *\n",
|
||||
"dataset = reviews\n",
|
||||
"\n",
|
||||
"mots_communs=[\"\"]\n",
|
||||
" \n",
|
||||
"tfIdfVectorizer=TfidfVectorizer(use_idf=True)\n",
|
||||
"tfIdf = tfIdfVectorizer.fit_transform(dataset)\n",
|
||||
"df = pd.DataFrame(tfIdf[0].T.todense(), index=tfIdfVectorizer.get_feature_names(), columns=[\"TF-IDF\"])\n",
|
||||
"df = df.sort_values('TF-IDF', ascending=False)\n",
|
||||
"liste = df.head(50)\n",
|
||||
"listeMotsTFIDF=list(liste.index)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 58,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"\n",
|
||||
" \n",
|
||||
" mots dans mots communs \n",
|
||||
" \n",
|
||||
" ['homme', 'le', 'de', 'est', 'pas', 'peu', 'un', 'une', 'la', 'des', 'mari', 'femme', 'jour', 'mer', 'temps', 'main', 'chose', 'vie', 'yeux', 'heure', 'enfant', 'fois', 'moment', 'tête', 'père', 'fille', 'coeur', 'an', 'terre', 'dieu', 'monsieur', 'voix', 'maison', 'coup', 'air', 'mot', 'ami', 'porte', 'amour', 'pied', 'pays', 'ciel', 'frère', 'regard', 'âme', 'côté', 'ville', 'rue', 'soir', 'chambre', 'pas', 'soleil', 'roi', 'état', 'corps', 'bras', 'parti', 'année', 'visage', 'lettre', 'franc', 'fond', 'force', 'effet', 'saint', 'idée', 'mois', 'fils', 'raison', 'point', 'personne', 'peuple', 'fait', 'parole', 'guerre', 'pensée', 'affaire', 'matin', 'pierre', 'doute', 'front', 'ombre', 'part', 'maître', 'besoin', 'question', 'peine', 'madame', 'sorte', 'figure', 'droit', 'bout', 'bois', 'mari', 'feu', 'partie', 'face', 'mouvement', 'arbre', 'cas', 'mur', 'ordre', 'est', 'travers', 'instant', 'façon', 'oeil', 'forme', 'cheveu', 'suite', 'être', 'nature', 'or', 'pouvoir', 'bouche', 'sens', 'cri', 'espèce', 'cheval', 'loi', 'ministre', 'société', 'politique', 'oreille', 'fortune', 'compte', 'manier', 'action', 'garçon', 'exemple', 'premier', 'projet', 'étude', 'journal', 'geste', 'situation', 'oiseau', 'siècle', 'million', 'groupe', 'centre', 'chien', 'peau', 'reste', 'nombre', 'mesure', 'article', 'vue', 'âge', 'système', 'rêve', 'rapport', 'soldat', 'lèvre', 'signe', 'vérité', 'dos', 'dame', 'doigt', 'objet', 'fer', 'lendemain', 'train', 'papa', 'secret', 'haut', 'vieillard', 'docteur', 'ton', 'jambe', 'minute', 'nuage', 'présence', 'épaule', 'feuille', 'résultat', 'hôtel', 'semaine', 'forêt', 'qualité', 'prince', 'bien', 'médecin', 'volonté', 'seigneur', 'ligne', 'condition', 'classe', 'voyage', 'présent', 'CommonWords1.txt', 'tout', 'même', 'autre', 'seul', 'jeune', 'premier', 'quel', 'dernier', 'blanc', 'vrai', 'toute', 'rouge', 'humain', 'général', 'français', 'politique', 'bleu', 'social', 'certain', 'différent', 'ne', 'pas', 'si', 'là', 'même', 'tout', 'encore', 'aussi', 'alors', 'non', 'très', 'ainsi', 'ici', 'oui', 'déjà', 'tant', 'enfin', 'maintenant', 'point', 'presque', 'ailleurs', \"aujourd'hui\", 'autour', 'dessus', 'comme', 'comment', 'autant', \"d'abord\", 'surtout', 'cependant', 'pourtant', 'ci', 'vraiment', 'bientôt', 'partout', 'debout', 'plutôt', 'combien', 'hier', 'parfois', 'et', 'que', 'comme', 'mais', 'ou', 'quand', 'si', 'puis', 'donc', 'car', 'ni', 'parce que', 'pourquoi', 'lorsque', 'tandis que', 'puisque', 'comment', 'soit', 'or', 'le', 'un', 'son', 'ce', 'du', 'au', 'de', 'mon', 'leur', 'notre', 'votre', 'quelque', 'ton', 'tout', 'chaque', 'aucun', 'tel', 'certain', 'plusieurs', \"d'autres\", 'deux', 'cent', 'mille', 'trois', 'quatre', 'vingt', 'cinq', 'dix', 'neuf', 'six', 'huit', 'sept', 'trente', 'quarante', 'cinquante', 'quinze', 'douze', 'un', 'à', 'en', 'dans', 'pour', 'par', 'sur', 'avec', 'sans', 'sous', 'après', 'entre', 'vers', 'chez', 'jusque', 'contre', 'devant', 'depuis', 'pendant', 'avant', 'voilà', 'près', 'dès', 'malgré', 'voici', 'selon', 'derrière', 'parmi', 'afin de', 'auprès', 'quant à', 'hors', 'durant', 'grâce', 'il', 'je', 'se', 'qui', 'elle', 'ce', 'le', 'que', 'vous', 'me', 'on', 'lui', 'nous', 'y', 'en', 'où', 'tu', 'moi', 'te', 'celui', 'dont', 'tout', 'ça', 'cela', 'autre', 'un', 'toi', 'lequel', 'leur', 'quoi', \"l'un\", 'chacun', 'auquel', \"quelqu'un\", \"d'autres\", 'ceci', \"l'une\", 'soi', 'sien', 'mien', 'aucu']\n",
|
||||
"\n",
|
||||
" \n",
|
||||
" mots dans khey de base \n",
|
||||
" \n",
|
||||
" ['attente', \"d'attente\", 'queue', 'patienter', 'patience', 'patient', 'patients', 'patiente', 'patientes', 'impolitesse', 'impolie', 'impolies', 'impoli', 'impolis', 'gentillesse', 'amabilité', 'aimable', 'aimables', 'gentil', 'gentils', 'gentille', 'gentilles', 'personnel', 'sales', 'sale', 'saleté', 'propre', 'propres', 'propreté', 'acceuil', 'prix', 'cher', 'chers', 'chère', 'chères', 'onéreux', 'onéreuse', 'onéreuses', 'abordable', 'raisonnable', 'raisonnables', 'accessible', 'accessibilité', 'orienter', 'employé', 'employés', 'employées', 'employée', 'orientation', 'orienté', \"s'orienter\", 'désorienter', 'désorienté', 'désorientée', 'désorientés', 'désorientées', 'panneau', 'panneaux', 'signalétique', 'labyrinthe', 'perdu', 'perdus', 'perdue', 'perdues']\n",
|
||||
"\n",
|
||||
" \n",
|
||||
" mots dans listeMotsTFIDF sans les mots communs \n",
|
||||
" \n",
|
||||
" ['regardé', 'venu', 'trouve', 'travaillant', 'carte', 'securitas', 'richelieu', 'responsable', '10h30', 'public', 'escalator', 'grossièrement', 'handicapé', 'paris', 'inadmissible', 'jo', 'niveau', 'lamentable', 'montant', 'rendu', 'accueillis', 'épouse', 'accueil', 'agente', 'accéder', 'arrivée', 'sécurité', 'heureusement', 'avait', 'été', 'avons', 'faire']\n",
|
||||
"\n",
|
||||
" \n",
|
||||
" mots dans keys \n",
|
||||
" \n",
|
||||
" ['attente', \"d'attente\", 'queue', 'patienter', 'patience', 'patient', 'patients', 'patiente', 'patientes', 'impolitesse', 'impolie', 'impolies', 'impoli', 'impolis', 'gentillesse', 'amabilité', 'aimable', 'aimables', 'gentil', 'gentils', 'gentille', 'gentilles', 'personnel', 'sales', 'sale', 'saleté', 'propre', 'propres', 'propreté', 'acceuil', 'prix', 'cher', 'chers', 'chère', 'chères', 'onéreux', 'onéreuse', 'onéreuses', 'abordable', 'raisonnable', 'raisonnables', 'accessible', 'accessibilité', 'orienter', 'employé', 'employés', 'employées', 'employée', 'orientation', 'orienté', \"s'orienter\", 'désorienter', 'désorienté', 'désorientée', 'désorientés', 'désorientées', 'panneau', 'panneaux', 'signalétique', 'labyrinthe', 'perdu', 'perdus', 'perdue', 'perdues', 'regardé', 'venu', 'trouve', 'travaillant', 'carte', 'securitas', 'richelieu', 'responsable', '10h30', 'public', 'escalator', 'grossièrement', 'handicapé', 'paris', 'inadmissible', 'jo', 'niveau', 'lamentable', 'montant', 'rendu', 'accueillis', 'épouse', 'accueil', 'agente', 'accéder', 'arrivée', 'sécurité', 'heureusement', 'avait', 'été', 'avons', 'faire']\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"#print(listeMotsTFIDF)\n",
|
||||
"\n",
|
||||
"print(\"\\n \\n mots dans mots communs \\n \\n\", motsCommuns) \n",
|
||||
"\n",
|
||||
"\n",
|
||||
"#liste (partielle) de mots-clé pertinents pour un musée\n",
|
||||
"keys=['attente', \"d'attente\", 'queue', 'patienter', 'patience', 'patient',\n",
|
||||
" 'patients', 'patiente', 'patientes',\n",
|
||||
" 'impolitesse' ,'impolie', 'impolies', 'impoli', 'impolis',\n",
|
||||
" 'gentillesse', 'amabilité', 'aimable', 'aimables','gentil', 'gentils',\n",
|
||||
" 'gentille', 'gentilles', 'personnel',\n",
|
||||
" 'sales', 'sale', 'saleté', 'propre', 'propres', 'propreté',\n",
|
||||
" 'acceuil', 'prix', 'cher', 'chers', 'chère', 'chères',\n",
|
||||
" 'onéreux', 'onéreuse', 'onéreuses', 'abordable',\n",
|
||||
" 'raisonnable', 'raisonnables', 'accessible', 'accessibilité', 'orienter','employé',\n",
|
||||
" 'employés', 'employées', 'employée',\n",
|
||||
" 'orientation', 'orienté', \"s'orienter\",\n",
|
||||
" 'désorienter', 'désorienté', 'désorientée', 'désorientés', 'désorientées',\n",
|
||||
" 'panneau', 'panneaux', 'signalétique', 'labyrinthe',\n",
|
||||
" 'perdu', 'perdus', 'perdue', 'perdues']\n",
|
||||
"\n",
|
||||
"print(\"\\n \\n mots dans khey de base \\n \\n\", keys) \n",
|
||||
"\n",
|
||||
"\n",
|
||||
"file = open(nomsCommunsPath, \"r\")\n",
|
||||
"motsCommuns = file.readlines()\n",
|
||||
"file.close()\n",
|
||||
"\n",
|
||||
"for i in range (len(motsCommuns)) :\n",
|
||||
" motsCommuns[i] = motsCommuns[i][:-1]\n",
|
||||
" \n",
|
||||
"for mot in listeMotsTFIDF :\n",
|
||||
" if mot in motsCommuns :\n",
|
||||
" listeMotsTFIDF=[i for i in listeMotsTFIDF if i!=mot]\n",
|
||||
"\n",
|
||||
"for mot in listeMotsTFIDF :\n",
|
||||
" if not mot in keys :\n",
|
||||
" keys.append(mot)\n",
|
||||
"print(\"\\n \\n mots dans listeMotsTFIDF sans les mots communs \\n \\n\", listeMotsTFIDF) \n",
|
||||
"print(\"\\n \\n mots dans keys \\n \\n\", keys)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 59,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"#Tableau de paires mots-clé, score associé\n",
|
||||
"keyWords = []\n",
|
||||
"\n",
|
||||
"#Score moyen d'un avis\n",
|
||||
"averageScore = 0\n",
|
||||
"\n",
|
||||
"#Fonction de recherche d'un mot d'un avis parmis le lexique\n",
|
||||
"def search(word):\n",
|
||||
" if (len(word) != 0):\n",
|
||||
" if (ord(word[0]) < 97 or ord(word[0]) > 122):\n",
|
||||
" mots = list(e[0] for e in scoreTable[26])\n",
|
||||
" if (word in mots):\n",
|
||||
" return([word, scoreTable[26][mots.index(word)][1]])\n",
|
||||
" else:\n",
|
||||
" return(-1)\n",
|
||||
" mots = list(e[0] for e in scoreTable[ord(word[0])-97])\n",
|
||||
" if (word in mots):\n",
|
||||
" return([word, scoreTable[ord(word[0])-97][mots.index(word)][1]])\n",
|
||||
" return(-1)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 60,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"for Review in reviews:\n",
|
||||
" #print(Review)\n",
|
||||
" reviewScore = 0\n",
|
||||
" miniKey = []\n",
|
||||
" #recherche de mots positifs/négatifs\n",
|
||||
" review = list(e.strip(',.') for e in Review.split())\n",
|
||||
" for Word in review:\n",
|
||||
" word = Word.lower()\n",
|
||||
" temp = search(word)\n",
|
||||
" #recherche d'un éventuel mot-clé associé à ce caractère positif/négatif\n",
|
||||
" if (temp != -1):\n",
|
||||
" for key in keys:\n",
|
||||
" if (key in review):\n",
|
||||
" cles = list(e[0] for e in keyWords)\n",
|
||||
" if (key in cles):\n",
|
||||
" keyWords[cles.index(key)][1] += temp[1]\n",
|
||||
" else:\n",
|
||||
" keyWords.append([key, temp[1]])\n",
|
||||
" miniKey.append(key)\n",
|
||||
" reviewScore += temp[1]\n",
|
||||
" averageScore += reviewScore\n",
|
||||
" #Caractéristique de l'avis analysé\n",
|
||||
" miniKey = set(miniKey)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Troisiere partie : affichage des resultats"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 61,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Format: [[Mot-clé, score associé]]\n",
|
||||
"[['regardé', -0.7999999999999998], ['venu', -0.7999999999999998], ['trouve', -0.7999999999999998], ['carte', -0.7999999999999998], ['responsable', -0.7999999999999998], ['10h30', -0.7999999999999998], ['public', -0.7999999999999998], ['escalator', -0.7999999999999998], ['grossièrement', -0.7999999999999998], ['handicapé', -0.7999999999999998], ['inadmissible', -0.7999999999999998], ['niveau', -0.7999999999999998], ['lamentable', -0.7999999999999998], ['montant', -0.7999999999999998], ['rendu', -0.7999999999999998], ['accueillis', -0.7999999999999998], ['épouse', -0.7999999999999998], ['agente', -0.7999999999999998], ['accéder', -0.8999999999999999], ['sécurité', 2.4], ['heureusement', -0.7999999999999998], ['avait', 6.6], ['été', -0.8999999999999999], ['avons', 4.800000000000001], ['faire', 5.300000000000001], ['cher', -0.5000000000000002], ['orientation', -0.5000000000000002], ['abordable', 2.4000000000000004], ['personnel', 2.1999999999999997], [\"s'orienter\", 4.5], ['chères', -2.4], ['queue', -0.09999999999999876], ['orienter', -0.30000000000000004], ['prix', 7.4], ['raisonnable', 7.4], [\"d'attente\", 0.9000000000000012]]\n",
|
||||
"Nombre d'avis: 23\n",
|
||||
"Score moyen d'un avis: 1.6478260869565218\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"averageScore /= len(reviews)\n",
|
||||
"print(\"Format: [[Mot-clé, score associé]]\")\n",
|
||||
"print(keyWords)\n",
|
||||
"print(\"Nombre d'avis: \", len(reviews))\n",
|
||||
"print(\"Score moyen d'un avis: \", averageScore)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3 (ipykernel)",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.9.13"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
382
code/Traitement Langage Naturel/mots-communs.txt
Normal file
382
code/Traitement Langage Naturel/mots-communs.txt
Normal file
@@ -0,0 +1,382 @@
|
||||
homme
|
||||
le
|
||||
de
|
||||
est
|
||||
pas
|
||||
peu
|
||||
un
|
||||
une
|
||||
la
|
||||
des
|
||||
mari
|
||||
femme
|
||||
jour
|
||||
mer
|
||||
temps
|
||||
main
|
||||
chose
|
||||
vie
|
||||
yeux
|
||||
heure
|
||||
enfant
|
||||
fois
|
||||
moment
|
||||
tête
|
||||
père
|
||||
fille
|
||||
coeur
|
||||
an
|
||||
terre
|
||||
dieu
|
||||
monsieur
|
||||
voix
|
||||
maison
|
||||
coup
|
||||
air
|
||||
mot
|
||||
ami
|
||||
porte
|
||||
amour
|
||||
pied
|
||||
pays
|
||||
ciel
|
||||
frère
|
||||
regard
|
||||
âme
|
||||
côté
|
||||
ville
|
||||
rue
|
||||
soir
|
||||
chambre
|
||||
pas
|
||||
soleil
|
||||
roi
|
||||
état
|
||||
corps
|
||||
bras
|
||||
parti
|
||||
année
|
||||
visage
|
||||
lettre
|
||||
franc
|
||||
fond
|
||||
force
|
||||
effet
|
||||
saint
|
||||
idée
|
||||
mois
|
||||
fils
|
||||
raison
|
||||
point
|
||||
personne
|
||||
peuple
|
||||
fait
|
||||
parole
|
||||
guerre
|
||||
pensée
|
||||
affaire
|
||||
matin
|
||||
pierre
|
||||
doute
|
||||
front
|
||||
ombre
|
||||
part
|
||||
maître
|
||||
besoin
|
||||
question
|
||||
peine
|
||||
madame
|
||||
sorte
|
||||
figure
|
||||
droit
|
||||
bout
|
||||
bois
|
||||
mari
|
||||
feu
|
||||
partie
|
||||
face
|
||||
mouvement
|
||||
arbre
|
||||
cas
|
||||
mur
|
||||
ordre
|
||||
est
|
||||
travers
|
||||
instant
|
||||
façon
|
||||
oeil
|
||||
forme
|
||||
cheveu
|
||||
suite
|
||||
être
|
||||
nature
|
||||
or
|
||||
pouvoir
|
||||
bouche
|
||||
sens
|
||||
cri
|
||||
espèce
|
||||
cheval
|
||||
loi
|
||||
ministre
|
||||
société
|
||||
politique
|
||||
oreille
|
||||
fortune
|
||||
compte
|
||||
manier
|
||||
action
|
||||
garçon
|
||||
exemple
|
||||
premier
|
||||
projet
|
||||
étude
|
||||
journal
|
||||
geste
|
||||
situation
|
||||
oiseau
|
||||
siècle
|
||||
million
|
||||
groupe
|
||||
centre
|
||||
chien
|
||||
peau
|
||||
reste
|
||||
nombre
|
||||
mesure
|
||||
article
|
||||
vue
|
||||
âge
|
||||
système
|
||||
rêve
|
||||
rapport
|
||||
soldat
|
||||
lèvre
|
||||
signe
|
||||
vérité
|
||||
dos
|
||||
dame
|
||||
doigt
|
||||
objet
|
||||
fer
|
||||
lendemain
|
||||
train
|
||||
papa
|
||||
secret
|
||||
haut
|
||||
vieillard
|
||||
docteur
|
||||
ton
|
||||
jambe
|
||||
minute
|
||||
nuage
|
||||
présence
|
||||
épaule
|
||||
feuille
|
||||
résultat
|
||||
hôtel
|
||||
semaine
|
||||
forêt
|
||||
qualité
|
||||
prince
|
||||
bien
|
||||
médecin
|
||||
volonté
|
||||
seigneur
|
||||
ligne
|
||||
condition
|
||||
classe
|
||||
voyage
|
||||
présent
|
||||
CommonWords1.txt
|
||||
tout
|
||||
même
|
||||
autre
|
||||
seul
|
||||
jeune
|
||||
premier
|
||||
quel
|
||||
dernier
|
||||
blanc
|
||||
vrai
|
||||
toute
|
||||
rouge
|
||||
humain
|
||||
général
|
||||
français
|
||||
politique
|
||||
bleu
|
||||
social
|
||||
certain
|
||||
différent
|
||||
ne
|
||||
pas
|
||||
si
|
||||
là
|
||||
même
|
||||
tout
|
||||
encore
|
||||
aussi
|
||||
alors
|
||||
non
|
||||
très
|
||||
ainsi
|
||||
ici
|
||||
oui
|
||||
déjà
|
||||
tant
|
||||
enfin
|
||||
maintenant
|
||||
point
|
||||
presque
|
||||
ailleurs
|
||||
aujourd'hui
|
||||
autour
|
||||
dessus
|
||||
comme
|
||||
comment
|
||||
autant
|
||||
d'abord
|
||||
surtout
|
||||
cependant
|
||||
pourtant
|
||||
ci
|
||||
vraiment
|
||||
bientôt
|
||||
partout
|
||||
debout
|
||||
plutôt
|
||||
combien
|
||||
hier
|
||||
parfois
|
||||
et
|
||||
que
|
||||
comme
|
||||
mais
|
||||
ou
|
||||
quand
|
||||
si
|
||||
puis
|
||||
donc
|
||||
car
|
||||
ni
|
||||
parce que
|
||||
pourquoi
|
||||
lorsque
|
||||
tandis que
|
||||
puisque
|
||||
comment
|
||||
soit
|
||||
or
|
||||
le
|
||||
un
|
||||
son
|
||||
ce
|
||||
du
|
||||
au
|
||||
de
|
||||
mon
|
||||
leur
|
||||
notre
|
||||
votre
|
||||
quelque
|
||||
ton
|
||||
tout
|
||||
chaque
|
||||
aucun
|
||||
tel
|
||||
certain
|
||||
plusieurs
|
||||
d'autres
|
||||
deux
|
||||
cent
|
||||
mille
|
||||
trois
|
||||
quatre
|
||||
vingt
|
||||
cinq
|
||||
dix
|
||||
neuf
|
||||
six
|
||||
huit
|
||||
sept
|
||||
trente
|
||||
quarante
|
||||
cinquante
|
||||
quinze
|
||||
douze
|
||||
un
|
||||
à
|
||||
en
|
||||
dans
|
||||
pour
|
||||
par
|
||||
sur
|
||||
avec
|
||||
sans
|
||||
sous
|
||||
après
|
||||
entre
|
||||
vers
|
||||
chez
|
||||
jusque
|
||||
contre
|
||||
devant
|
||||
depuis
|
||||
pendant
|
||||
avant
|
||||
voilà
|
||||
près
|
||||
dès
|
||||
malgré
|
||||
voici
|
||||
selon
|
||||
derrière
|
||||
parmi
|
||||
afin de
|
||||
auprès
|
||||
quant à
|
||||
hors
|
||||
durant
|
||||
grâce
|
||||
il
|
||||
je
|
||||
se
|
||||
qui
|
||||
elle
|
||||
ce
|
||||
le
|
||||
que
|
||||
vous
|
||||
me
|
||||
on
|
||||
lui
|
||||
nous
|
||||
y
|
||||
en
|
||||
où
|
||||
tu
|
||||
moi
|
||||
te
|
||||
celui
|
||||
dont
|
||||
tout
|
||||
ça
|
||||
cela
|
||||
autre
|
||||
un
|
||||
toi
|
||||
lequel
|
||||
leur
|
||||
quoi
|
||||
l'un
|
||||
chacun
|
||||
auquel
|
||||
quelqu'un
|
||||
d'autres
|
||||
ceci
|
||||
l'une
|
||||
soi
|
||||
sien
|
||||
mien
|
||||
aucun
|
||||
@@ -18,7 +18,7 @@ class HandDetector():
|
||||
min_detection_confidence=0.5,
|
||||
min_tracking_confidence=0.5)
|
||||
#Paramètres
|
||||
self.BUFFER_LENGTH = 30
|
||||
self.BUFFER_LENGTH = 60
|
||||
self.DETECTION_THRESHOLD = 3/4
|
||||
|
||||
self.resultBuffer = []
|
||||
@@ -31,10 +31,13 @@ class HandDetector():
|
||||
i=0
|
||||
j=0
|
||||
for cpt in range (0,4):
|
||||
V1=[handLandmarks[(4*cpt)+5][0]-handLandmarks[(4*cpt)+0][0],handLandmarks[(4*cpt)+5][1]-handLandmarks[(4*cpt)+0][1]]
|
||||
V2=[handLandmarks[(4*cpt)+8][0]-handLandmarks[(4*cpt)+5][0],handLandmarks[(4*cpt)+8][1]-handLandmarks[(4*cpt)+5][1]]
|
||||
j1=np.dot(V1,V2)
|
||||
V1=[handLandmarks[(4*cpt)+6][0]-handLandmarks[(4*cpt)+5][0],handLandmarks[(4*cpt)+6][1]-handLandmarks[(4*cpt)+5][1]]
|
||||
V2=[handLandmarks[(4*cpt)+8][0]-handLandmarks[(4*cpt)+6][0],handLandmarks[(4*cpt)+8][1]-handLandmarks[(4*cpt)+6][1]]
|
||||
j=np.dot(V1,V2)
|
||||
if (j>0.005):
|
||||
j2=np.dot(V1,V2)
|
||||
if (j1>0 and j2>0):
|
||||
return etatDuPouce[0]
|
||||
V1=[handLandmarks[4][0]-handLandmarks[1][0],handLandmarks[4][1]-handLandmarks[1][1]]
|
||||
V2=[handLandmarks[2][0]-handLandmarks[1][0],handLandmarks[2][1]-handLandmarks[1][1]]
|
||||
@@ -67,20 +70,24 @@ class HandDetector():
|
||||
for landmarks in hand_landmarks.landmark:
|
||||
handLandmarks.append([landmarks.x, landmarks.y])
|
||||
#On ajoute la position de chaque mains a une liste
|
||||
handsPositions.append(self.reconnaissancePouce(handLandmarks))
|
||||
handsPositions.append([self.reconnaissancePouce(handLandmarks), handLandmarks])
|
||||
|
||||
#On calcule le résultat suivant la position des deux mains
|
||||
if(len(handsPositions) == 2):
|
||||
if(handsPositions[0] == handsPositions[1]):
|
||||
if(handsPositions[0][0] == handsPositions[1][0]):
|
||||
thumbState = handsPositions[0]
|
||||
elif(handsPositions[0] == "neutre"):
|
||||
handLandmarks = handsPositions[0][1]
|
||||
elif(handsPositions[0][0] == "neutre"):
|
||||
thumbState = handsPositions[1]
|
||||
elif(handsPositions[1] == "neutre"):
|
||||
thumbState = handsPositions[0]
|
||||
handLandmarks = handsPositions[1][1]
|
||||
elif(handsPositions[1][0] == "neutre"):
|
||||
thumbState = handsPositions[0][0]
|
||||
handLandmarks = handsPositions[0][1]
|
||||
else:
|
||||
thumbState = "neutre"
|
||||
else:
|
||||
thumbState = handsPositions[0]
|
||||
thumbState = handsPositions[0][0]
|
||||
handsLandmarks = handsPositions[0][1]
|
||||
|
||||
self.resultBuffer.append(thumbState)
|
||||
if(len(self.resultBuffer) > self.BUFFER_LENGTH):
|
||||
@@ -101,3 +108,7 @@ class HandDetector():
|
||||
return False
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
h = HandDetector()
|
||||
while(1):
|
||||
print(h.detect())
|
||||
|
||||
9
code/backend_reconnaissance/telereview.service
Normal file
9
code/backend_reconnaissance/telereview.service
Normal file
@@ -0,0 +1,9 @@
|
||||
[Unit]
|
||||
Description=Téléreview scripts
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/home/telereview/pact71/code/setup.sh
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -1,6 +1,4 @@
|
||||
import nltk
|
||||
import os
|
||||
from dataclasses import dataclass
|
||||
from vaderSentiment_fr.vaderSentiment import SentimentIntensityAnalyzer
|
||||
|
||||
#Emplacements des fichiers contenants le lexique et les avis
|
||||
lexiconPath = r"C:\Users\kesha\Desktop\TelecomParis\PACT\fr_lexicon.txt"
|
||||
@@ -32,24 +30,29 @@ scoreWords.close()
|
||||
|
||||
### Partie analyse d'avis ###
|
||||
|
||||
file = open(reviewPath, "r")
|
||||
|
||||
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',
|
||||
'patients', 'patiente', 'patientes', 'file', 'files',
|
||||
'impolitesse' ,'impolie', 'impolies', 'impoli', 'impolis',
|
||||
'gentillesse', 'amabilité', 'aimable', 'aimables','gentil', 'gentils',
|
||||
'gentille', 'gentilles', 'personnel',
|
||||
'sales', 'sale', 'saleté', 'propre', 'propres', 'propreté',
|
||||
'acceuil', 'prix', 'cher', 'chers', 'chère', 'chères',
|
||||
'onéreux', 'onéreuse', 'onéreuses', 'abordable',
|
||||
'raisonnable', 'raisonnables', 'accessible', 'accessibilité', 'orienter','employé',
|
||||
'employés', 'employées', 'employée',
|
||||
'orientation', 'orienté', "s'orienter",
|
||||
'raisonnable', 'raisonnables', 'accessible', 'accessibilité',
|
||||
'handicapé', 'handicapée', 'handicapés', 'handicapées', 'orienter','employé',
|
||||
'employés', 'employées', 'employée', 'agent', 'agente',
|
||||
'orientation', 'orienté', "s'orienter", 'dédale',
|
||||
'désorienter', 'désorienté', 'désorientée', 'désorientés', 'désorientées',
|
||||
'panneau', 'panneaux', 'signalétique', 'labyrinthe',
|
||||
'perdu', 'perdus', 'perdue', 'perdues']
|
||||
'perdu', 'perdus', 'perdue', 'perdues',
|
||||
'toilettes',
|
||||
'restaurant', 'restaurants', 'restauration', 'manger', 'mangé', 'déjeuner', 'déjeuné']
|
||||
|
||||
#Tableau de paires mots-clé, score associé
|
||||
keyWords = []
|
||||
@@ -57,6 +60,11 @@ 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):
|
||||
@@ -71,35 +79,82 @@ def search(word):
|
||||
return([word, scoreTable[ord(word[0])-97][mots.index(word)][1]])
|
||||
return(-1)
|
||||
|
||||
for Review in reviews:
|
||||
#print(Review)
|
||||
#Fonction déterminant si une phrase contient une négation et renvoyant un booléen
|
||||
def isNegative(sentence):
|
||||
if (('ne' in sentence) or ("n'" in sentence) or ("pas" in sentence)):
|
||||
return True
|
||||
return False
|
||||
|
||||
vaderCriteria = ['neg', 'neu', 'pos', 'compound']
|
||||
|
||||
def ReviewAnalyzer(review):
|
||||
reviewScore = 0
|
||||
|
||||
#miniKey donne les mots-clé contenus dans l'avis en train d'être analysé
|
||||
miniKey = []
|
||||
#recherche de mots positifs/négatifs
|
||||
review = list(e.strip(',.') for e in Review.split())
|
||||
for Word in review:
|
||||
word = Word.lower()
|
||||
temp = search(word)
|
||||
#recherche d'un éventuel mot-clé associé à ce caractère positif/négatif
|
||||
if (temp != -1):
|
||||
for key in keys:
|
||||
if (key in review):
|
||||
cles = list(e[0] for e in keyWords)
|
||||
if (key in cles):
|
||||
keyWords[cles.index(key)][1] += temp[1]
|
||||
else:
|
||||
keyWords.append([key, temp[1]])
|
||||
miniKey.append(key)
|
||||
reviewScore += temp[1]
|
||||
averageScore += reviewScore
|
||||
#Caractéristique de l'avis analysé
|
||||
|
||||
### Recherche de mots positifs/négatifs ###
|
||||
|
||||
#On découpe l'avis en une liste de phrases
|
||||
sentences = Review.split('.')
|
||||
for sent in sentences:
|
||||
|
||||
#On découpe la phrase en une liste de mots
|
||||
sentence = list(e.strip(',.') for e in sent.split())
|
||||
for Word in sentence:
|
||||
|
||||
#On met tout les mots en minuscule pour ne pas prendre en compte les majuscules
|
||||
word = Word.lower()
|
||||
temp = search(word)
|
||||
|
||||
#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):
|
||||
|
||||
#Récupération des mots-clés déjà détectés dans tous les avis
|
||||
cles = list(e[0] for e in keyWords)
|
||||
|
||||
#En fonction de si key a déjà été détecté auparavant,
|
||||
#et donc qu'il est dans keyWords avec un score associé,
|
||||
#on augmente le score ou sinon, on crée une paire mot-clé score
|
||||
if (key in cles):
|
||||
keyWords[cles.index(key)][1] += temp[1]
|
||||
else:
|
||||
keyWords.append([key, temp[1]])
|
||||
|
||||
#Rajout du mot-clé key dans la liste des mots-clé trouvés dans cet avis
|
||||
miniKey.append(key)
|
||||
|
||||
#Mise à jour du score de l'avis
|
||||
reviewScore += temp[1]
|
||||
|
||||
#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é]]")
|
||||
print(keyWords)
|
||||
for e in keyWords:
|
||||
print(e)
|
||||
print('')
|
||||
print("Nombre d'avis: ", len(reviews))
|
||||
print("Score moyen d'un avis: ", averageScore)
|
||||
for criteria in vaderCriteria:
|
||||
vaderScore[criteria] /= len(reviews)
|
||||
print("Score moyen de vader d'un avis: ", vaderScore)
|
||||
file.close()
|
||||
|
||||
Reference in New Issue
Block a user