Tutorial Analisis Sentimen

Audience

Tutorial ini dirancang untuk memungkinkan Anda secara cepat mulai menjelajahi dan mengembangkan aplikasi dengan Google Cloud Natural Language API. Kursus ini dirancang untuk orang yang memahami pemrograman dasar, meskipun meskipun tidak memiliki banyak pengetahuan pemrograman, Anda harus dapat mengikutinya. Setelah mengikuti tutorial ini, Anda akan dapat menggunakan Dokumentasi referensi untuk membuat aplikasi dasar Anda sendiri.

Tutorial ini menjelaskan tentang aplikasi Natural Language API yang menggunakan kode Python. Tujuannya di sini bukan untuk menjelaskan library klien Python, tetapi untuk menjelaskan cara melakukan panggilan ke Natural Language API. Aplikasi di Java dan Node.js pada dasarnya mirip. Lihat Sample Natural Language API untuk melihat contoh dalam bahasa lain (termasuk contoh ini dalam tutorial).

Prasyarat

Tutorial ini memiliki beberapa prasyarat:

Menganalisis sentimen dokumen

Tutorial ini membahas aplikasi dasar Natural Language API, menggunakan permintaan analyzeSentiment, yang menjalankan analisis sentimen pada teks. Analisis sentimen mencoba menentukan sikap secara keseluruhan (positif atau negatif) dan diwakili oleh nilai score dan magnitude numerik. (Untuk mengetahui informasi selengkapnya tentang konsep ini, baca Dasar-Dasar Bahasa Alam.)

Kita akan menampilkan seluruh kode terlebih dahulu. (Perlu diperhatikan bahwa kami telah menghapus sebagian besar komentar dari kode ini untuk menunjukkan betapa singkatnya komentar tersebut. Kami akan memberikan lebih banyak komentar selagi kami menelusuri kode tersebut.)

Untuk mengetahui informasi selengkapnya tentang cara menginstal dan menggunakan Library Klien Google Cloud Natural Language untuk Python, lihat Library Klien Natural Language API.
"""Demonstrates how to make a simple call to the Natural Language API."""

import argparse

from google.cloud import language_v1

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(f"Sentence {index} has a sentiment score of {sentence_sentiment}")

    print(f"Overall Sentiment: score of {score} with magnitude of {magnitude}")
    return 0

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

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

    document = language_v1.Document(
        content=content, type_=language_v1.Document.Type.PLAIN_TEXT
    )
    annotations = client.analyze_sentiment(request={"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)

Aplikasi sederhana ini melakukan tugas-tugas berikut:

  • Mengimpor library yang diperlukan untuk menjalankan aplikasi
  • Mengambil file teks dan meneruskannya ke fungsi main()
  • Membaca file teks dan membuat permintaan ke layanan
  • Mengurai respons dari layanan dan menampilkannya kepada pengguna

Kita akan membahas langkah-langkah ini secara lebih mendetail di bawah.

Mengimpor library

Untuk mengetahui informasi selengkapnya tentang cara menginstal dan menggunakan Library Klien Google Cloud Natural Language untuk Python, lihat Library Klien Natural Language API.
import argparse

from google.cloud import language_v1

Kami mengimpor argparse, library standar, untuk memungkinkan aplikasi menerima nama file input sebagai argumen.

Untuk menggunakan Cloud Natural Language API, kita juga ingin mengimpor modul language dari library google-cloud-language. Modul types berisi class yang diperlukan untuk membuat permintaan.

Menjalankan aplikasi

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)

Di sini, kita cukup mengurai argumen yang diteruskan untuk nama file teks dan meneruskannya ke fungsi analyze().

Mengautentikasi ke API

Sebelum berkomunikasi dengan layanan Natural Language API, Anda perlu mengautentikasi layanan Anda menggunakan kredensial yang diperoleh sebelumnya. Dalam aplikasi, cara termudah untuk mendapatkan kredensial adalah dengan menggunakan Kredensial Default Aplikasi (ADC). Secara default, ADC akan mencoba mendapatkan kredensial dari file lingkungan GOOGLE_APPLICATION_CREDENTIALS, yang harus ditetapkan agar mengarah ke file kunci JSON akun layanan Anda. (Anda harus sudah menyiapkan akun layanan dan lingkungan untuk menggunakan ADC di Panduan Memulai. Lihat Menyiapkan Akun Layanan untuk informasi selengkapnya.)

Library Klien Google Cloud untuk Python otomatis menggunakan kredensial default aplikasi.

Membuat permintaan

Setelah layanan Natural Language API kita siap, kita dapat mengakses layanan dengan memanggil metode analyze_sentiment dari instance LanguageServiceClient.

Library klien mengenkapsulasi detail permintaan dan respons ke API. Lihat Referensi Natural Language API untuk mengetahui informasi lengkap tentang struktur spesifik permintaan tersebut.

Untuk mengetahui informasi selengkapnya tentang cara menginstal dan menggunakan Library Klien Google Cloud Natural Language untuk Python, lihat Library Klien Natural Language API.
def analyze(movie_review_filename):
    """Run a sentiment analysis request on text within a passed filename."""
    client = language_v1.LanguageServiceClient()

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

    document = language_v1.Document(
        content=content, type_=language_v1.Document.Type.PLAIN_TEXT
    )
    annotations = client.analyze_sentiment(request={"document": document})

    # Print the results
    print_result(annotations)

Cuplikan kode ini melakukan tugas-tugas berikut:

  1. Membuat instance LanguageServiceClient sebagai klien.
  2. Membaca nama file yang berisi data teks ke dalam variabel.
  3. Membuat instance objek Document dengan konten file.
  4. Memanggil metode analyze_sentiment klien.

Mengurai respons

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(f"Sentence {index} has a sentiment score of {sentence_sentiment}")

    print(f"Overall Sentiment: score of {score} with magnitude of {magnitude}")
    return 0

Kita membahas respons untuk mengekstrak nilai score sentimen untuk setiap kalimat, serta nilai score dan magnitude secara keseluruhan untuk seluruh ulasan, lalu menampilkannya kepada pengguna.

Menjalankan contoh

Untuk menjalankan sampel, kita akan mengujinya pada serangkaian ulasan film (palsu) untuk film "Bladerunner".

  1. Download contoh dari Google Cloud Storage:

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

    gsutil biasanya diinstal sebagai bagian dari gcloud CLI. Untuk menginstal versi terbaru gcloud CLI, lihat dokumentasi gcloud CLI.

  2. Ekstrak contoh tersebut, yang akan membuat folder "reviews":

    gunzip sentiment-samples.tgz
    tar -xvf sentiment-samples.tar
    
  3. Jalankan analisis sentimen kita pada salah satu file yang ditentukan:

    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
    

Contoh di atas akan menunjukkan ulasan yang relatif positif (skor 0.5), dan relatif emosional (tingkat 5.5).

Menjalankan analisis pada contoh lain akan menghasilkan nilai yang mirip dengan yang ditunjukkan di bawah ini:

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

Perlu diperhatikan bahwa besarannya sama (menunjukkan jumlah yang relatif sama dari sentimen yang signifikan secara emosional) kecuali untuk kasus "netral", yang menunjukkan ulasan dengan sentimen emosional yang tidak terlalu banyak, baik positif maupun negatif. (Untuk mengetahui informasi lebih lanjut mengenai skor dan magnitudo sentimen, serta cara menafsirkan nilai-nilai ini, lihat Menafsirkan Nilai Analisis Sentimen.)

Jika Anda ingin menjelajahi analisis sentimen dengan lebih banyak data, Stanford memberikan set data ulasan film IMDB. Untuk mengambil ulasan film ini:

  1. Download set data Ulasan Film Besar.
  2. Ekstrak file ke direktori kerja Anda. Ulasan film dibagi menjadi direktori pos dan neg dalam direktori data train dan test, dengan setiap file teks yang berisi satu ulasan film.
  3. Jalankan alat sentiment_analysis.py pada file teks ulasan film apa pun.

Selamat! Anda telah melakukan tugas inferensi pertama menggunakan Google Cloud Natural Language API.