Análisis de sentimientos en Python con TextBlob

A

Introducción

Las tecnologías de vanguardia en PNL nos permiten analizar los lenguajes naturales en diferentes capas: desde una simple segmentación de información textual hasta métodos más sofisticados de categorización de sentimientos.

Sin embargo, no significa inevitablemente que deba ser muy avanzado en programación para implementar tareas de alto nivel como el análisis de sentimientos en Python.

Análisis de los sentimientos

Los algoritmos de análisis de sentimientos se centran principalmente en definir opiniones, actitudes e incluso emoticonos en un corpus de textos. La gama de sentimientos establecidos varía significativamente de un método a otro. Mientras que un analizador estándar define hasta tres emociones polares básicas (positiva, negativa, neutra), el límite de los modelos más avanzados es más amplio.

En consecuencia, pueden mirar más allá de la polaridad y determinar seis emociones “universales” (por ejemplo, ira, disgusto, miedo, felicidad, tristeza y sorpresa):

 

Fuente: Espectro de salud mental

Además, dependiendo de la tarea en la que esté trabajando, también es posible recopilar información adicional del contexto, como el autor o un tema que, en un análisis posterior, puede prevenir un problema más complejo que una clasificación de polaridad común, a saber, subjetividad / objetividad. identificación.

Por ejemplo, esta frase de Business insider: “En marzo, Elon Musk describió la preocupación por el brote de coronavirus como un” pánico “y” tonto “, y desde entonces tuiteó información incorrecta, como su teoría de que los niños son” esencialmente inmunes “a el virus.” expresa la subjetividad a través de una opinión personal de E. Musk, así como del autor del texto.

Análisis de sentimientos en Python con TextBlob

El enfoque que aplica el paquete TextBlob al análisis de opiniones difiere en que se basa en reglas y, por lo tanto, requiere un conjunto predefinido de palabras categorizadas. Estas palabras pueden, por ejemplo, cargarse desde la base de datos NLTK. Además, los sentimientos se definen en función de las relaciones semánticas y la frecuencia de cada palabra en una oración de entrada que permite obtener como resultado una salida más precisa.

Una vez que se logra el primer paso y un modelo de Python se alimenta con los datos de entrada necesarios, un usuario puede obtener los puntajes de sentimiento en forma de polaridad y subjetividad que se discutieron en la sección anterior. Podemos ver cómo funciona este proceso en este artículo al Foro Kapadia:

Salida de TextBlob para un polaridad la tarea es un flotador dentro del rango [-1.0, 1.0] dónde -1.0 es una polaridad negativa y 1.0 es positivo. Esta puntuación también puede ser igual a 0, que representa una evaluación neutral de una declaración, ya que no contiene ninguna palabra del conjunto de entrenamiento.

Considerando que, un subjetividad / objetividad la tarea de identificación informa un flotador dentro del rango [0.0, 1.0] dónde 0.0 es una oración muy objetiva y 1.0 es muy subjetivo.

Hay varios ejemplos de interacción de Python con el analizador de sentimientos TextBlob: a partir de un modelo basado en diferentes Kaggle conjuntos de datos (por ejemplo, reseñas de películas) para calcular los sentimientos de los tweets a través de la API de Twitter.

Pero, veamos un analizador simple que podríamos aplicar a una oración en particular o un texto corto. Primero comenzamos con la importación de la biblioteca TextBlob:

# Importing TextBlob
from textblob import TextBlob

Una vez importados, cargaremos una oración para su análisis y crearemos una instancia TextBlob objeto, así como asignar el sentiment propiedad nuestra analysis:

# Preparing an input sentence
sentence=""'The platform provides universal access to the world's best education, partnering with top universities and organizations to offer courses online.'''

# Creating a textblob object and assigning the sentiment property
analysis = TextBlob(sentence).sentiment
print(analysis)

los sentiment la propiedad es una namedtuple de la forma Sentiment(polarity, subjectivity).

Donde el resultado esperado del análisis es:

Sentiment(polarity=0.5, subjectivity=0.26666666666666666)

Además, también es posible buscar resultados de polaridad o subjetividad por separado simplemente ejecutando lo siguiente:

from textblob import TextBlob

# Preparing an input sentence
sentence=""'The platform provides universal access to the world's best education, partnering with top universities and organizations to offer courses online.'''

analysisPol = TextBlob(sentence).polarity
analysisSub = TextBlob(sentence).subjectivity

print(analysisPol)
print(analysisSub)

Lo que nos daría la salida:

0.5
0.26666666666666666

Una de las mejores cosas de TextBlob es que permite al usuario elegir un algoritmo para la implementación de las tareas de PNL de alto nivel:

  • PatternAnalyzer – un clasificador predeterminado que se basa en la biblioteca de patrones
  • NaiveBayesAnalyzer – un modelo NLTK entrenado en un corpus de reseñas de películas

Para cambiar la configuración predeterminada, simplemente especificaremos un NaiveBayes analizador en el código. Ejecutemos un análisis de sentimiento en tweets directamente desde Gorjeo:

from textblob import TextBlob
# For parsing tweets
import tweepy 

# Importing the NaiveBayesAnalyzer classifier from NLTK
from textblob.sentiments import NaiveBayesAnalyzer

Después de eso, necesitamos establecer una conexión con la API de Twitter a través de claves API (que puede obtener a través de un cuenta de desarrollador):

# Uploading api keys and tokens
api_key = 'XXXXXXXXXXXXXXX'
api_secret="XXXXXXXXXXXXXXX"
access_token = 'XXXXXXXXXXXXXXX'
access_secret="XXXXXXXXXXXXXXX"

# Establishing the connection
twitter = tweepy.OAuthHandler(api_key, api_secret)
api = tweepy.API(twitter)

Ahora, podemos realizar el análisis de tweets sobre cualquier tema. Una palabra buscada (por ejemplo, bloqueo) puede ser una palabra o más. Además, esta tarea puede llevar mucho tiempo debido a la enorme cantidad de tweets. Se recomienda limitar la salida:

# This command will call back 5 tweets within a “lockdown” topic
corpus_tweets = api.search("lockdown", count=5) 
for tweet in corpus_tweets:
    print(tweet.text)

El resultado de este último fragmento de código traerá cinco tweets que mencionan la palabra buscada de la siguiente forma:

[email protected]: How Asia's densest slum contained the virus and the economic catastrophe that stares at the hardworking slum population...

El último paso en este ejemplo es cambiar el modelo predeterminado al analizador NLTK que devuelve sus resultados como un namedtuple de la forma: Sentiment(classification, p_pos, p_neg):

# Applying the NaiveBayesAnalyzer
blob_object = TextBlob(tweet.text, analyzer=NaiveBayesAnalyzer())
# Running sentiment analysis
analysis = blob_object.sentiment
print(analysis)

Finalmente, nuestro modelo de Python nos dará la siguiente evaluación de sentimiento:

Sentiment(classification='pos', p_pos=0.5057908299783777, p_neg=0.49420917002162196)

Aquí, lo clasifica como un sentimiento positivo, con el p_pos y p_neg los valores son ~0.5 cada.

Conclusión

En este artículo, hemos cubierto qué es el análisis de sentimientos, después de lo cual hemos utilizado la biblioteca TextBlob para realizar el análisis de sentimientos en oraciones importadas, así como en tweets.

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad