Migrar a la biblioteca cliente de Python v0.26.1

La biblioteca cliente para Python v0.26.1 incluye algunos cambios significativos con respecto al diseño anterior de las bibliotecas cliente. Estos cambios se pueden resumir de la siguiente manera:

  • Consolidación de módulos en menos tipos

  • Reemplazo de parámetros sin tipo por clases y enumeraciones con tipos sólidos

Este tema proporciona detalles sobre los cambios que deberás realizar a tu código de Python para las bibliotecas cliente de la API de Cloud Natural Language a fin de utilizar la biblioteca cliente de Python v0.26.1.

Ejecuta versiones anteriores de la biblioteca cliente

No es necesario que actualices la biblioteca cliente de Python a la versión v0.26.1. Si deseas seguir usando una versión anterior de la biblioteca cliente de Python y no quieres migrar el código, debes especificar la versión de la biblioteca cliente de Python que usa tu aplicación. Para especificar una versión de biblioteca determinada, edita el archivo requirements.txt, como se muestra a continuación:

google-cloud-language==0.25
    

Módulos eliminados

Los siguientes módulos se eliminaron en el paquete de la Biblioteca cliente de Python v0.26.1.

  • google.cloud.language.api_responses

  • google.cloud.language.client

  • google.cloud.language.document

  • google.cloud.language.entity

  • google.cloud.language.sentence

  • google.cloud.language.sentiment

  • google.cloud.language.syntax

Cambios de código requeridos

Importaciones

Incluye el nuevo módulo google.cloud.language.types para acceder a los nuevos tipos de la biblioteca cliente de Python v0.26.1.

El módulo types contiene las clases nuevas necesarias para crear solicitudes, como types.Document. El módulo enums contiene las enumeraciones para especificar el tipo de documento. Puedes seguir usando strings como 'PLAIN_TEXT' y 'HTML' para especificar el tipo de documento. Sin embargo, te recomendamos que uses las enumeraciones del módulo enums.

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

Además, el nuevo módulo google.cloud.language.enums contiene las enumeraciones que sirven para analizar y también interpretar las respuestas de la API, como enums.Entity.Type.PERSON y enums.PartOfSpeech.Tag.ADJ.

Crea un cliente

La clase Client se reemplazó con la clase LanguageServiceClient. Reemplaza las referencias a la clase Client con LanguageServiceClient.

Versiones anteriores de las bibliotecas cliente:

old_client = language.Client()
    

Biblioteca cliente de Python v0.26.1:

client = language.LanguageServiceClient()

Construye objetos que representen el contenido del texto

Para identificar el contenido de una string de texto o de un URI de Google Cloud Storage, usa la nueva clase Document.

Construye objetos que representen el contenido del texto de una string de texto

El siguiente ejemplo muestra la nueva forma de representar el contenido del texto de una string de texto.

Versiones anteriores de las bibliotecas cliente:

document = old_client.document_from_text(content=text)
    

Biblioteca cliente de Python v0.26.1:

document = types.Document(
        content=text,
        type=enums.Document.Type.PLAIN_TEXT)

También puedes configurar document.type = enums.Document.Type.HTML para analizar HTML.

Construye objetos que representen el contenido de texto de un URI de Google Cloud Storage

En el siguiente ejemplo, se muestra la nueva forma de representar el contenido de texto de un URI de Google Cloud Storage o un URI web. gcs_uri es el URI de un archivo de texto en Google Cloud Storage.

Versiones anteriores de las bibliotecas cliente:

document = old_client.document_from_gcs_uri(gcs_uri=gcs_uri)
    

Biblioteca cliente de Python v0.26.1:

document = types.Document(
        gcs_content_uri=gcs_uri,
        type=enums.Document.Type.PLAIN_TEXT)

También puedes configurar document.type = enums.Document.Type.HTML para analizar HTML.

Realiza solicitudes y procesa respuestas

Con la biblioteca cliente de Python v0.26.1, los métodos de API como analyze_sentiment pertenecen al objeto LanguageServiceClient y no a los objetos Document.

Los valores que se muestran son levemente diferentes para analyze_entities y analyze_syntax, como se explica a continuación.

Realiza una solicitud de análisis de opiniones y procesa la respuesta

Versiones anteriores de las bibliotecas cliente:

document = language_client.document_from_text(text)

    sentiment = document.analyze_sentiment().sentiment

    print('Score: {}'.format(sentiment.score))
    print('Magnitude: {}'.format(sentiment.magnitude))
    

Biblioteca cliente de Python v0.26.1:

document = types.Document(
        content=text,
        type=enums.Document.Type.PLAIN_TEXT)

    # Detects sentiment in the document. You can also analyze HTML with:
    #   document.type == enums.Document.Type.HTML
    sentiment = client.analyze_sentiment(document).document_sentiment

    print('Score: {}'.format(sentiment.score))
    print('Magnitude: {}'.format(sentiment.magnitude))

Realiza una solicitud de análisis de entidades y procesa la respuesta

Los tipos de entidades ahora se almacenan como entity.type y no como entity.entity_type.

Versiones anteriores de las bibliotecas cliente:

document = language_client.document_from_text(text)

    entities = document.analyze_entities().entities

    for entity in entities:
        print('=' * 20)
        print(u'{:<16}: {}'.format('name', entity.name))
        print(u'{:<16}: {}'.format('type', entity.entity_type))
        print(u'{:<16}: {}'.format('metadata', entity.metadata))
        print(u'{:<16}: {}'.format('salience', entity.salience))
        print(u'{:<16}: {}'.format('wikipedia_url',
              entity.metadata.get('wikipedia_url', '-')))
    

Biblioteca cliente de Python v0.26.1:

document = types.Document(
        content=text,
        type=enums.Document.Type.PLAIN_TEXT)

    # Detects entities in the document. You can also analyze HTML with:
    #   document.type == enums.Document.Type.HTML
    entities = client.analyze_entities(document).entities

    for entity in entities:
        entity_type = enums.Entity.Type(entity.type)
        print('=' * 20)
        print(u'{:<16}: {}'.format('name', entity.name))
        print(u'{:<16}: {}'.format('type', entity_type.name))
        print(u'{:<16}: {}'.format('salience', entity.salience))
        print(u'{:<16}: {}'.format('wikipedia_url',
              entity.metadata.get('wikipedia_url', '-')))
        print(u'{:<16}: {}'.format('mid', entity.metadata.get('mid', '-')))

Realiza una solicitud de análisis sintáctico y procesa la respuesta

Las etiquetas de categorías gramaticales de los tokens, token.part_of_speech.tag, ahora se muestran como enumeraciones cuyos nombres puedes recuperar si importas google.cloud.language.enums.PartOfSpeech.Tag.

El contenido de texto de los tokens ahora se almacena como token.text.content y no como token.text_content.

Versiones anteriores de las bibliotecas cliente:

document = language_client.document_from_text(text)

    tokens = document.analyze_syntax().tokens

    for token in tokens:
        print(u'{}: {}'.format(token.part_of_speech.tag, token.text_content))
    

Biblioteca cliente de Python v0.26.1:

document = types.Document(
        content=text,
        type=enums.Document.Type.PLAIN_TEXT)

    # Detects syntax in the document. You can also analyze HTML with:
    #   document.type == enums.Document.Type.HTML
    tokens = client.analyze_syntax(document).tokens

    for token in tokens:
        part_of_speech_tag = enums.PartOfSpeech.Tag(token.part_of_speech.tag)
        print(u'{}: {}'.format(part_of_speech_tag.name,
                               token.text.content))