Análisis de sentimientos en Python con TextBlob

    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.

     

    Etiquetas:

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *