MATLABからCOTOHA APIをコールしてみた


はじめに

めっきりご無沙汰していました。変わらずテキスト解析に従事した日々を過ごしていましたが、この度【Qiita x COTOHA APIプレゼント企画】COTOHA APIで、テキスト解析をしてみよう!という記事を見つけたので久しぶりに投稿してみます。
COTOHA APIとは何か?については、公式のページからご確認ください。何やら色々とできそうで、見るからに楽しそう!

やったこと

ということで、今日は、このCOTOHA APIの使い方を紹介したいと思います。過去の記事なんかを見ているとPythonからコールしている例が多いですが、私は普段MATLABを使用しているので、MATLABからよんでみます。
一度コツをつかんでしまえば簡単なのですが、最初は何かとコードの書き方に迷ったので、少しでも他のMATLABユーザーさんのお役に立てたら嬉しいです。

手順

COTOHA API for Developersに無料登録

こちらは公式ページのSTEP1と同じです。
アカウントを作成後、COTOHA API Portalのアカウントホームで、こんな感じでURLやIDなどが確認できればOK。

アクセストークンを取得する

こちらの公式リファレンスのやり方に従って、アクセストークンを取得します。MATLABコードは下記。clientidとclientsecretには、ご自身のものを入れてくださいね。

getAccessToken
clientid = 'input_your_Client_ID';
clientsecret = 'input_your_Client_secret';

url = 'https://api.ce-cotoha.com/v1/oauth/accesstokens';
options = weboptions('RequestMethod','post', 'MediaType','application/json');
Body = struct('grantType', 'client_credentials', ... 
          'clientId', clientid, ...
          'clientSecret', clientsecret);
response = webwrite(url, Body, options);

すると、responseの中に、アクセストークンを含んだレスポンスが格納されます。

>> response

response = 

  フィールドをもつ struct:

    access_token: 'your_access_token'
      token_type: 'bearer'
      expires_in: '86399'
           scope: ''
       issued_at: '1581567299154'

「構文解析」のAPIをたたいてみる

こちらの公式リファレンスのやり方に沿って、試しに構文解析をしてみます。MATLABコードは下記。sentenceに、解析したい文字列を入れてくださいね。

parsing
sentence = '私は母と焼き肉を食べた';

baseurl = 'https://api.ce-cotoha.com/api/dev/';
accesstoken = response.access_token;
Header = {'Content-Type', 'application/json;charset=UTF-8'; 'Authorization', ['Bearer ' accesstoken]};
Body = struct('sentence', sentence, ... 
          'type', 'default');

options = weboptions('RequestMethod','post', 'MediaType','application/json','HeaderFields', Header);
response2 = webwrite([baseurl 'nlp/v1/parse'], Body, options);

結果を確認

上のコードを実行すると、response2に結果が返ってきますので、公式リファレンスの説明と照らし合わせながら結果を確認してみましょう。
色々と階層があって、パッと一覧させることが難しいのですが、粗方こんな感じで結果が見れます。すごーい!

おわりに

今日はひとまず「構文解析」までですが、この要領で、他のAPIも使えるはずです。
返ってきた結果の理解や処理にはまたひと手間必要そうですが、MATLABの可視化機能やテキスト解析機能と組み合わせて、何か面白いことができないかな~なんて思います。