spanish sentiment and python open-source nlp
http://www2.compute.dtu.dk/pubdb/views/edoc_download.php/6010/zip/imm6010.zip

python - sentiment - tweepy



Análisis de opinión para Twitter en Python (12)

Estoy buscando una implementación de código abierto, preferiblemente en Python, de Textual Sentiment Analysis ( http://en.wikipedia.org/wiki/Sentiment_analysis ). ¿Alguien está familiarizado con la implementación de código abierto que puedo usar?

Estoy escribiendo una aplicación que busca en twitter un término de búsqueda, digamos "youtube", y cuenta tweets "felices" frente a tweets "tristes". Estoy usando el apéndice de Google, así que está en python. Me gustaría poder clasificar los resultados de búsqueda devueltos de Twitter y me gustaría hacerlo en Python. Hasta ahora no he podido encontrar dicho analizador de sentimientos, específicamente no en Python. ¿Está familiarizado con la implementación de código abierto que puedo usar? Preferiblemente esto ya está en python, pero si no, con suerte puedo traducirlo a python.

Tenga en cuenta que los textos que estoy analizando son MUY cortos, son tweets. Entonces, idealmente, este clasificador está optimizado para tales textos cortos.

Por cierto, Twitter admite los operadores ":)" y ":(" en la búsqueda, que tienen como objetivo hacer justamente esto, pero desafortunadamente, la clasificación provista por ellos no es tan buena, así que pensé que podría intentarlo yo mismo. .

¡Gracias!

Por cierto, una demostración temprana está here y el código que tengo hasta ahora está here y me encantaría abrirlo con cualquier desarrollador interesado.


Buena suerte con eso.

El sentimiento es enormemente contextual, y la cultura de tuiteo empeora el problema porque no se da el contexto para la mayoría de los tweets. El objetivo de Twitter es que puedes aprovechar la enorme cantidad de contexto compartido del "mundo real" para empacar una comunicación significativa en un mensaje muy corto.

Si dicen que el video es malo, ¿eso significa malo o malo ?

Un profesor de lingüística estaba dando conferencias a su clase un día. "En inglés", dijo, "un doble negativo es positivo. Sin embargo, en algunos idiomas, como el ruso, un doble negativo sigue siendo negativo. Sin embargo, no hay un idioma en el que un doble positivo pueda formar un negativo".

Una voz de la parte de atrás de la sala se elevó, "Sí ... bueno".


Con la mayoría de estos tipos de aplicaciones, tendrá que pasar gran parte de su propio código para una tarea de clasificación estadística. Como sugirió Lucka, NLTK es la herramienta perfecta para la manipulación del lenguaje natural en Python, siempre y cuando su objetivo no interfiera con la naturaleza no comercial de su licencia. Sin embargo, sugeriría otros paquetes de software para modelar. No he encontrado muchos modelos sólidos avanzados de aprendizaje automático disponibles para Python, por lo que voy a sugerir algunos binarios independientes que cooperen fácilmente con él.

Puede que le interese The Toolkit for Advanced Discriminative Modeling , que puede interactuar fácilmente con Python. Esto se ha utilizado para tareas de clasificación en diversas áreas del procesamiento del lenguaje natural. También tiene una selección de varios modelos diferentes. Sugiero comenzar con la clasificación Maximum Entropy siempre que ya esté familiarizado con la implementación de un clasificador Naive Bayes. Si no es así, es posible que desee examinarlo y codificar uno para realmente obtener una comprensión decente de la clasificación estadística como una tarea de aprendizaje automático.

Los grupos de lingüística computacional de la Universidad de Texas en Austin han impartido clases en donde la mayoría de los proyectos que se derivan de ellos han utilizado esta gran herramienta. Puede consultar la página del curso de Lingüística Computacional II para tener una idea de cómo hacer que funcione y qué aplicaciones anteriores ha servido.

Otra gran herramienta que funciona en la misma línea es Mallet . La diferencia entre Mallet es que hay un poco más de documentación y más modelos disponibles, como árboles de decisión, y está en Java, lo que, en mi opinión, lo hace un poco más lento. Weka es un conjunto completo de diferentes modelos de aprendizaje automático en un gran paquete que incluye algunas cosas gráficas, pero en realidad es principalmente para fines pedagógicos, y no es algo que realmente haya puesto en producción.

Buena suerte con tu tarea. La parte realmente difícil probablemente será la cantidad de ingeniería de conocimiento requerida para que usted pueda clasificar el ''conjunto de semillas'' del cual su modelo aprenderá. Tiene que ser bastante considerable, dependiendo de si estás haciendo una clasificación binaria (feliz o triste) o una gama completa de emociones (lo que requerirá aún más). Asegúrese de mantener algunos de estos datos modificados para realizar pruebas, o ejecute algunas pruebas de diez veces o elimine una para asegurarse de que realmente hace un buen trabajo de predicción antes de publicarla. Y, sobre todo, ¡diviértete! Esta es la mejor parte de NLP y AI, en mi opinión.


Creo que puede que le resulte difícil encontrar lo que busca. Lo más cercano que conozco es a LingPipe , que tiene algunas funcionalidades de análisis de opinión y está disponible bajo un tipo limitado de licencia de fuente abierta, pero está escrito en Java.

Además, los sistemas de análisis de sentimiento generalmente se desarrollan entrenando un sistema en datos de revisión de producto / película que es significativamente diferente del tweet promedio. Van a ser optimizados para texto con varias oraciones, todas sobre el mismo tema. Sospecho que harías mejor en elaborar un sistema basado en reglas tú mismo, quizás basado en un léxico de términos de sentimiento como el que brinda la Universidad de Pittsburgh .

Echa un vistazo a We Feel Fine para una implementación de idea similar con una interfaz realmente hermosa (y twitrratr ).



Encontré Natural Language Toolkit hace un tiempo. Probablemente podría usarlo como punto de partida. También tiene muchos módulos y complementos, por lo que quizás ya tengan algo similar.


Gracias a todos por sus sugerencias, ¡de hecho fueron muy útiles! Terminé usando un clasificador Naive Bayesiano, que pedí prestado here . Empecé por alimentarlo con una lista de palabras clave buenas / malas y luego agregué una función de "aprender" al utilizar los comentarios de los usuarios. Resultó funcionar bastante bien.

Los detalles completos de mi trabajo como en una publicación de blog .

De nuevo, tu ayuda fue muy útil, ¡así que gracias!



He construido una lista de palabras etiquetada con sentimiento. Puede acceder desde aquí:

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

Encontrarás un breve programa de Python en mi blog:

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

Esta publicación muestra cómo usar la lista de palabras con oraciones simples, así como también con Twitter.

Los enfoques de listas de palabras tienen sus limitaciones. Encontrarás una investigación de las limitaciones de mi lista de palabras en el artículo "Un nuevo ANEW: Evaluación de una lista de palabras para el análisis de sentimientos en microblogs". Ese artículo está disponible desde mi página de inicio.

Tenga en cuenta que falta unicode(s, ''utf-8'') en el código (por razones paedagogicas).


Para aquellos interesados ​​en codificar Twitter Sentiment Analyis desde cero, hay un curso de Coursera " Data Science " con código python en GitHub (como parte de la asignación 1 - link ). Los sentimientos son parte de la AFINN-111 .

Puede encontrar soluciones de trabajo, por ejemplo here . Además de la lista de sentimientos AFINN-111, hay una implementación simple de construir una lista de términos dinámica basada en la frecuencia de términos en tweets que tienen una puntuación pos / neg (ver here ).


Pensamiento un tanto loco: podrías intentar usar la API de Twitter para descargar un gran conjunto de tweets, y luego clasificar un subconjunto de ese conjunto usando emoticones: un grupo positivo para ":)", ":]", ": D", etc. y otro grupo negativo con ":(", etc.

Una vez que tenga esa clasificación cruda, podría buscar más pistas con análisis de frecuencia o ngram o algo similar.

Puede parecer tonto, pero se han realizado investigaciones serias sobre esto (búsqueda de "análisis de sentimientos" y emoticones). Digno de una mirada.


Tal vez TextBlob (basado en NLTK y patrón) es la herramienta de análisis de opinión correcta para usted.


Una gran cantidad de trabajos de investigación indican que un buen punto de partida para el análisis de sentimiento es mirar adjetivos, por ejemplo, son adjetivos positivos o adjetivos negativos. Para un bloque corto de texto, esta es prácticamente la única opción ... Hay documentos que analizan documentos enteros, o análisis a nivel de oraciones, pero como dices, los tweets son bastante cortos ... No hay un enfoque mágico real para entender el sentimiento de una oración, así que creo que su mejor opción sería buscar uno de estos artículos de investigación y tratar de obtener su conjunto de datos de adjetivos de orientación positiva / negativa.

Ahora bien, una vez dicho esto, el sentimiento es específico del dominio, y puede que le resulte difícil obtener un alto nivel de precisión con un conjunto de datos de propósito general.

Buena suerte.