Anleitung zur Sentimentanalyse

Audience

In dieser Anleitung erfahren Sie, wie Sie mit der Google 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 die Natural Language API-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 finden Sie Beispiele in anderen Sprachen, einschließlich dieses in der vorliegenden Anleitung verwendeten Beispiels.

Voraussetzungen

Diese Anleitung setzt Folgendes voraus:

Sentimentanalyse eines Dokuments

In dieser Anleitung wird eine grundlegende Natural Language API-Anwendung anhand einer analyzeSentiment-Anfrage vorgestellt, die eine Sentimentanalyse des Texts ausführt. Bei der Sentimentanalyse wird versucht, die allgemeine (positive oder negative) Einstellung zu erkennen. Die Darstellung erfolgt durch die numerischen score- und magnitude-Werte. Weitere Informationen zu diesen Konzepten finden Sie unter Grundlagen der Natural Language API.

Zuerst zeigen wir den gesamten Code. Wir haben die meisten Kommentare aus diesem Code entfernt, um zu zeigen, wie kurz er ist. Während wir den Code durchgehen, kommen jedoch weitere Kommentare hinzu.

Weitere Informationen zur Installation und Verwendung der Google Cloud Natural Language-Clientbibliothek für Python finden Sie unter Natural Language API-Clientbibliotheken.
"""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)

Diese einfache Anwendung führt folgende Aufgaben aus:

  • Importiert die für die Ausführung der Anwendung erforderlichen Bibliotheken
  • Übergibt eine Textdatei an die Funktion main()
  • Liest die Textdatei und sendet eine Anfrage an den Dienst
  • Analysiert die Antwort des Diensts und zeigt sie dem Nutzer an

Diese Schritte werden unten ausführlicher besprochen.

Bibliotheken importieren

Weitere Informationen zur Installation und Verwendung der Google Cloud Natural Language-Clientbibliothek für Python finden Sie unter Natural Language API-Clientbibliotheken.
import argparse

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

Sie importieren die Standardbibliothek argparse, damit die Anwendung die eingegebenen Dateinamen als Argumente akzeptieren kann.

Zur Verwendung der Cloud Natural Language API müssen Sie auch das Modul language aus der google-cloud-language-Bibliothek importieren. Das Modul types enthält Klassen, die zum Erstellen von Anfragen erforderlich sind.

Anwendung ausführen

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)

Hier parsen Sie das für den Textdateinamen übergebene Argument und übergeben es an die Funktion analyze().

Bei der API authentifizieren

Vor der Kommunikation mit dem Natural Language API-Dienst ist es notwendig, dass Sie Ihren Dienst authentifizieren. Dazu verwenden Sie die zuvor abgerufenen Anmeldedaten. Innerhalb einer Anwendung erhalten Sie die Anmeldedaten am einfachsten über die Verwendung der Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC). Standardmäßig ruft ADC die Anmeldedaten von der GOOGLE_APPLICATION_CREDENTIALS-Umgebungsdatei ab, die so festgelegt sein muss, dass sie auf die JSON-Schlüsseldatei Ihres Dienstkontos verweist. (Sie müssen Ihr Dienstkonto und die Umgebung, wie in der Kurzanleitung beschrieben, zur Verwendung von ADC eingerichtet haben. Weitere Informationen finden Sie unter Dienstkonto einrichten.)

Die Google Cloud-Clientbibliothek für Python verwendet automatisch die Standardanmeldedaten für Anwendungen.

Anfrage senden

Der Natural Language API-Dienst ist nun bereit. Rufen Sie die Methode analyze_sentiment der Instanz LanguageServiceClient auf, um auf den Dienst zuzugreifen.

Die Clientbibliothek enthält die Einzelheiten zu API-Anfragen und -Antworten. In der Natural Language API-Referenz finden Sie alle Einzelheiten zur spezifischen Struktur einer solchen Anfrage.

Weitere Informationen zur Installation und Verwendung der Google Cloud Natural Language-Clientbibliothek für Python finden Sie unter Natural Language API-Clientbibliotheken.
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)

Dieses Code-Snippet führt folgende Aufgaben aus:

  1. Instanziiert eine LanguageServiceClient-Instanz als Client
  2. Liest den Dateinamen mit den Textdaten in eine Variable ein
  3. Instanziiert ein Document-Objekt mit dem Inhalt der Datei
  4. Ruft die Methode analyze_sentiment des Clients auf

Antwort parsen

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

Gehen Sie die Antwort durch, damit die score-Sentimentwerte für die einzelnen Sätze sowie die allgemeinen score- und magnitude-Werte für die gesamte Rezension extrahiert und dem Nutzer angezeigt werden.

Beispiel ausführen

Um das Beispiel auszuführen, testen wir es an einer Reihe von (fiktiven) Filmrezensionen für den Film "Bladerunner".

  1. Laden Sie die Beispiele aus Google Cloud Storage herunter:

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

    gsutil wird normalerweise als Teil des Cloud SDK installiert. Informationen zum Installieren der neuesten Version des Cloud SDK finden Sie in der Dokumentation zum Cloud SDK.

  2. Beim Entpacken dieser Beispiele wird ein "reviews"-Ordner erstellt:

    gunzip sentiment-samples.tgz
    tar -xvf sentiment-samples.tar
    
  3. Führen Sie die Sentimentanalyse an einer der angegebenen Dateien durch:

    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
    

Das oben aufgeführte Beispiel würde eine relativ positive (Score-Wert von 0.5) und eine relativ emotionale (Magnitude-Wert von 5.5) Rezension ergeben.

Beim Durchführen einer Analyse für die anderen Beispiele müssten sich Werte ergeben, die den unten aufgeführten Werten ähnlich sind:

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

Beachten Sie, dass die Magnitude-Werte alle ähnlich sind (und einen relativ gleichen Anteil an emotional relevanter Stimmung zeigen), ausgenommen beim "neutralen" Fall, der eine Rezension mit nicht viel emotionaler, weder positiver noch negativer, Stimmung ergibt. (Weitere Informationen zu Score- und Magnitude-Stimmungswerten und ihrer Interpretation finden Sie unter Werte der Sentimentanalyse interpretieren.)

Wenn Sie die Sentimentanalyse mit einer größeren Datenmenge ausführen möchten, können Sie das von Stanford bereitgestellte Dataset mit IMDB-Filmrezensionen nutzen. So rufen Sie diese Filmrezensionen ab:

  1. Laden Sie das große Dataset mit Filmrezensionen herunter.
  2. Entpacken Sie die Datei in Ihr Arbeitsverzeichnis. Die Filmrezensionen sind in pos- und neg-Verzeichnisse in den Datenverzeichnissen train und test aufgeteilt, wobei jede Textdatei eine Rezension enthält.
  3. Führen Sie das Tool sentiment_analysis.py für eine der Textdateien mit Filmrezensionen aus.

Das wars! Sie haben Ihre ersten Ableitungsaufgaben mit der Google Cloud Natural Language API ausgeführt.