🐶

Amazon ComprehendをPHPで利用して、要素を抽出する

2021/05/14に公開

概要

AWSの機械学習系のサービスでComprehendというものがあります。
サービスの内容をものすごくまとめると、文章から単語などの要素の抽出や感情の判断ができるものです。一般向けと医療向けとがありますが、今回は一般向けの機能のうちの要素抽出の使い方になります。
詳細はこちら
https://aws.amazon.com/jp/comprehend/

使い方

前提

SDKのインストール

AWSのサービスを利用する場合にはSDKが必要です。composerで追加します。

composer require aws/aws-sdk-php

Clientの起動

AWSのサービスを利用する場合には、サービス名のクライアントが必要です。
どのクライアントもAwsClientを拡張しているので、他のサービスを利用する場合も書き方は同じで、クライアント起動時にcredentialを渡してあげる必要があります。

use Aws\Comprehend\ComprehendClient;
$client = new ComprehendClient([
            'credentials' => [
                'key' =>  'AWS_ACCESS_KEY_ID',
                'secret' => 'AWS_SECRET_ACCESS_KEY'
            ],
            'region' => 'AWS_DEFAULT_REGION',
            'version' => 'latest'
        ]);

アクセスキー、シークレットキー、リージョンは利用したい環境を設定してください。

Comprehendの実行

今回はDetectedEntitiesという要素抽出を利用します。
使い方はシンプルで、利用する言語とテキストを渡すだけです。

$detectedEntities = $client->detectEntities([
            'LanguageCode' => 'ja',
            'Text' => '解析したいテキスト'
        ]);

例えば、
「MCの徳井青空さんが「ウマ娘」を育成!『ファミ通presents ウマ娘研究会!』は4月25日(日)生放送 ゲストは青木瑠璃子さん」
というテキストを渡すと、

{
    "Entities": [
        {
            "Score": 0.9994451999664307,
            "Type": "PERSON",
            "Text": "徳井青空",
            "BeginOffset": 3,
            "EndOffset": 7
        },
        {
            "Score": 0.7525667548179626,
            "Type": "PERSON",
            "Text": "ウマ",
            "BeginOffset": 11,
            "EndOffset": 13
        },
        {
            "Score": 0.5386427640914917,
            "Type": "TITLE",
            "Text": "ファミ",
            "BeginOffset": 20,
            "EndOffset": 23
        },
        {
            "Score": 0.6092893481254578,
            "Type": "EVENT",
            "Text": "通presents",
            "BeginOffset": 23,
            "EndOffset": 32
        },
        {
            "Score": 0.7225337028503418,
            "Type": "TITLE",
            "Text": "ウマ娘研究会",
            "BeginOffset": 33,
            "EndOffset": 39
        },
        {
            "Score": 0.9433432817459106,
            "Type": "DATE",
            "Text": "4月25日(日)",
            "BeginOffset": 42,
            "EndOffset": 50
        },
        {
            "Score": 0.9996402859687805,
            "Type": "PERSON",
            "Text": "青木瑠璃子",
            "BeginOffset": 58,
            "EndOffset": 63
        }
    ]
}

という感じのデータが返ってきます。ウマ娘はAWSの中ではまだ固有名詞としては認識されていないようですね。
Scoreが自信度を表しているので、利用する際にはこのスコアで足切りするといい感じに使えそうです。

関連のリンク

DetectedEntitiesでどのようなタイプがあるかの詳細はこちらhttps://docs.aws.amazon.com/comprehend/latest/dg/how-entities.html

ComprehendのPHPドキュメントはこちら
https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-comprehend-2017-11-27.html

Discussion