Natural Language Processing Python, Hotel reviews

Fermé
maxxi94 - 1 juil. 2018 à 17:07
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 - 5 juil. 2018 à 18:48
Bonjour à tous,

Je suis actuellement en train d'écrire ma thèse sur de l'analyse de texte et j'ai vraiment du mal à avancer dans l'analyse sur python.

J'ai un fichier excel qui compte plus ou moins 80k avis d'hotel et j'aimerais les charger dans Python en utilisant NLTK pour faire tout ce qui est pre-processing (tokenization, etc.). Cependant je n'arrive pas à comprendre comment charger ce fichier dans python et quel genre d'output j'aurai après celà. Si vous pouviez me donner des pistes ou des conseils pour avancer ça serait super!

Pour le moment j'utilise IDLE Python, j'ai essayé xlrd et pandas pour chargé mon fichier excel (sans succès) et NLTK pour NLP.

D'avance, merci.

Maxime.
A voir également:

2 réponses

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
1 juil. 2018 à 18:06
'lut,
quand tu dis fichier Excel, tu parles de quel format précisément ?
S'il s'agit de XLS ou XLSX, il te faudra convertir ça dans un format plus simple comme CSV par exemple, car les 2 formats précédents sont purement inutilisables pour du traitement données (et pour tout en fait, le XLS n'étant pas documenté et le XLSX étant un paté de XML immonde et in-importable).
80k ça fait beaucoup, ça vaudrait peut-être même le coup d'importer le CSV dans une base de données (qu'elle soit structurée: SQLite, MySQL/MariaDB, Postgre; ou non: Redis, Mongo, ...).
j'ai essayé xlrd et pandas
Tu as essayé, ok, mais qu'as-tu essayé avec ? Quel était ton code, quelles étaient tes données originales et à quel résultat t'attendais-tu ?
0
Re,

Merci pour ta réponse ElementW.

J'ai donc suivi ton conseil et j'ai mis mes données sur une base de données Sqlite3.
Désolé mais je suis vraiment débutant en langage de programmation.

Maintenant mon soucis, c'est de faire mes analyses sur une colonne (ReviewLarge) de mon tableau (Review_Hotel_Large). Après quelques recherche je suis arrivé à ça:

import sqlite3
import nltk
conn = sqlite3.connect('Thesis_Datasets.sql')
c = conn.cursor()
def read_from_db():
c.execute('SELECT ReviewLarge FROM Review_Hotel_Large')


Mais je ne vois pas comment faire ensuite pour lancer la tokenization sur cette colonne et que pyhton me génère un nouveau document "tokenizé".

D'avance, merci pour vos réponses.

Maxime.
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
Modifié le 4 juil. 2018 à 18:43
L'idée de base est (code pas testé):
import sqlite3
from nltk.tokenize.api import StringTokenizer
conn = sqlite3.connect('Thesis_Datasets.sql')
tok = StringTokenizer()
c = conn.cursor()
def read_from_db():
    for row in c.execute('SELECT ReviewLarge FROM Review_Hotel_Large'):
        review = row[0]
        tokens = tok.tokenize(review)
        # Manipuler tokens comme voulu
Après tout dépend de ce que tu comptes faire des tokens. La tokénisation n'étant pas une opération coûteuse, il n'y a pas grand intérêt à stocker tous les tokens 1 à 1, l'un après l'autre dans la base pour les relire plus tard: tu prendrais plus de temps pour les lire qu'à lire la ligne originale et re-tokeniser.
Si tu comptes analyser leur fréquence, alors les mettre en base ou dans un
dict
ionnaire en mémoire est intéressant.
Sans savoir ce que tu comptes en faire par la suite, difficile de te conseiller.
0
Alors avec mes tokens je veux tout d'abord process du "stemming" et du "stop word removal" pour ensuite faire comme tu dis une analyse de fréquence et puis de la classification.

En gros, j'ai deux base de données (avec chaque fois: Hotel, Review, ReviewerID, Date) que j'ai tiré de Booking.com :

=> La première (80k reviews réduit à 10k mtnt)
=> Dans la deuxième ce sont les avis des clients "fidèle" qui ont été isolé (2 ou + avis pour la même chaine d'hotel)

Le but en gros c'est d'analyser les différences entre les datasets en terme de mots et (si j'ai le temps) de sentiments.


J'ai tout le temps ce genre d'erreur quand j'essaye de lancer le code:

https://image.noelshack.com/fichiers/2018/27/4/1530808490-capture-d-ecran-2018-07-05-18-29-57.png

désolé pour ma nulitude en progra :/
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
5 juil. 2018 à 18:48
Tu cherches a avoir une variable qui n'existe que dans le corps de la fonction
read_from_db
, que tu n'appelles même pas. Indentes ton
print
de deux niveaux, et ajoute un appel
read_from_db()
en dessous de ta fonction, non indenté.
Vu le genre d'erreur que tu fais, tu ne vas pas aller bien loin. Prends le temps de lire un minimum de documentation/tutoriaux sur la base de Python avant de vouloir te jeter dans le tas.
0