Tutorial sobre el análisis de sentimiento

Audiencia

Este tutorial se ha diseñado para que puedas empezar rápidamente a explorar y desarrollar aplicaciones con la API Natural Language de Google Cloud. Está diseñado para personas que tengan conocimientos básicos de programación, aunque también podrás seguirlo si no tienes mucha experiencia en este campo. Después de haber seguido este tutorial, podrás utilizar la documentación de referencia para crear tus propias aplicaciones básicas.

En este tutorial se explica paso a paso una aplicación de la API Natural Language con código Python. El objetivo de este artículo no es explicar las bibliotecas de cliente de Python, sino mostrar cómo hacer llamadas a la API Natural Language. Las aplicaciones en Java y Node.js son esencialmente similares. Consulta las muestras de la API Natural Language para ver ejemplos en otros idiomas (incluida esta muestra del tutorial).

Requisitos previos

Este tutorial tiene varios requisitos previos:

Analizar el sentimiento de un documento

En este tutorial se explica cómo usar una aplicación básica de la API Natural Language mediante una solicitud analyzeSentiment, que realiza un análisis de sentimiento en el texto. El análisis de sentimiento intenta determinar la actitud general (positiva o negativa) y se representa mediante valores numéricos score y magnitude. Para obtener más información sobre estos conceptos, consulta el artículo Conceptos básicos del lenguaje natural.

Primero mostraremos todo el código. Ten en cuenta que hemos eliminado la mayoría de los comentarios de este código para mostrarte lo breve que es. Añadiremos más comentarios a medida que analicemos el código.

Para obtener más información sobre cómo instalar y usar la biblioteca de cliente de la API Natural Language de Google Cloud para Python, consulta Bibliotecas de cliente de la API Natural Language.
"""Demonstrates how to make a simple call to the Natural Language API."""

import argparse

from google.cloud import language_v1



def print_result(annotations):
    score = annotations.document_sentiment.score
    magnitude = annotations.document_sentiment.magnitude

    for index, sentence in enumerate(annotations.sentences):
        sentence_sentiment = sentence.sentiment.score
        print(f"Sentence {index} has a sentiment score of {sentence_sentiment}")

    print(f"Overall Sentiment: score of {score} with magnitude of {magnitude}")
    return 0




def analyze(movie_review_filename):
    """Run a sentiment analysis request on text within a passed filename."""
    client = language_v1.LanguageServiceClient()

    with open(movie_review_filename) as review_file:
        # Instantiates a plain text document.
        content = review_file.read()

    document = language_v1.Document(
        content=content, type_=language_v1.Document.Type.PLAIN_TEXT
    )
    annotations = client.analyze_sentiment(request={"document": document})

    # Print the results
    print_result(annotations)




if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter
    )
    parser.add_argument(
        "movie_review_filename",
        help="The filename of the movie review you'd like to analyze.",
    )
    args = parser.parse_args()

    analyze(args.movie_review_filename)

Esta sencilla aplicación realiza las siguientes tareas:

  • Importa las bibliotecas necesarias para ejecutar la aplicación
  • Toma un archivo de texto y lo transfiere a la función main()
  • Lee el archivo de texto y envía una solicitud al servicio.
  • Analiza la respuesta del servicio y la muestra al usuario.

A continuación, repasaremos estos pasos con más detalle.

Importar bibliotecas

Para obtener más información sobre cómo instalar y usar la biblioteca de cliente de la API Natural Language de Google Cloud para Python, consulta Bibliotecas de cliente de la API Natural Language.
import argparse

from google.cloud import language_v1

Importamos argparse, una biblioteca estándar, para permitir que la aplicación acepte nombres de archivos de entrada como argumentos.

Para usar la API Cloud Natural Language, también importaremos el módulo language de la biblioteca google-cloud-language. El módulo types contiene las clases necesarias para crear solicitudes.

Ejecutar la aplicación

if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter
    )
    parser.add_argument(
        "movie_review_filename",
        help="The filename of the movie review you'd like to analyze.",
    )
    args = parser.parse_args()

    analyze(args.movie_review_filename)

Aquí, simplemente analizamos el argumento transferido para el nombre de archivo de texto y lo transferimos a la función analyze().

Autenticar a la API

Antes de comunicarte con el servicio de la API Natural Language, debes autenticar tu servicio con las credenciales que hayas obtenido previamente. En una aplicación, la forma más sencilla de obtener credenciales es usar las credenciales predeterminadas de la aplicación (ADC). De forma predeterminada, ADC intentará obtener las credenciales del archivo de entorno GOOGLE_APPLICATION_CREDENTIALS, que debe configurarse para que apunte al archivo JSON de la clave de tu cuenta de servicio. (Deberías haber configurado tu cuenta de servicio y tu entorno para usar ADC en la guía de inicio rápido. Para obtener más información, consulta el artículo Configurar una cuenta de servicio.

La biblioteca de cliente de Google Cloud para Python usa automáticamente las credenciales predeterminadas de la aplicación.

Enviar la solicitud

Ahora que nuestro servicio de la API Natural Language está listo, podemos acceder a él llamando al método analyze_sentiment de la instancia LanguageServiceClient.

La biblioteca de cliente encapsula los detalles de las solicitudes y respuestas a la API. Consulta la referencia de la API Natural Language para obtener información detallada sobre la estructura concreta de estas solicitudes.

Para obtener más información sobre cómo instalar y usar la biblioteca de cliente de la API Natural Language de Google Cloud para Python, consulta Bibliotecas de cliente de la API Natural Language.
def analyze(movie_review_filename):
    """Run a sentiment analysis request on text within a passed filename."""
    client = language_v1.LanguageServiceClient()

    with open(movie_review_filename) as review_file:
        # Instantiates a plain text document.
        content = review_file.read()

    document = language_v1.Document(
        content=content, type_=language_v1.Document.Type.PLAIN_TEXT
    )
    annotations = client.analyze_sentiment(request={"document": document})

    # Print the results
    print_result(annotations)

Este fragmento de código realiza las siguientes tareas:

  1. Crea una instancia de LanguageServiceClient como cliente.
  2. Lee el nombre del archivo que contiene los datos de texto en una variable.
  3. Crea una instancia de un objeto Document con el contenido del archivo.
  4. Llama al método analyze_sentiment del cliente.

Analizar la respuesta

def print_result(annotations):
    score = annotations.document_sentiment.score
    magnitude = annotations.document_sentiment.magnitude

    for index, sentence in enumerate(annotations.sentences):
        sentence_sentiment = sentence.sentiment.score
        print(f"Sentence {index} has a sentiment score of {sentence_sentiment}")

    print(f"Overall Sentiment: score of {score} with magnitude of {magnitude}")
    return 0

Recorremos la respuesta para extraer los valores de score de cada frase y los valores generales de score y magnitude de toda la reseña, y se los mostramos al usuario.

Ejecutar la muestra

Para ejecutar nuestra muestra, la probaremos con un conjunto de reseñas de películas (falsas) de la película "Blade Runner".

  1. Descarga las muestras de Google Cloud Storage:

    gcloud storage cp gs://cloud-samples-tests/natural-language/sentiment-samples.tgz .
    

    Para instalar la versión más reciente de Google Cloud CLI, consulta la documentación de gcloud CLI.

  2. Descomprime esas muestras para crear una carpeta llamada "reviews":

    gunzip sentiment-samples.tgz
    tar -xvf sentiment-samples.tar
    
  3. Ejecuta nuestro análisis de sentimiento en uno de los archivos especificados:

    python sentiment_analysis.py reviews/bladerunner-pos.txt
    Sentence 0 has a sentiment score of 0.8
    Sentence 1 has a sentiment score of 0.9
    Sentence 2 has a sentiment score of 0.8
    Sentence 3 has a sentiment score of 0.2
    Sentence 4 has a sentiment score of 0.1
    Sentence 5 has a sentiment score of 0.4
    Sentence 6 has a sentiment score of 0.3
    Sentence 7 has a sentiment score of 0.4
    Sentence 8 has a sentiment score of 0.2
    Sentence 9 has a sentiment score of 0.9
    Overall Sentiment: score of 0.5 with magnitude of 5.5
    

En el ejemplo anterior, se indica que la reseña es relativamente positiva (puntuación de 0.5) y relativamente emocional (magnitud de 5.5).

Si analizas los otros ejemplos, deberías obtener valores similares a los que se muestran a continuación:

python sentiment_analysis.py reviews/bladerunner-neg.txt
...
Overall Sentiment: score of -0.6 with magnitude of 3.3

python sentiment_analysis.py reviews/bladerunner-mixed.txt
...
Overall Sentiment: score of 0 with magnitude of 4.7

python sentiment_analysis.py reviews/bladerunner-neutral.txt
...
Overall Sentiment: score of -0.1 with magnitude of 1.8

Ten en cuenta que las magnitudes son similares (lo que indica una cantidad relativamente igual de sentimiento significativo desde el punto de vista emocional), excepto en el caso de "neutro", que indica una reseña con poco sentimiento emocional, ya sea positivo o negativo. Para obtener más información sobre las puntuaciones y la magnitud del sentimiento, así como sobre cómo interpretar estos valores, consulta el artículo Interpretar los valores del análisis de sentimiento.

Si quieres explorar el análisis de sentimientos con más datos, Stanford ofrece un conjunto de datos de reseñas de películas de IMDb. Para recuperar estas reseñas de películas, sigue estos pasos:

  1. Descarga el conjunto de datos de reseñas de películas grandes.
  2. Descomprime el archivo en tu directorio de trabajo. Las reseñas de películas se dividen en los directorios pos y neg dentro de los directorios de datos train y test. Cada archivo de texto contiene una reseña de una película.
  3. Ejecuta la herramienta sentiment_analysis.py en cualquiera de los archivos de texto de reseñas de películas.

¡Enhorabuena! Has realizado tus primeras tareas de inferencia con la API Natural Language de Google Cloud.