Tutorial de classificação de conteúdo

Público-alvo

Este tutorial foi concebido para lhe permitir começar rapidamente a explorar e desenvolver aplicações com a Cloud Natural Language API. Foi concebido para pessoas com conhecimentos básicos de programação, embora, mesmo sem muitos conhecimentos de programação, deva conseguir acompanhar. Depois de seguir este tutorial, deve conseguir usar a documentação de referência para criar as suas próprias aplicações básicas.

Este tutorial explica passo a passo uma aplicação de linguagem natural com código Python. O objetivo aqui não é explicar as bibliotecas cliente Python, mas sim explicar como fazer chamadas para a API Natural Language. As aplicações em Java e Node.js são essencialmente semelhantes. Consulte os exemplos da API Natural Language para ver exemplos noutros idiomas (incluindo o exemplo neste tutorial).

Pré-requisitos

Este tutorial tem vários pré-requisitos:

Vista geral

Este tutorial explica-lhe uma aplicação de linguagem natural básica, através de pedidos que classificam o conteúdo em categorias, juntamente com uma pontuação de confiança, como:classifyText

category: "/Internet & Telecom/Mobile & Wireless/Mobile Apps & Add-Ons"
confidence: 0.6499999761581421

Para ver a lista de todas as etiquetas de categorias disponíveis, consulte Categorias.

Neste tutorial, vai criar uma aplicação para realizar as seguintes tarefas:

  • Classificar vários ficheiros de texto e escrever o resultado num ficheiro de índice.
  • Processar o texto da consulta de entrada para encontrar ficheiros de texto semelhantes.
  • Processar etiquetas de categorias de consultas de entrada para encontrar ficheiros de texto semelhantes.

O tutorial usa conteúdo da Wikipédia. Pode criar uma aplicação semelhante para processar artigos de notícias, comentários online, etc.

Ficheiros de origem

Pode encontrar o código fonte do tutorial nos exemplos da biblioteca cliente Python no GitHub.

Este tutorial usa texto de origem de exemplo da Wikipédia. Pode encontrar os ficheiros de texto de exemplo na pasta resources/texts do projeto do GitHub.

Importar bibliotecas

Para usar a Cloud Natural Language API, tem de importar o módulo language da biblioteca google-cloud-language. O módulo language.types contém classes necessárias para criar pedidos. O módulo language.enums é usado para especificar o tipo de texto de entrada. Este tutorial classifica o conteúdo de texto simples (language.enums.Document.Type.PLAIN_TEXT).

Para calcular a semelhança entre textos com base na respetiva classificação de conteúdo, este tutorial usa o numpy para cálculos vetoriais.

Python

Para saber como instalar e usar a biblioteca cliente da API Natural Language, consulte o artigo Bibliotecas cliente da API Natural Language. Para mais informações, consulte a documentação de referência da API Python de linguagem natural.

Para se autenticar na API Natural Language, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

import argparse
import json
import os

from google.cloud import language_v1
import numpy

Passo 1. Classifique o conteúdo

Pode usar a biblioteca cliente Python para fazer um pedido à API Natural Language para classificar conteúdo. A biblioteca cliente Python encapsula os detalhes dos pedidos e das respostas da API Natural Language.

A função classify no tutorial chama o método classifyText da API Natural Language, criando primeiro uma instância da classe LanguageServiceClient e, em seguida, chamando o método classify_text da instância LanguageServiceClient.

A função classify do tutorial apenas classifica o conteúdo de texto para este exemplo. Também pode classificar o conteúdo de uma página Web transmitindo o HTML de origem da página Web como o text e definindo o parâmetro type como language.enums.Document.Type.HTML.

Para mais informações, consulte o artigo Classificar conteúdo. Para ver detalhes sobre a estrutura dos pedidos à API Natural Language, consulte a referência da API Natural Language.

Python

Para saber como instalar e usar a biblioteca cliente da API Natural Language, consulte o artigo Bibliotecas cliente da API Natural Language. Para mais informações, consulte a documentação de referência da API Python de linguagem natural.

Para se autenticar na API Natural Language, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

def classify(text, verbose=True):
    """Classify the input text into categories."""

    language_client = language_v1.LanguageServiceClient()

    document = language_v1.Document(
        content=text, type_=language_v1.Document.Type.PLAIN_TEXT
    )
    response = language_client.classify_text(request={"document": document})
    categories = response.categories

    result = {}

    for category in categories:
        # Turn the categories into a dictionary of the form:
        # {category.name: category.confidence}, so that they can
        # be treated as a sparse vector.
        result[category.name] = category.confidence

    if verbose:
        print(text)
        for category in categories:
            print("=" * 20)
            print("{:<16}: {}".format("category", category.name))
            print("{:<16}: {}".format("confidence", category.confidence))

    return result

O resultado devolvido é um dicionário com as etiquetas de categoria como chaves e as pontuações de confiança como valores, como:

{
    "/Computers & Electronics": 0.800000011920929,
    "/Internet & Telecom/Mobile & Wireless/Mobile Apps & Add-Ons": 0.6499999761581421
}

O script Python do tutorial está organizado para que possa ser executado a partir da linha de comandos para experiências rápidas. Por exemplo, pode executar:

python classify_text_tutorial.py classify "Google Home enables users to speak voice commands to interact with services through the Home's intelligent personal assistant called Google Assistant. A large number of services, both in-house and third-party, are integrated, allowing users to listen to music, look at videos or photos, or receive news updates entirely by voice. "

Passo 2. Indexe vários ficheiros de texto

A função index no script do tutorial recebe, como entrada, um diretório com vários ficheiros de texto e o caminho para um ficheiro onde armazena o resultado indexado (o nome do ficheiro predefinido é index.json). A função index lê o conteúdo de cada ficheiro de texto no diretório de entrada e, em seguida, passa os ficheiros de texto para a Cloud Natural Language API para serem classificados em categorias de conteúdo.

Python

Para saber como instalar e usar a biblioteca cliente da API Natural Language, consulte o artigo Bibliotecas cliente da API Natural Language. Para mais informações, consulte a documentação de referência da API Python de linguagem natural.

Para se autenticar na API Natural Language, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

def index(path, index_file):
    """Classify each text file in a directory and write
    the results to the index_file.
    """

    result = {}
    for filename in os.listdir(path):
        file_path = os.path.join(path, filename)

        if not os.path.isfile(file_path):
            continue

        try:
            with open(file_path) as f:
                text = f.read()
                categories = classify(text, verbose=False)

                result[filename] = categories
        except Exception:
            print(f"Failed to process {file_path}")

    with open(index_file, "w", encoding="utf-8") as f:
        f.write(json.dumps(result, ensure_ascii=False))

    print(f"Texts indexed in file: {index_file}")
    return result

Os resultados da Cloud Natural Language API para cada ficheiro são organizados num único dicionário, serializados como uma string JSON e, em seguida, escritos num ficheiro. Por exemplo:

{
    "android.txt": {
        "/Computers & Electronics": 0.800000011920929,
        "/Internet & Telecom/Mobile & Wireless/Mobile Apps & Add-Ons": 0.6499999761581421
    },
    "google.txt": {
        "/Internet & Telecom": 0.5799999833106995,
        "/Business & Industrial": 0.5400000214576721
    }
}

Para indexar ficheiros de texto a partir da linha de comandos com o nome do ficheiro de saída predefinido index.json, execute o seguinte comando:

python classify_text_tutorial.py index resources/texts

Passo 3. Consultar o índice

Consulta com etiquetas de categorias

Depois de criar o ficheiro de índice (nome do ficheiro predefinido = index.json), podemos fazer consultas ao índice para obter alguns dos nomes de ficheiros e as respetivas pontuações de confiança.

Uma forma de o fazer é usar uma etiqueta de categoria como consulta, o que o tutorial consegue com a função query_category. Pode encontrar a implementação das funções auxiliares, como similarity, no ficheiro classify_text_tutorial.py. Nas suas aplicações, a classificação e a pontuação de similaridade devem ser cuidadosamente concebidas em torno de exemplos de utilização específicos.

Python

Para saber como instalar e usar a biblioteca cliente da API Natural Language, consulte o artigo Bibliotecas cliente da API Natural Language. Para mais informações, consulte a documentação de referência da API Python de linguagem natural.

Para se autenticar na API Natural Language, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

def query_category(index_file, category_string, n_top=3):
    """Find the indexed files that are the most similar to
    the query label.

    The list of all available labels:
    https://cloud.google.com/natural-language/docs/categories
    """

    with open(index_file) as f:
        index = json.load(f)

    # Make the category_string into a dictionary so that it is
    # of the same format as what we get by calling classify.
    query_categories = {category_string: 1.0}

    similarities = []
    for filename, categories in index.items():
        similarities.append((filename, similarity(query_categories, categories)))

    similarities = sorted(similarities, key=lambda p: p[1], reverse=True)

    print("=" * 20)
    print(f"Query: {category_string}\n")
    print(f"\nMost similar {n_top} indexed texts:")
    for filename, sim in similarities[:n_top]:
        print(f"\tFilename: {filename}")
        print(f"\tSimilarity: {sim}")
        print("\n")

    return similarities

Para ver uma lista de todas as categorias disponíveis, consulte Categorias.

Tal como antes, pode chamar a função query_category a partir da linha de comandos:

python classify_text_tutorial.py query-category index.json "/Internet & Telecom/Mobile & Wireless"

Deverá ver uma saída semelhante à seguinte:

Query: /Internet & Telecom/Mobile & Wireless


Most similar 3 indexed texts:
  Filename: android.txt
  Similarity: 0.665573579045


  Filename: google.txt
  Similarity: 0.517527175966


  Filename: gcp.txt
  Similarity: 0.5

Consultar com texto

Em alternativa, pode consultar com texto que pode não fazer parte do texto indexado. A função query do tutorial é semelhante à função query_category, com o passo adicional de fazer um pedido classifyText para a entrada de texto e usar os resultados para consultar o ficheiro de índice.

Python

Para saber como instalar e usar a biblioteca cliente da API Natural Language, consulte o artigo Bibliotecas cliente da API Natural Language. Para mais informações, consulte a documentação de referência da API Python de linguagem natural.

Para se autenticar na API Natural Language, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

def query(index_file, text, n_top=3):
    """Find the indexed files that are the most similar to
    the query text.
    """

    with open(index_file) as f:
        index = json.load(f)

    # Get the categories of the query text.
    query_categories = classify(text, verbose=False)

    similarities = []
    for filename, categories in index.items():
        similarities.append((filename, similarity(query_categories, categories)))

    similarities = sorted(similarities, key=lambda p: p[1], reverse=True)

    print("=" * 20)
    print(f"Query: {text}\n")
    for category, confidence in query_categories.items():
        print(f"\tCategory: {category}, confidence: {confidence}")
    print(f"\nMost similar {n_top} indexed texts:")
    for filename, sim in similarities[:n_top]:
        print(f"\tFilename: {filename}")
        print(f"\tSimilarity: {sim}")
        print("\n")

    return similarities

Para o fazer na linha de comandos, execute:

python classify_text_tutorial.py query index.json "Google Home enables users to speak voice commands to interact with services through the Home's intelligent personal assistant called Google Assistant. A large number of services, both in-house and third-party, are integrated, allowing users to listen to music, look at videos or photos, or receive news updates entirely by voice. "

Isto imprime algo semelhante ao seguinte:

Query: Google Home enables users to speak voice commands to interact with services through the Home's intelligent personal assistant called Google Assistant. A large number of services, both in-house and third-party, are integrated, allowing users to listen to music, look at videos or photos, or receive news updates entirely by voice.

  Category: /Internet & Telecom, confidence: 0.509999990463
  Category: /Computers & Electronics/Software, confidence: 0.550000011921

Most similar 3 indexed texts:
  Filename: android.txt
  Similarity: 0.600579500049


  Filename: google.txt
  Similarity: 0.401314790229


  Filename: gcp.txt
  Similarity: 0.38772339779

O que se segue?

Com a API de classificação de conteúdo, pode criar outras aplicações. Por exemplo:

  • Classifique todos os parágrafos de um artigo para ver a transição entre tópicos.

  • Classificar conteúdo com indicação de tempo e analisar a tendência dos tópicos ao longo do tempo.

  • Compare as categorias de conteúdo com o sentimento do conteúdo através do método analyzeSentiment.

  • Compare as categorias de conteúdo com as entidades mencionadas no texto.

Além disso, pode usar outros produtos da Google Cloud Platform para simplificar o seu fluxo de trabalho:

  • Na aplicação de exemplo deste tutorial, processámos ficheiros de texto locais, mas pode modificar o código para processar ficheiros de texto armazenados num contentor do Google Cloud Storage transmitindo um URI do Google Cloud Storage ao método classify_text.

  • Na aplicação de exemplo deste tutorial, armazenámos o ficheiro de índice localmente e cada consulta é processada através da leitura de todo o ficheiro de índice. Isto significa uma latência elevada se tiver uma grande quantidade de dados indexados ou se precisar de processar várias consultas. O Datastore é uma escolha natural e conveniente para armazenar os dados de índice.