Anleitung zur Inhaltsklassifizierung

Zielgruppe

In dieser Anleitung erfahren Sie, wie Sie mit der Cloud Natural Language API schnell Anwendungen untersuchen und entwickeln können. Die Anleitung richtet sich an Nutzer, die mit den Grundlagen des Programmierens vertraut sind, ist jedoch auch ohne viel Programmierwissen verständlich. Nachdem Sie die Anleitung durchgegangen sind, sollten Sie in der Lage sein, mithilfe der Referenzdokumentation Ihre eigenen grundlegenden Anwendungen zu erstellen.

In dieser Anleitung wird für eine Natural Language-Anwendung Python-Code verwendet. Dabei wird nicht erläutert, wie die Python-Clientbibliotheken funktionieren, sondern wie Aufrufe an die Natural Language API erfolgen. Anwendungen in Java und Node.js verhalten sich im Wesentlichen ähnlich. In den Natural Language API-Beispielen, einschließlich des Beispiels in dieser Anleitung, finden Sie Beispiele in anderen Sprachen.

Vorbereitung

Diese Anleitung setzt Folgendes voraus:

Überblick

In dieser Anleitung wird anhand von classifyText-Anfragen eine grundlegende Natural Language-Anwendung vorgestellt, die Inhalte zusammen mit einer Konfidenzbewertung in Kategorien einteilt. Beispiel:

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

Die Liste aller verfügbaren Kategorielabels finden Sie unter Kategorien.

Mithilfe dieser Anleitung können Sie eine Anwendung zur Durchführung der folgenden Aufgaben erstellen:

  • Mehrere Textdateien klassifizieren und das Ergebnis in eine Indexdatei schreiben
  • Eingabeabfragetext zur Suche nach ähnlichen Textdateien verarbeiten
  • Eingabeabfrage-Kategorielabels zur Suche nach ähnlichen Textdateien verarbeiten

In dieser Anleitung werden Inhalte von Wikipedia verwendet. Sie könnten eine ähnliche Anwendung erstellen, um z. B. Nachrichtenartikel oder Onlinekommentare zu verarbeiten.

Quelldateien

Den Quellcode für die Anleitung finden Sie in den Beispielen zur Python-Clientbibliothek auf GitHub.

In dieser Anleitung wird Beispielquelltext von Wikipedia verwendet. Sie finden die Beispieltextdateien im Ordner resources/texts des GitHub-Projekts.

Bibliotheken importieren

Zur Verwendung der Cloud Natural Language API müssen Sie das Modul language aus der Bibliothek google-cloud-language importieren. Das Modul language.types enthält Klassen, die zum Erstellen von Anfragen erforderlich sind. Das Modul language.enums wird verwendet, um den Typ des Eingabetextes anzugeben. In dieser Anleitung werden Nur-Text-Inhalte klassifiziert (language.enums.Document.Type.PLAIN_TEXT).

Damit die Ähnlichkeit von Texten anhand der resultierenden Inhaltsklassifizierung berechnet werden, wird in dieser Anleitung numpy für Vektorberechnungen verwendet.

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für Natural Language finden Sie unter Natural Language-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Natural Language Python API.

Richten Sie für die Authentifizierung bei Natural Language Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

import argparse
import json
import os

from google.cloud import language_v1
import numpy

Schritt 1: Inhalte klassifizieren

Sie können die Python-Clientbibliothek verwenden, um eine Anfrage zur Klassifizierung von Inhalten an die Natural Language API zu stellen. Die Python-Clientbibliothek enthält die Details für Anfragen an die und Antworten von der Natural Language API.

Die Funktion classify in der Anleitung ruft die Methode classifyText der Natural Language API auf. Dabei wird zuerst eine Instanz der Klasse LanguageServiceClient erstellt und dann wird die Methode classify_text der Instanz LanguageServiceClient aufgerufen.

Die Funktion classify der Anleitung klassifiziert in diesem Beispiel nur Textinhalte. Sie können den Inhalt einer Webseite auch klassifizieren. Dazu übergeben Sie die Quell-HTML der Webseite als text und legen den Parameter type auf language.enums.Document.Type.HTML fest.

Weitere Informationen finden Sie unter Inhaltsklassifizierung. Details zur Struktur von Anfragen an die Natural Language API finden Sie in der Natural Language-Referenz.

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für Natural Language finden Sie unter Natural Language-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Natural Language Python API.

Richten Sie für die Authentifizierung bei Natural Language Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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

Das zurückgegebene Ergebnis ist ein Wörterbuch mit den Kategorielabels als Schlüssel und Konfidenzbewertungen als Werten. Beispiel:

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

Das Python-Script der Anleitung ist so strukturiert, dass es für schnelle Tests über die Befehlszeile ausgeführt werden kann. Sie können beispielsweise Folgendes ausführen:

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. "

Schritt 2: Mehrere Textdateien indexieren

Die Funktion index im Anleitungsskript verwendet als Eingabe ein Verzeichnis mit mehreren Textdateien sowie den Pfad zu einer Datei, in der sie die indexierte Ausgabe speichert. Der Standardname ist index.json. Die Funktion index liest den Inhalt jeder Textdatei im Eingabeverzeichnis und übergibt dann die Textdateien an die Cloud Natural Language API, damit sie in Inhaltskategorien klassifiziert werden.

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für Natural Language finden Sie unter Natural Language-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Natural Language Python API.

Richten Sie für die Authentifizierung bei Natural Language Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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

Die Ergebnisse aus der Cloud Natural Language API für jede Datei werden in einem einzigen Wörterbuch organisiert, als JSON-String serialisiert und dann in eine Datei geschrieben. Beispiel:

{
    "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
    }
}

Um Textdateien mit dem standardmäßigen Ausgabedateinamen index.json über die Befehlszeile zu indexieren, führen Sie den folgenden Befehl aus:

python classify_text_tutorial.py index resources/texts

Schritt 3: Index abfragen

Mit Kategorielabels abfragen

Sobald die Indexdatei (Standarddateiname = index.json) erstellt wurde, können Sie Abfragen an den Index senden, um einige der Dateinamen sowie die zugehörigen Konfidenzbewertungen abzurufen.

Eine Möglichkeit dafür ist die Verwendung eines Kategorielabels als Abfrage. In der Anleitung wird dies mit der Funktion query_category erreicht. Angaben zur Implementierung von Hilfsfunktionen wie similarity finden Sie in der Datei classify_text_tutorial.py. In Ihren Anwendungen sollten die Ähnlichkeitsbewertung und das Ähnlichkeits-Ranking sorgfältig in Abhängigkeit von konkreten Anwendungsfällen gestaltet werden.

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für Natural Language finden Sie unter Natural Language-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Natural Language Python API.

Richten Sie für die Authentifizierung bei Natural Language Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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

Eine Liste aller verfügbaren Kategorien finden Sie unter Kategorien.

Wie zuvor können Sie die Funktion query_category über die Befehlszeile aufrufen:

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

Die Ausgabe sollte in etwa so aussehen:

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

Mit Text abfragen

Alternativ können Sie Abfragen mit Text durchführen, der nicht Teil des indexierten Texts ist. Die Funktion query der Anleitung ähnelt der Funktion query_category, umfasst aber einen zusätzlichen Schritt, bei dem eine classifyText-Anfrage für die Texteingabe gestellt und die Ergebnisse zum Abfragen der Indexdatei verwendet werden.

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für Natural Language finden Sie unter Natural Language-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Natural Language Python API.

Richten Sie für die Authentifizierung bei Natural Language Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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

Führen Sie Folgendes aus, um dies über die Befehlszeile zu tun:

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. "

Die Ausgabe sieht ähnlich wie folgt aus:

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

Nächste Schritte

Mit der API zur Inhaltsklassifizierung können Sie weitere Anwendungen erstellen. Beispiel:

  • Klassifizieren Sie jeden Absatz in einem Artikel, um den Übergang zwischen Themen zu sehen.

  • Klassifizieren Sie mit Zeitstempeln versehene Inhalte und analysieren Sie den Trend der Themen im Laufe der Zeit.

  • Vergleichen Sie Inhaltskategorien mit der Inhaltsstimmung unter Verwendung der analyzeSentiment-Methode.

  • Vergleichen Sie Inhaltskategorien mit im Text erwähnten Entitäten.

Darüber hinaus können Sie Ihren Workflow mit anderen Google Cloud Platform-Produkten optimieren:

  • In der Beispielanwendung für diese Anleitung wurden lokale Textdateien verarbeitet. Sie können den Code aber so ändern, dass Textdateien verarbeitet werden, die in einem Google Cloud Storage-Bucket gespeichert sind. Dazu übergeben Sie einen Google Cloud Storage-URI an die Methode classify_text.

  • In der Beispielanwendung für diese Anleitung haben wir die Indexdatei lokal gespeichert und jede Abfrage wird durch Lesen der gesamten Indexdatei verarbeitet. Wenn Sie eine große Menge an indexierten Daten haben oder viele Abfragen verarbeiten müssen, entsteht hierdurch eine hohe Latenz. Datastore ist eine logische und bequeme Wahl für die Speicherung der Indexdaten.