【Google Apps Script】GASで自然言語API(Cloud Natural Language API)を利用する方法

自然言語APIをGASで使うことになった

チャットワークを使った社内用問い合わせbotを作ってほしいと言われたので得意のGoogle Apps Script(GAS)で作ったのですが、その過程でGoogleの自然言語API(Cloud Natural Language API)を初めて使用しました。

具体的な使い方としては、チャットワークで送られた質問文から名詞を抽出するためにエンティティ分析(analyzeEntities)のAPIを使用しました。

エンティティ分析とは?

エンティティ分析: 指定されたテキストに既知のエンティティ(著名人、ランドマークなどの固有名詞、レストラン、競技場などの普通名詞)が含まれているかどうかを調べて、そのエンティティに関する情報を返します。エンティティ分析を行うには analyzeEntities メソッドを使用します。

引用元:Cloud Natural Language API ドキュメント

GASからCloud Natural Language APIにPOSTする部分のコードがネットに転がっていなくて少しハマったので、この記事ではGASからAPIにPOSTして、エンティティをログに記録する方法を載せておきます。

事前準備

まずGoogle Cloud Platform に登録してAPIキーを取得する必要があります。
GCP登録からAPIキー取得の方法の記事も書きましたのでご確認ください。
ちなみに今回利用するAPIは5,000回/月まで無料ですが、それを超えると1ドル/1,000回という感じで課金されますので注意。

GASのコード

というわけで、コードです。いつものように貼り付けてお試しくださいませ。
API_KEYには上で取得したAPIキーを入れてください。
content に分析対象のテキストを入れて実行すると、エンティティ分析して抽出された名詞リストがログに吐き出されます。

// Google Cloud Platform API KEY
var API_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

function getEntities(){ 
  var content = "ここに文章を入れます。この文章をAPIに投げて名詞を抽出します。";
  var response = analyzeEntities(content);
  var json = JSON.parse(response.getContentText());
  
  var entities = new Array();
  for(var i=0; i<json.entities.length; i++) {
    entities.push(json.entities[i].name);
  }
  Logger.log(entities);
}

// POST API
function analyzeEntities(content){
  var data = {
    'document' : {
      'type' : 'PLAIN_TEXT',
      'language' : 'ja',
      'content' : content
    },
    'encodingType': 'UTF8'
  }; 
  var params = {
    'contentType' : 'application/json',
    'method' : 'post',
    'payload' : JSON.stringify(data)
  };
  var url = 'https://language.googleapis.com/v1/documents:analyzeEntities?key=' + API_KEY;
  return UrlFetchApp.fetch(url, params);
}

以上です。

まとめ

ちょこっとコードを書けば(月5,000件まで)無料でGoogle先生の作った自然言語の分析が利用できる時代ですね。
Webエンジニアじゃなくても簡単ですし、チャットワークやkintoneなどをAPIでつなげて業務に利用したりもできるかも。

だいぶ雑な感じで書いてしまいましたが、不明点などあればお問い合わせくださいませ。できる限りでアドバイスします。

今回の発端となったチャットワークを使った問い合わせ対応botもいい感じになりそうなので、そのうち公開します。たぶん。

ABOUTこの記事をかいた人

ワークスタイルコンサルティング合同会社代表。2児のパパ。kintone、GoogleAppsScript、Tableau、zapierなどのIT化コンサルタント&人物撮影専門カメラマン。