From b211b2faaa9b6854cf3846b8060851aefff71306 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Pelletier?= Date: Sat, 2 Nov 2019 12:59:54 -0400 Subject: [PATCH] =?UTF-8?q?tableau=20des=20m=C3=A9triques=20en=20LaTeX=20e?= =?UTF-8?q?t=20d=C3=A9but=20du=20rapport.=20Makefile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 +++ Makefile | 5 +++ rapport.md | 66 +++++++++++++++++++++++++++++++ sentiment_analysis.py | 91 +++++++++++++++++++++++++++++++------------ 4 files changed, 142 insertions(+), 25 deletions(-) create mode 100644 Makefile create mode 100644 rapport.md diff --git a/.gitignore b/.gitignore index 6dbccb1..31b7d85 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,7 @@ +__pycache__/ data/ +*.log +*.tex +*.aux +*.pdf diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ac9e4a1 --- /dev/null +++ b/Makefile @@ -0,0 +1,5 @@ +table_metriques: + pdflatex table_metriques_nb.tex + pdflatex table_metriques_rl.tex +build: rapport.md table_metriques + pandoc rapport.md -o rapport.pdf diff --git a/rapport.md b/rapport.md new file mode 100644 index 0000000..57f7ff8 --- /dev/null +++ b/rapport.md @@ -0,0 +1,66 @@ +--- +title: IFT-7022 - Traitement automatique de la langue naturelle +author: François Pelletier (908 144 032) +date: 4 novembre 2019 +geometry: "left=3cm,right=3cm,top=2cm,bottom=2cm" +output: pdf_document +--- + +# Travail pratique 2 + +## Classification de textes - analyse de sentiments + +### Introduction + +L'objectif de cet exercice est de construire des modèles qui permettent de classifier des commentaires variés selon leur polarité. Nous disposons d'un jeu d'entraînement balancé composé de 3000 commentaires positifs et 3000 négatifs. Le jeu de test est aussi balancé et est composé de 986 commentaires positifs et 982 négatifs. Tous les commentaires sont en anglais. + +### Prétraitement + +Nous effectuons quatre étapes de prétraitement: + +- Tokenisation +- Normalisation +- Sélection des types +- Vectorisation + +Pour chacune de ces étapes, certaines techniques seront expérimentées. Celles-ci produisent, aprèsla dernière étape, une matrice creuse de caractéristiques qui servira à entraîner les différents modèles. Nous ajoutons trois caractéristiques additionnelles à cette matrice, soit les nombres de mots positifs et négatifs, et le nombre total de mot du document. + +#### Tokenisation + +#### Normalisation + +#### Sélection des types + +#### Vectorisation + +### Entraînement des modèles + +Deux types de modèles sont entrainés: + +- Naive Bayes +- Régression logistique + +#### Naive Bayes + +#### Régression logistique + +### Analyse de la performance + +Pour chacun des modèles entraînés, différentes métriques de performance sont calculées à l'aide du jeu de données de test. + +![Métriques de performance: Naive Bayes](table_metriques_nb.pdf) + +![Métriques de performance: Régression logistique](table_metriques_rl.pdf) + +### Conclusion + +## Analyse syntaxique - portée d'une négation + +### Introduction + +### Conclusion + +## Références + + + diff --git a/sentiment_analysis.py b/sentiment_analysis.py index c016134..dff2c20 100644 --- a/sentiment_analysis.py +++ b/sentiment_analysis.py @@ -49,22 +49,22 @@ if __name__ == '__main__': # Méthodes -norm_names = { - 0:"Stemming", - 1:"Lemmatisation" -} - -select_names = { - 0:"Fréquence", - 1:"Mot-outils", - 2:"Classe ouverte" -} - -vectorizer_names = { - 0:"Compteur", - 1:"Occurence", - 2:"TF-IDF" -} + norm_names = { + 0:"Stemm.", + 1:"Lemm." + } + + select_names = { + 0:"Fréq.", + 1:"M. outil", + 2:"Cl. ouv." + } + + vectorizer_names = { + 0:"Compt.", + 1:"Occ.", + 2:"TF-IDF" + } # Tokenisation @@ -241,13 +241,54 @@ vectorizer_names = { cm_nb[norm_m][sel_m][vect_m]+ cm_reg[norm_m][sel_m][vect_m]) - table_metriques_df = pd.DataFrame(table_metriques,columns=['Normalisation', - 'Sélection', - 'Vectorisation', - 'Précision NB', - 'Rappel NB', - 'Exactitude NB', - 'Précision RL', - 'Rappel RL', - 'Exactitude RL']) + table_metriques_df = pd.DataFrame(table_metriques,columns=['Norm.', + 'Sélect.', + 'Vect.', + 'Préc. NB', + 'Rappel NB', + 'Exac. NB', + 'Préc. RL', + 'Rappel RL', + 'Exac. RL']) + # Tableau des métrique Naive Bayes + + f = open("table_metriques_nb.tex","w") + f.write( + r""" + \documentclass[preview]{standalone} + \usepackage{booktabs} + \begin{document} + """) + f.write(table_metriques_df[['Norm.', + 'Sélect.', + 'Vect.', + 'Préc. NB', + 'Rappel NB', + 'Exac. NB']].to_latex()) + f.write( + r""" + \end{document} + """) + f.close() + + # Tableau des métriques Régression logistique + + f = open("table_metriques_rl.tex","w") + f.write( + r""" + \documentclass[preview]{standalone} + \usepackage{booktabs} + \begin{document} + """) + f.write(table_metriques_df[['Norm.', + 'Sélect.', + 'Vect.', + 'Préc. RL', + 'Rappel RL', + 'Exac. RL']].to_latex()) + f.write( + r""" + \end{document} + """) + f.close()