C# で Natural Language API を使用する

1. 概要

この Codelab では、C# で Natural Language API を使用することに焦点を当てます。感情分析、エンティティ分析、構文分析を行う方法について学習します。

Google Cloud Natural Language API は、感情分析、エンティティ分析、構文解析などの自然言語理解テクノロジーをデベロッパーに提供します。

学習内容

  • Cloud Shell を使用する方法
  • Natural Language API を有効にする方法
  • API リクエストを認証する方法
  • C# 用 Google Cloud クライアント ライブラリをインストールする方法
  • 感情分析を行う方法
  • エンティティ分析の実行方法
  • 構文分析の実行方法

必要なもの

  • Google Cloud Platform プロジェクト
  • ChromeFirefox などのブラウザ
  • C# の使用経験

アンケート

このチュートリアルをどのように使用されますか?

通読するのみ 通読し、演習を行う

C# の使用感をどのように評価されますか。

初心者 中級者 上級者

Google Cloud Platform サービスのご利用経験についてどのように評価されますか?

<ph type="x-smartling-placeholder"></ph> 初心者 中級 上達 をご覧ください。

2. 設定と要件

セルフペース型の環境設定

  1. Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。いつでも更新できます。
  • プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は PROJECT_ID と識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。
  • なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
  1. 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクトを削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。

Cloud Shell を起動する

Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。

Cloud Shell をアクティブにする

  1. Cloud Console で、[Cloud Shell をアクティブにする] d1264ca30785e435.png をクリックします。

cb81e7c8e34bc8d.png

Cloud Shell を初めて起動する場合は、内容を説明する中間画面が表示されます。中間画面が表示されたら、[続行] をクリックします。

d95252b003979716.png

Cloud Shell のプロビジョニングと接続に少し時間がかかる程度です。

7833d5e1c5d18f54.png

この仮想マシンには、必要なすべての開発ツールが読み込まれます。5 GB の永続的なホーム ディレクトリが用意されており、Google Cloud で稼働するため、ネットワークのパフォーマンスと認証が大幅に向上しています。この Codelab での作業のほとんどはブラウザを使って行うことができます。

Cloud Shell に接続すると、認証が完了し、プロジェクトに各自のプロジェクト ID が設定されていることがわかります。

  1. Cloud Shell で次のコマンドを実行して、認証されたことを確認します。
gcloud auth list

コマンド出力

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Cloud Shell で次のコマンドを実行して、gcloud コマンドがプロジェクトを認識していることを確認します。
gcloud config list project

コマンド出力

[core]
project = <PROJECT_ID>

上記のようになっていない場合は、次のコマンドで設定できます。

gcloud config set project <PROJECT_ID>

コマンド出力

Updated property [core/project].

3. Natural Language API を有効にする

Natural Language API を使用する前に、この API を有効にする必要があります。Cloud Shell で次のコマンドを使用して API を有効にできます。

gcloud services enable language.googleapis.com

4. C# 用 Google Cloud Natural Language API クライアント ライブラリをインストールする

まず、Natural Language API サンプルを実行するために使用するシンプルな C# コンソール アプリケーションを作成します。

dotnet new console -n NaturalLanguageApiDemo

アプリケーションが作成され、依存関係が解決されたことがわかります。

The template "Console Application" was created successfully.
Processing post-creation actions...
...
Restore succeeded.

次に、NaturalLanguageApiDemo フォルダに移動します。

cd NaturalLanguageApiDemo/

次に、Google.Cloud.Language.V1 NuGet パッケージをプロジェクトに追加します。

dotnet add package Google.Cloud.Language.V1
info : Adding PackageReference for package 'Google.Cloud.Language.V1' into project '/home/atameldev/NaturalLanguageApiDemo/NaturalLanguageApiDemo.csproj'.
log  : Restoring packages for /home/atameldev/NaturalLanguageApiDemo/NaturalLanguageApiDemo.csproj...
...
info : PackageReference for package 'Google.Cloud.Language.V1' version '1.1.0' added to file '/home/atameldev/NaturalLanguageApiDemo/NaturalLanguageApiDemo.csproj'.

これで、Natural Language API を使用する準備が整いました。

5. 感情分析

このセクションでは、文字列の感情分析を行い、Natural Language API を使用して ScoreMagnitude を確認します。

感情の Score は -1.0(ネガティブ)~ 1.0(ポジティブ)の範囲で、与えられた情報の全体的な感情に対応します。

感情の Magnitude は 0.0 ~+無限大の範囲で、与えられた情報から得た感情の全体的な強さを示します。提供される情報が多いほど、強度は高くなります。

Cloud Shell の右上からコードエディタを開きます。

fd3fc1303e63572.png

NaturalLanguageApiDemo フォルダ内の Program.cs ファイルに移動し、コードを次のように置き換えます。

using System;
using Google.Cloud.Language.V1;

namespace NaturalLanguageApiDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var text = "Yukihiro Matsumoto is great!";
            var client = LanguageServiceClient.Create();
            var response = client.AnalyzeSentiment(Document.FromPlainText(text));
            var sentiment = response.DocumentSentiment;
            Console.WriteLine($"Score: {sentiment.Score}");
            Console.WriteLine($"Magnitude: {sentiment.Magnitude}");
        }
    }
}

1 ~ 2 分ほどかけてコードを学習し、コード スニペットがどのように使用されているか、"Yukihiro Matsumoto is Great!" という文字列の感情分析がどのように行われているかを確認してください。

Cloud Shell に戻り、アプリを実行します。

dotnet run

次の出力が表示されます。

Score: 0.9
Magnitude: 0.9

概要

このステップでは、テキスト文字列に対して感情分析を実行し、スコアと強度を出力することができました。詳しくは、感情分析をご覧ください。

6. エンティティ分析

エンティティ分析では、公人、ランドマークなどの固有名詞を検索して、指定された情報にエンティティがないか調べ、エンティティに関する情報を返します。

エンティティ分析を実行するには、NaturalLanguageApiDemo フォルダ内の Program.cs ファイルに移動し、コードを次のように置き換えます。

using System;
using Google.Cloud.Language.V1;

namespace NaturalLanguageApiDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var text = "Yukihiro Matsumoto is great!";
            var client = LanguageServiceClient.Create();
            var response = client.AnalyzeEntitySentiment(Document.FromPlainText(text));

            foreach (var entity in response.Entities)
            {
                Console.WriteLine($"Entity: \"{entity.Name}\" ({entity.Type})");
                if (entity.Metadata.ContainsKey("wikipedia_url"))
                {
                    Console.WriteLine($"URL: {entity.Metadata["wikipedia_url"]}");
                }
            }
        }
    }
}

1 ~ 2 分ほどかけてコードを学習し、コード スニペットを使用して文字列「"Yukihiro Matsumoto is Great!"」のエンティティ分析を実行する方法を確認してください。

Cloud Shell に戻り、アプリを実行します。

dotnet run

次の出力が表示されます。

Entity: "Yukihiro Matsumoto" (Person)
URL: https://en.wikipedia.org/wiki/Yukihiro_Matsumoto

概要

このステップでは、テキスト文字列に対してエンティティ分析を実行し、そのエンティティを出力できました。エンティティ分析の詳細を確認する。

7. 構文解析

構文解析では、言語情報を抽出し、指定されたテキストを一連の文とトークン(通常は単語の境界)に分解して、それらのトークンをさらに分析します。

この例では、文の数とトークンを出力し、各トークンの品詞を示します。

構文分析を実行するには、NaturalLanguageApiDemo フォルダ内の Program.cs ファイルに移動し、コードを次のように置き換えます。

using System;
using Google.Cloud.Language.V1;
using static Google.Cloud.Language.V1.AnnotateTextRequest.Types;

namespace NaturalLanguageApiDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var text = "Yukihiro Matsumoto is great!";
            var client = LanguageServiceClient.Create();
            var response = client.AnnotateText(Document.FromPlainText(text), 
                new Features { ExtractSyntax = true });

            var sentences = response.Sentences;
            var tokens = response.Tokens;

            Console.WriteLine($"Sentences: {sentences.Count}");
            Console.WriteLine($"Tokens: {tokens.Count}");

            foreach (var token in tokens)
            {
                Console.WriteLine($"{token.PartOfSpeech.Tag} {token.Text.Content}");
            }
        }
    }
}

1 ~ 2 分ほどかけてコードを学習し、コード スニペットを使用して文字列「"Yukihiro Matsumoto is Great!"」の構文分析を実行する方法を確認してください。

Cloud Shell に戻り、アプリを実行します。

dotnet run

次の出力が表示されます。

Sentences: 1
Tokens: 5
Noun Yukihiro
Noun Matsumoto
Verb is
Adj great
Punct !

以下に視覚的な説明を示します。

297dbabf1a723bad.png

概要

このステップでは、単純なテキスト文字列に対して構文分析を実行し、各トークンの文数、トークン数、言語情報を出力しました。構文分析の詳細を確認する。

8. 完了

C# で Natural Language API を使用して、情報に対してさまざまな種類の分析を行う方法を学びました。

クリーンアップ

このクイックスタートで使用するリソースに対して Google Cloud Platform アカウントに課金されないようにするには:

  • Cloud Platform コンソールに移動します。
  • シャットダウンするプロジェクトを選択し、[削除] をクリックしますプロジェクトの削除がスケジュールされます。

詳細

ライセンス

この作業はクリエイティブ・コモンズの表示 2.0 汎用ライセンスにより使用許諾されています。