Instructivo de análisis de opiniones

Público

Este instructivo está diseñado para permitirte comenzar a explorar y desarrollar aplicaciones rápidamente con la API de Google Cloud Natural Language. Está diseñado para personas familiarizadas con la programación básica, aunque incluso sin muchos conocimientos de programación, deberías poder entenderlo. Una vez que completes este instructivo, debería poder usar la Documentación de referencia para crear tus propias aplicaciones básicas.

En este instructivo se explica paso a paso cómo crear una aplicación con la API de Natural Language con el código de Python. El propósito de este instructivo no es explicar las bibliotecas cliente de Java, sino cómo hacer llamadas a la API de Natural Language. Las aplicaciones en Java y Node.js son similares en esencia. Consulta las Muestras de la API de Natural Language para buscar muestras en otros idiomas (incluida la muestra de este instructivo).

Requisitos previos

Este instructivo tiene varios requisitos previos:

Analizar opiniones en documentos

Este instructivo te explica una aplicación básica de la API de Natural Language, mediante una solicitud analyzeSentiment, que realiza análisis de opiniones en textos. El análisis de opiniones intenta determinar la actitud general (positiva o negativa) y está representado por lo valores numéricos score y magnitude. (Para obtener más información sobre estos conceptos, consulta Conceptos básicos de Natural Language).

Te mostraremos el código completo primero. (Ten en cuenta que hemos eliminado la mayoría de los comentarios de este código para mostrarte lo breve que es. Te proporcionaremos más comentarios a medida que revisemos el código).

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

import argparse

from google.cloud import language
from google.cloud.language import enums
from google.cloud.language import types

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('Sentence {} has a sentiment score of {}'.format(
            index, sentence_sentiment))

    print('Overall Sentiment: score of {} with magnitude of {}'.format(
        score, magnitude))
    return 0

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

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

    document = types.Document(
        content=content,
        type=enums.Document.Type.PLAIN_TEXT)
    annotations = client.analyze_sentiment(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 aplicación simple ejecuta las siguientes tareas:

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

Repasaremos estos pasos con más detalle a continuación.

Importar bibliotecas

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

from google.cloud import language
from google.cloud.language import enums
from google.cloud.language import types

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

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

Ejecutar tu 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 pasado para el nombre de archivo de texto y lo pasamos a la función analyze().

Autenticación de la API

Antes de comunicarse con el servicio de API de Natural Language, debes autenticar su servicio con las credenciales adquiridas previamente. Dentro de una aplicación, la manera más simple de obtener credenciales es usar las Credenciales predeterminadas de la aplicación (ADC). De manera predeterminada, las ADC intentarán obtener credenciales del archivo de entorno GOOGLE_APPLICATION_CREDENTIALS, el cual debe configurarse para que apunte al archivo de claves JSON de tu cuenta de servicio. (Debes haber configurado tu cuenta de servicio y tu entorno para usar las ADC en la Guía de inicio rápido. Consulta Configurar una cuenta de servicio para obtener más información).

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

Realizar la solicitud

Ahora que tu servicio de la API de Natural Language está listo, podremos acceder al servicio llamando al método analyze_sentiment de la instancia LanguageServiceClient.

La biblioteca cliente encapsula los detalles para las solicitudes y respuestas a la API. Consulta la Referencia de la API de Natural Language para obtener la información completa sobre la estructura específica de esta solicitud.

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

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

    document = types.Document(
        content=content,
        type=enums.Document.Type.PLAIN_TEXT)
    annotations = client.analyze_sentiment(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 de 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('Sentence {} has a sentiment score of {}'.format(
            index, sentence_sentiment))

    print('Overall Sentiment: score of {} with magnitude of {}'.format(
        score, magnitude))
    return 0

Repasamos la respuesta para extraer el valor score de las opiniones para cada oración, y los valores score y magnitude generales para toda la revisión, y se los muestra al usuario.

Ejecutar el ejemplo

Para ejecutar la muestra, la probamos en un conjunto de reseñas (falsas) de la película "Bladerunner".

  1. Descarga las muestras desde Google Cloud Storage:

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

    gsutil por lo general se instala como parte del SDK de Cloud. Para instalar la última versión del SDK de Cloud, consulta la documentación del SDK de Cloud.

  2. Descomprime las muestras, lo cual creará la carpeta "reseñas":

    gunzip sentiment-samples.tgz
    tar -xvf sentiment-samples.tar
    
  3. Ejecuta nuestro análisis de opiniones 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
    

El ejemplo anterior indicaría que una reseña fue relativamente positiva (puntuación de 0.5) y relativamente emotiva (magnitud de 5.5).

La ejecución del análisis en los otros ejemplos debería producir 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 todas las magnitudes son similares (lo que indica una cantidad relativamente similar de opiniones emocionalmente significativas), excepto en el caso "neutro", que indica una reseña con poca opinión emotiva, ya sea positiva o negativa. (Para obtener más información sobre las puntuaciones y magnitud de las opiniones, y cómo interpretar esos valores, consulta Interpretar los valores de análisis de opiniones).

Si desea explorar el análisis de opiniones con más datos, Stanford proporciona un conjunto de datos de reseñas de películas de IMDB. Para recuperar estas reseñas de películas:

  1. Descarga el conjunto de datos de Large Movie Review.
  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, con cada archivo de texto que contiene una reseña de película.
  3. Ejecuta la herramienta sentiment-analysis.py en cualquiera de los archivos de texto de reseñas de películas.

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

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

API de Cloud Natural Language
Si necesitas ayuda, visita nuestra página de asistencia.