【Azure】Text Analyticsで感情分析

##ダレトク記事？
・Microsoft Azureをこれから試してみたい人
・AIを体験してみたい人
・感情分析を体験してみたい人

##Text Analyticsとは？
テキストから感情の分析や、キーとなるフレーズや人、組織等の抽出が可能なサービスです。
感情の度合いを数値化する等が可能です。

※Azureのサービスを利用するには無料の[アカウント登録](https://azure.microsoft.com/ja-jp/free/)が必要です。
　まだ登録されていない方はまずはアカウント登録から始めましょう

##サンプル動画を見てみよう
サンプルアプリを作成してText Analyticsの使い方を解説しています。 是非見てみてください。
<iframe width="640" height="360" src="https://www.youtube.com/embed/v85SIHJ3Bgk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

##Text Analyticsを使ってみよう
###Text Analyticsの作成
Text Analyticsのページで「＋作成」ボタンから進めていきます
![image-31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521440/3dab57fb-a7c9-5388-2cb8-6b1f4eeb71ef.png)

###各種設定
リソースグループ、リージョン、名前は何でもいいです。
試すだけなら価格レベルはFreeにしておきましょう。
![image-34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521440/debd8127-5656-b101-446b-e6cc5ebedd27.png)

###キーとエンドポイント
Text Analytics が作成できたら、「APIキー」のリンクから、「キー１」と「エンドポイント」をコピーして控えておきます。
![image-36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521440/7a539814-8f5d-2520-f3e1-b9492d6a88a6.png)
![image-35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521440/c70ff8e6-6c96-cc5c-6b3e-cb5dd5b6f268.png)

##感情分析プログラムを作ってみよう

###プロジェクトの作成
今回はVisual Studio2019でWPFアプリケーション（C#）を作ってみました。
![image-38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521440/4661d505-73cb-0d1c-14d8-e2f87a7c5572.png)

###NuGet追加
Azure.AI.TextAnalyticsというNuGetをインストールします。
![image-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521440/03a8b003-e68e-7681-9b87-572a9097cc53.png)
![image-40-1024x142.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521440/80b19f27-cd72-dc80-9afe-41c561201323.png)

###UI作成
解析対象の文字を入れるTextBoxと解析ボタン、解析結果を表示するTextBoxを配置します。
![image-41-1024x510.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521440/1de4d1d0-5f62-9857-85e3-3bfd5a9ee88c.png)

```
<Window x:Class="TATest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:TATest"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <TextBox AcceptsReturn="True" x:Name="TA_Target" HorizontalAlignment="Left" Margin="45,34,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="720" Height="132"/>
        <TextBox AcceptsReturn="True" x:Name="TA_Result" HorizontalAlignment="Left" Margin="45,228,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="720" Height="179"/>
        <Button x:Name="button" Content="解析" HorizontalAlignment="Left" Margin="45,186,0,0" VerticalAlignment="Top" Click="button_Click"/>

    </Grid>
</Window>
```

###キーとエンドポイントの定義
Azure Portalで控えたキーとエンドポイントを定義しておきます。
※キーとエンドポイントの文字列は実際のものに書き換えてください

```
private static AzureKeyCredential azureKeyCredential = new AzureKeyCredential("74032531df5842e6a993a225ec9e852d");
private static Uri endpoint = new Uri("https://ta0829.cognitiveservices.azure.com/");
```

###ボタンクリックイベント
ボタンクリックイベントを書きます。
AnalyzeSentimentメソッドで解析をしています。
日本語を解析する場合は第２引数を”ja”にしておきましょう。

```
private void button_Click(object sender, RoutedEventArgs e)
{
    StringBuilder result = new StringBuilder();
    var target = this.TA_Target.Text;


    var client = new TextAnalyticsClient(endpoint, azureKeyCredential);
    DocumentSentiment documentSentiment = client.AnalyzeSentiment(target, "ja");

    foreach (var sentence in documentSentiment.Sentences)
    {
        result.Append(sentence.Text);
        result.Append(Environment.NewLine);
        result.Append(sentence.Sentiment);
        result.Append(Environment.NewLine);
        result.Append($"Positive:{sentence.ConfidenceScores.Positive}");
        result.Append(Environment.NewLine);
        result.Append($"Negative:{sentence.ConfidenceScores.Negative}");
        result.Append(Environment.NewLine);
        result.Append($"Neutral:{sentence.ConfidenceScores.Neutral}");
        result.Append(Environment.NewLine);
        result.Append(Environment.NewLine);
    }

    this.TA_Result.Text = result.ToString();
}
```
###プログラムの実行
以下のように、入力したテキストについて感情を数値で表すことができました。
![image-42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521440/b7472075-f88a-d1cc-b3b5-62cc0faf6436.png)

##さいごに
いかがでしたでしょうか。 Text Analyticsを使って簡単なコードを書くだけでテキストの感情分析ができました。
膨大なアンケート結果を解析したりする際に役立つのではないでしょうか。
Freeの価格レベルがあるので是非お試しください。

##元記事
私が運営する以下のblogにも同じ記事を載せています。
https://senote.tokyo/azure-text-analytics-sentiment/