AWS日記⑧ (Comprehend)

# はじめに
今回は Amazon Comprehend の「感情分析」を試します。

[今回作成したAmazon Comprehend の感情分析機能を試すページ](https://labo.systems/comprehend)

# 準備
[Lambda , API Gatewayの準備をします。]
(https://qiita.com/tanaka_takurou/items/3f93295de6cff060ec09)

[Amazon Comprehendの資料]
[Amazon Comprehend が日本語に対応しました](https://aws.amazon.com/jp/blogs/news/amazon-comprehend-japanese/)
[Amazon Comprehendが日本語対応したのでAlexaスキルで感情分析してみた](https://qiita.com/y_fujisawa/items/1108438e75baebfdd134)
[【初心者でも使える】AWSが提供する文書解析サービス「Amazon Comprehend」が日本語対応したので触ってみた！](https://qiita.com/JJ33/items/eaa51a0f954889d04f4c)

# WEBページ・API作成
GO言語のAWS Lambda関数ハンドラー aws-lambda-go を使用してHTMLやJSONを返す処理を作成します。
また、Comprehend を使用するため aws-sdk-go を利用します。

[参考資料]
[AWS SDK for Go API Reference](https://docs.aws.amazon.com/sdk-for-go/api/service/comprehend/)

##### 感情分析するには DetectSentiment を使う。

```golang:main.go
func detectSentiment(message string)(string, error) {
        svc := comprehend.New(session.New(), &aws.Config{
                Region: aws.String("ap-northeast-1"),
        })

        input := &comprehend.DetectSentimentInput{
                LanguageCode: aws.String(languageCode),
                Text:  aws.String(message),
        }
        res, err := svc.DetectSentiment(input)
        if err != nil {
                return "", err
        }
        return aws.StringValue(res.Sentiment), nil
}
```

※ 6/14 追記

##### 言語検出するには DetectDominantLanguage を使う。

```golang:main.go
func detectDominantLanguage(message string)(string, error) {
        svc := comprehend.New(session.New(), &aws.Config{
                Region: aws.String("ap-northeast-1"),
        })

        input := &comprehend.DetectDominantLanguageInput{
                Text:  aws.String(message),
        }
        res, err := svc.DetectDominantLanguage(input)
        if err != nil {
                return "", err
        }
        results, err2 := json.Marshal(res.Languages)
        if err2 != nil {
                return "", err2
        }
        return string(results), nil
}
```

※ 6/14 追記

##### エンティティ認識するには DetectEntities を使う。

```golang:main.go
func detectEntities(message string)(string, error) {
        svc := comprehend.New(session.New(), &aws.Config{
                Region: aws.String("ap-northeast-1"),
        })

        input := &comprehend.DetectEntitiesInput{
                LanguageCode: aws.String(languageCode),
                Text:  aws.String(message),
        }
        res, err := svc.DetectEntities(input)
        if err != nil {
                return "", err
        }
        results, err2 := json.Marshal(res.Entities)
        if err2 != nil {
                return "", err2
        }
        return string(results), nil
}
```

※ 6/14 追記

##### キーフレーズ抽出するには DetectKeyPhrases を使う。

```golang:main.go
func detectKeyPhrases(message string)(string, error) {
        svc := comprehend.New(session.New(), &aws.Config{
                Region: aws.String("ap-northeast-1"),
        })

        input := &comprehend.DetectKeyPhrasesInput{
                LanguageCode: aws.String(languageCode),
                Text:  aws.String(message),
        }
        res, err := svc.DetectKeyPhrases(input)
        if err != nil {
                return "", err
        }
        results, err2 := json.Marshal(res.KeyPhrases)
        if err2 != nil {
                return "", err2
        }
        return string(results), nil
}
```

※ 6/14 追記

##### 構文解析するには DetectSyntax を使う。

```golang:main.go
func detectSyntax(message string)(string, error) {
        svc := comprehend.New(session.New(), &aws.Config{
                Region: aws.String("ap-northeast-1"),
        })

        input := &comprehend.DetectSyntaxInput{
                LanguageCode: aws.String(languageCodeEn),
                Text:  aws.String(message),
        }
        res, err := svc.DetectSyntax(input)
        if err != nil {
                return "", err
        }
        results, err2 := json.Marshal(res.SyntaxTokens)
        if err2 != nil {
                return "", err2
        }
        return string(results), nil
}
```


# 終わりに
今回はAmazon Comprehendの 感情分析の機能を試しました。
他にもComprehendの機能が利用できるため、今後試していきたいと思います。

 - [言語検出](https://aws.amazon.com/jp/comprehend/features/#Language_Detection)
 - [キーフレーズ抽出](https://aws.amazon.com/jp/comprehend/features/#Keyphrase_Extraction)


※ 6/14 追記
テキストの言語検出・エンティティ認識・キーフレーズ抽出・構文解析する機能を試しました。
[テキストの言語検出](https://labo.systems/comprehend/detect/dominantlanguage)
[テキストのエンティティ認識](https://labo.systems/comprehend/detect/entities)
[テキストのキーフレーズ抽出](https://labo.systems/comprehend/detect/keyphrases)
[テキストの構文解析](https://labo.systems/comprehend/detect/syntax)

<font color="crimson">※ 6/14時点で、テキストの構文解析は言語コードを日本語に設定するとエラーが発生したため、英語で試しました。</font>