web-dev-qa-db-fra.com

Analyse des sentiments pour Twitter en Python

Je recherche une implémentation open source, de préférence en python, de Textual Sentiment Analysis ( http://en.wikipedia.org/wiki/Sentiment_analysis ). Quelqu'un est-il familier avec une telle implémentation open source que je peux utiliser?

J'écris une application qui cherche un terme de recherche sur Twitter, dit "youtube", et compte les tweets "heureux" contre les tweets "tristes". J'utilise Google Appengine, donc c'est en python. J'aimerais pouvoir classer les résultats de recherche renvoyés sur Twitter et le faire en python ... Je ne suis pas parvenu à trouver un tel analyseur de sentiments, pas spécifiquement en python. Connaissez-vous une telle implémentation open source que je peux utiliser? De préférence, cela est déjà en python, mais sinon, j'espère pouvoir le traduire en python.

Remarque, les textes que j'analyse sont TRES courts, ce sont des tweets. Donc, idéalement, ce classificateur est optimisé pour de tels textes courts.

BTW, Twitter prend en charge les opérateurs ":)" et ":(" dans la recherche, qui visent justement à faire cela, mais malheureusement, le classement fourni par eux n'est pas très bon, alors j'ai pensé que je pourrais essayer moi-même .

Merci!

BTW, une première démo est ici et le code que j’ai jusqu’à présent est ici et j'aimerais le faire en open source avec tout développeur intéressé.

84
Ran

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

Cela pourrait vous intéresser La boîte à outils pour la modélisation discriminante avancée , qui peut être facilement interfacée avec Python. Cela a été utilisé pour des tâches de classification dans divers domaines du traitement du langage naturel. Vous avez également le choix parmi plusieurs modèles. Je suggèrerais de commencer par la classification d'entropie maximale tant que vous êtes déjà familiarisé avec la mise en œuvre d'un classificateur Naive Bayes. Dans le cas contraire, vous voudrez peut-être examiner la question et coder celle-ci pour bien comprendre 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 dans lesquels la plupart des projets qui en ont découlé ont utilisé ce formidable outil. Vous pouvez consulter la page du cours pour Linguistique computationnelle II pour avoir une idée de la façon dont il s’agit de le faire fonctionner et des applications précédentes qu’il a servies.

Un autre excellent outil qui fonctionne dans la même veine est Mallet . La différence entre Mallet est qu’il existe un peu plus de documentation et quelques modèles supplémentaires, tels que les arbres de décision, et qu’il s’agit de Java, ce qui, à mon avis, le ralentit un peu. Weka est une suite complète de différents modèles d’apprentissage automatique regroupés dans un grand paquet contenant des éléments graphiques, mais elle est essentiellement destinée à 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 des connaissances requise à l’avance pour vous permettre de classer le «germe» sur lequel votre modèle apprendra. Cela doit être assez important, selon que vous fassiez une classification binaire (heureux ou triste) ou toute une gamme d’émotions (qui en demanderont encore plus). Assurez-vous de conserver certaines de ces données techniques à des fins de test, ou exécutez des tests décuplés ou éliminés pour vous assurer que vous faites un bon travail de prédiction avant de les diffuser. Et le plus important, amusez-vous! C’est la meilleure partie de la PNL et de l’IA, à mon avis.

41
Robert Elwell

Bonne chance avec ça.

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

S'ils disent que la vidéo est mauvaise, est-ce que cela veut dire mauvais ou mauvais ?

Un professeur de linguistique donnait une conférence à sa classe un jour. "En anglais," elle a dit: "Un double négatif est positif. Dans certaines langues, cependant, comme le russe, un double négatif est toujours négatif. Cependant, il n'y a pas de langue dans laquelle positif peut former un négatif. "

Une voix au fond de la pièce sifflé, "Ouais ... bien."

74
MarkusQ

Merci à tous pour vos suggestions, elles étaient en effet très utiles! J'ai fini par utiliser un classificateur naïf bayésien, que j'ai emprunté à ici . J'ai commencé par l'insérer dans une liste de mots-clés bons/mauvais, puis j'ai ajouté une fonctionnalité "apprendre" en utilisant les commentaires des utilisateurs. Il s'est avéré que ça fonctionnait bien, Nice.

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!

18
Ran

J'ai construit une liste de mots étiquetés avec 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/

Cet article explique comment utiliser la liste de mots avec des phrases simples et avec Twitter.

Les approches de listes de mots ont leurs limites. Vous trouverez une enquête sur les limites de ma liste de mots dans l'article "Un nouvel ANEW: évaluation d'une liste de mots pour l'analyse des sentiments dans des microblogs". Cet article est disponible sur ma page d'accueil.

Veuillez noter que unicode(s, 'utf-8') est manquant dans le code (pour des raisons pédagogiques).

13
Finn Årup Nielsen

Un grand nombre d'articles de recherche indiquent qu'un bon point de départ pour l'analyse des sentiments consiste à examiner les adjectifs, par exemple, sont-ils des adjectifs positifs ou négatifs. Pour un court bloc de texte, c'est à peu près votre seule option ... Il existe des articles qui traitent de documents entiers ou d'une analyse au niveau des phrases, mais comme vous le dites, les tweets sont assez courts Je pense que votre meilleur choix serait de traquer l'un de ces documents de recherche et d'essayer d'obtenir leur ensemble de données d'adjectifs orientés positivement/négativement.

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

Bonne chance.

9
Ben Coe

Je pense que vous aurez peut-être du mal à trouver ce que vous cherchez. La chose la plus proche que je connaisse est LingPipe , qui possède une fonctionnalité { fonctionnalité d'analyse des sentiments }} et est disponible sous un type limité de licence open-source, mais écrit en Java.

De plus, les systèmes d’analyse des sentiments sont généralement développés en formant un système sur des données de révision de produit/film qui sont significativement différentes de la moyenne des tweet. Ils vont être optimisés pour le texte avec plusieurs phrases, toutes sur le même sujet. Je suppose que vous feriez mieux de créer vous-même un système basé sur des règles, peut-être basé sur un lexique de termes de sentiments tels que celui fourni par l'Université de Pittsburgh .

Découvrez We Feel Fine } _ pour une implémentation d'une idée similaire avec une interface vraiment magnifique (et twitrratr ).

4
Stompchicken

Jetez un coup d’œil à Outil d’analyse des sentiments Twitter . Il est écrit en python et utilise le classificateur Naive Bayes avec apprentissage automatique semi-supervisé. La source peut être trouvée ici .

2
cyhex

Je suis tombé sur Natural Language Toolkit il y a quelque temps. Vous pourriez probablement l'utiliser comme point de départ. Il a aussi beaucoup de modules et d’addons, alors peut-être qu’ils ont déjà quelque chose de similaire.

1
Luka Marinko

Peut-être que TextBlob (basé sur NLTK et un modèle) est le bon outil d’analyse de sentiments.

1
Sonson123

Pour ceux qui souhaitent coder Twitter Sentiment Analyis à partir de zéro, un cours Coursera " Data Science " avec du code python sur GitHub (dans le cadre de la mission 1 - link ). Les sentiments font partie de AFINN-111 .

Vous pouvez trouver des solutions de travail, par exemple ici . Outre la liste de sentiments AFINN-111, il est simple de créer une liste de termes dynamique basée sur la fréquence des termes dans les tweets qui ont un score pos/neg (voir ici ).

0
philshem

Il existe une API Twitter Sentiment de TweetFeel qui effectue une analyse linguistique avancée des tweets et peut récupérer des tweets positifs/négatifs. Voir http://www.webservius.com/corp/docs/tweetfeel_sentiment.htm

0
Eugene Osovetsky

Pensée un peu farfelue: vous pouvez utiliser l’API de Twitter pour télécharger un grand ensemble de tweets, puis classifier un sous-ensemble de cet ensemble à l’aide d’émoticônes: un groupe positif pour ":)", ":]", ": D", etc. , et un autre groupe négatif avec ":(", etc.

Une fois que vous avez cette classification brute, vous pouvez rechercher plus d’indices avec une analyse fréquentielle ou par ngram ou quelque chose du genre.

Cela peut sembler idiot, mais des recherches sérieuses ont été menées à ce sujet (recherche "d'analyse de sentiment" et d'émoticône). Ça vaut le coup d'oeil. 

0
user18015