88 votes

Analyse des sentiments sur Twitter en Python

Je suis à la recherche d'une implémentation open source, de préférence en python, de Analyse du sentiment textuel ( http://en.wikipedia.org/wiki/Sentiment_analysis ). Quelqu'un connaît-il une telle implémentation open source que je pourrais utiliser ?

J'écris une application qui recherche sur twitter un terme de recherche, disons "youtube", et compte les tweets "heureux" par rapport aux tweets "tristes". J'utilise l'appengine de Google, donc c'est en python. J'aimerais pouvoir classer les résultats de recherche renvoyés par Twitter et j'aimerais le faire en python. Je n'ai pas été en mesure de trouver un tel analyseur de sentiments jusqu'à présent, et surtout pas en python. Connaissez-vous une telle implémentation open source que je pourrais utiliser ? De préférence, c'est déjà en python, mais si non, j'espère pouvoir le traduire en python.

Notez que les textes que j'analyse sont TRES courts, ce sont des tweets. Donc idéalement, ce classifieur est optimisé pour des textes aussi courts.

BTW, twitter supporte les opérateurs " :)" et " :(" dans la recherche, qui visent à faire exactement cela, mais malheureusement, la classification fournie par eux n'est pas si grande, donc j'ai pensé que je pourrais essayer moi-même.

Gracias.

BTW, une première démo est aquí et le code que j'ai jusqu'à présent est aquí et je serais ravi de l'ouvrir à tout développeur intéressé.

77voto

MarkusQ Points 15612

Bonne chance avec ça.

Le sentiment est extrêmement contextuel, et la culture du tweet aggrave le problème car on ne vous donne pas le contexte pour la plupart des tweets. L'intérêt de Twitter est que vous pouvez tirer parti de l'énorme quantité de contexte partagé dans le "monde réel" pour faire passer une communication significative dans un message très court.

S'ils disent que la vidéo est mauvaise, ça veut dire mauvaise, ou mauvais ?

Un professeur de linguistique faisait un cours à sa classe un jour. "En anglais," elle a dit, "Une double négation forme un positif. Dans certaines langues, cependant, comme le russe, une double négation est toujours un négatif. Cependant, il n'existe aucune langue dans laquelle un double positif peut former un négatif."

Une voix du fond de la salle a dit : "Ouais c'est ça."

4 votes

Je suis content que vous ayez eu une réponse utile, car sinon j'aurais dû vous upvoter juste pour cette citation :-)

2 votes

Je pense que la citation était "yeah yeah" - de Sidney Morgenbesser.

44voto

Robert Elwell Points 4431

Avec la plupart de ces types d'applications, vous devrez développer une grande partie de votre propre code pour une tâche de classification statistique. Comme Lucka l'a suggéré, NLTK est l'outil parfait pour la manipulation du langage naturel en Python, tant que votre objectif n'interfère pas avec la nature non commerciale de sa licence. Cependant, je suggérerais d'autres logiciels pour la modélisation. Je n'ai pas trouvé beaucoup de solides modèles d'apprentissage automatique avancés disponibles pour Python, je vais donc suggérer quelques binaires autonomes qui coopèrent facilement avec lui.

Vous pourriez être intéressé par La boîte à outils pour la modélisation discriminative avancée qui peut être facilement interfacé avec Python. Il a été utilisé pour des tâches de classification dans divers domaines du traitement du langage naturel. Vous avez également le choix entre un certain nombre de modèles différents. Je vous suggère de commencer par la classification par entropie maximale si vous êtes déjà familiarisé avec la mise en œuvre d'un classificateur Naive Bayes. Si ce n'est pas le cas, vous pouvez vous pencher sur la question et en coder un afin d'acquérir une bonne compréhension de la classification statistique en tant que tâche d'apprentissage automatique.

Les groupes de linguistique informatique de l'université du Texas à Austin ont organisé des cours où la plupart des projets qui en sont issus ont utilisé cet outil formidable. Vous pouvez consulter la page du cours pour Linguistique informatique II pour avoir une idée de la manière de le faire fonctionner et des applications précédentes auxquelles il a servi.

Un autre excellent outil qui fonctionne dans le même esprit est le suivant Maillet . La différence avec Mallet est qu'il y a un peu plus de documentation et quelques modèles supplémentaires disponibles, comme les arbres de décision, et qu'il est en Java, ce qui, à mon avis, le rend un peu plus lent. Weka est une suite complète de différents modèles d'apprentissage automatique regroupés dans un seul et même paquet qui comprend quelques éléments graphiques, mais il est surtout destiné à des fins pédagogiques et n'est pas vraiment quelque chose que je mettrais en production.

Bonne chance dans votre tâche. La partie la plus difficile sera probablement la quantité d'ingénierie de la connaissance requise au départ pour classer le "jeu de graines" à partir duquel votre modèle va apprendre. Elle doit être assez importante, selon que vous faites une classification binaire (heureux vs triste) ou une gamme complète d'émotions (ce qui nécessitera encore plus). Veillez à conserver certaines de ces données pour les tester, ou effectuez des tests de décuplement ou de suppression pour vous assurer que vous faites un bon travail de prédiction avant de le diffuser. Et surtout, amusez-vous bien ! C'est la meilleure partie de la PNL et de l'IA, à mon avis.

0 votes

Merci. Je ne fais ça que le soir, donc... ça va prendre du temps, mais je posterai une mise à jour quand j'aurai quelque chose de prêt.

7 votes

Le code de NLTK est disponible sous la licence Apache 2.0, conformément aux dispositions de l'article 2.1 de l'accord de coopération. nltk.org/faq

1 votes

Pourquoi dites-vous que Weka est destiné à des fins pédagogiques ? Ne fait-il pas partie de la suite BI de Pentaho ? Et pentaho est au service des entreprises.

19voto

Ran Points 3202

Merci à tous pour vos suggestions, elles ont en effet été très utiles ! J'ai fini par utiliser un classificateur bayésien naïf, que j'ai emprunté à aquí . J'ai commencé par l'alimenter avec une liste de bons/mauvais mots-clés, puis j'ai ajouté une fonction "apprentissage" en utilisant les commentaires des utilisateurs. Cela s'est avéré fonctionner assez bien.

Les détails complets de mon travail comme dans un article de blog .

Encore une fois, votre aide a été très utile, alors merci !

2 votes

Le lien vers le blog ne fonctionne plus, pourriez-vous le mettre à jour ?

0 votes

Bonjour @PetrutiuMihai : en effet, ce blog a été supprimé. Mais ce sont de vieilles choses, qui ne sont plus à la pointe de la recherche aujourd'hui, donc vous ne manquerez pas grand-chose ;(

14voto

J'ai construit une liste de mots étiquetés avec le sentiment. Vous pouvez y accéder à partir d'ici :

http://www2.compute.dtu.dk/pubdb/views/edoc_download.php/6010/zip/imm6010.zip

Vous trouverez un court programme Python sur mon blog :

http://finnaarupnielsen.wordpress.com/2011/06/20/simplest-sentiment-analysis-in-python-with-af/

Ce post montre comment utiliser la liste de mots avec des phrases simples ainsi qu'avec Twitter.

Les approches par listes de mots ont leurs limites. Vous trouverez une enquête sur les limites de ma liste de mots dans l'article "A new ANEW : Evaluation of a word list for sentiment analysis in microblogs". Cet article est disponible sur ma page d'accueil.

Veuillez noter qu'un unicode(s, 'utf-8') est absent du code (pour des raisons pédagogiques).

0 votes

"Posterous Spaces n'est plus disponible" Pourriez-vous afficher le code python quelque part ?

1 votes

Merci de l'avoir noté. J'ai maintenant changé le lien posterous pour un lien Wordpress où j'ai déplacé mon blog.

0 votes

Pouvez-vous nous parler d'expériences menées avec vos mots-lits de sentiments ? Je veux dire, quelle était la précision, le rappel de la classification.

10voto

De nombreux documents de recherche indiquent qu'un bon point de départ pour l'analyse des sentiments est l'examen des adjectifs, par exemple, s'il s'agit d'adjectifs positifs ou négatifs. Pour un court bloc de texte, c'est à peu près la seule option... Il existe des articles qui examinent des documents entiers, ou une analyse au niveau de la phrase, mais comme vous le dites, les tweets sont assez courts... Il n'y a pas de véritable approche magique pour comprendre le sentiment d'une phrase, donc je pense que votre meilleur pari serait de chasser l'un de ces articles de recherche et d'essayer d'obtenir leur ensemble de données d'adjectifs orientés positivement/négativement.

Ceci étant dit, le sentiment est spécifique à un domaine, et il peut être difficile d'obtenir un haut niveau de précision avec un ensemble de données à usage général.

Bonne chance.

0 votes

Mince, j'allais te devancer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X