Top / 自然言語処理 / gooラボのAPIを呼び出す

Webソフトやアプリ開発に役立つAPIを無料で提供する【gooラボ】

gooラボが自然言語処理 関連で、形態素解析APIや固有表現抽出API を公開しています。ずいぶん前にさわったのを忘れてましたので、改めてメモっときます

使い方は、 API利用方法 |ソフト・アプリ開発のAPIなら【gooラボ】 ここに説明があります。GitHubのアカウントを用いて、アプリケーションIDを取得すればOKですね。そのIDは APIを呼び出すときにパラメタに載せるような識別子になってます。

あ、利用規約を見ると非商用利用のみとなってますのでご注意。一日に大量アクセスすると制限かかるかもね、と書いてありますが、明確にこれくらいまでってのはなさそうです。。

形態素解析API

curlで呼び出すとこんな感じ。

$ cat parameter.json
{
    "app_id":"31e6exxxxxxxxxxxx",
    "sentence":"鈴木さんがきょうの9時30分に横浜に行きます。"
}
$ curl -X POST \
  -H 'Content-Type:application/json' \
  -H 'Accept:application/json' \
  --data-binary @parameter.json \
  https://labs.goo.ne.jp/api/morph

実行結果:

{
  "request_id": "labs.goo.ne.jp\t1532479475\t0",
  "word_list": [
    [
      [  "鈴木",    "名詞",         "スズキ" ],
      [  "さん",    "名詞接尾辞","サン"  ],
      [  "が",       "格助詞",      "ガ" ],
      [  "きょう", "名詞",         "キョウ" ],
      [  "の",       "格助詞",      "ノ"  ],
      [  "9時",     "名詞",         "クジ" ],
      [  "30分",   "名詞",         "サンジュップン"],
      [  "に",       "格助詞",      "ニ" ],
      [  "横浜",    "名詞",         "ヨコハマ" ],
      [  "に",       "格助詞",      "ニ"  ],
      [  "行",       "動詞語幹",   "イ"  ],
      [  "き",       "動詞活用語尾", "キ"  ],
      [  "ます",    "動詞接尾辞",    "マス"  ],
      [  "。",       "句点",        "$"  ]
    ]
  ]
}

結果は多少整形してます。 ちゃんと形態素にバラしてくれましたね。

固有表現抽出API

curlで呼び出すとこんな感じ。

$ cat parameter.json
{
    "app_id":"31e6exxxxxxxxxxxx",
    "sentence":"鈴木さんがきょうの9時30分に横浜に行きます。"
}
$  curl -X POST \
   -H 'Content-Type:application/json' \
   -H 'Accept:application/json' \
   --data-binary @parameter.json \
   https://labs.goo.ne.jp/api/entity

実行結果:

{
  "request_id": "labs.goo.ne.jp\t1532479348\t0",
  "ne_list": [
    [  "鈴木",      "PSN"  ],
    [  "きょう",   "DAT"  ],
    [  "9時30分","TIM"   ],
    [  "横浜",      "LOC"  ]
  ]
}

とれましたねー。

Pythonから呼び出す

つづいてPythonから呼んでみます。Vagrantなどで Pythonをつかえる環境を作成します。以下の通りやれば環境は構築できるかと思います。

$ git clone https://github.com/masatomix/ai-samples.git
$ cd ai-samples/
$ git checkout -b tag  refs/tags/0.0.1
$ vagrant up
$ vagrant ssh
vagrant@ubuntu-xenial:~$ cd /vagrant/samples/
vagrant@ubuntu-xenial:/vagrant/samples$ sudo pip3 install -r requirement.txt  -t ./
vagrant@ubuntu-xenial:/vagrant/samples$ cp -pfr config/config.ini.sample config/config.ini
vagrant@ubuntu-xenial:/vagrant/samples$ cat config/config.ini
[payload]
 app_id = 31e6exxxxxxxxxxxx <-正しいのにしてください。

実行します。

$ sudo python3 goolab.py
sentence: [鈴木さんがきょうの9時30分に横浜に行きます。]
固有表現抽出結果:
['鈴木', 'PSN']
['きょう', 'DAT']
['9時30分', 'TIM']
['横浜', 'LOC']
形態素解析結果:
['鈴木', '名詞', 'スズキ']
['さん', '名詞接尾辞', 'サン']
['が', '格助詞', 'ガ']
['きょう', '名詞', 'キョウ']
['の', '格助詞', 'ノ']
['9時', '名詞', 'クジ']
['30分', '名詞', 'サンジュップン']
['に', '格助詞', 'ニ']
['横浜', '名詞', 'ヨコハマ']
['に', '格助詞', 'ニ']
['行', '動詞語幹', 'イ']
['き', '動詞活用語尾', 'キ']
['ます', '動詞接尾辞', 'マス']
['。', '句点', '$']
vagrant@ubuntu-xenial:/vagrant/samples$

うまくいきました!

ソースは以下のような感じです

vagrant@ubuntu-xenial:/vagrant/samples$ cat goolab.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import requests
import json
import configparser

config = configparser.ConfigParser()
config.read("./config/config.ini")


def main(args):
    sentence = "鈴木さんがきょうの9時30分に横浜に行きます。"

    print("sentence: [{0}]".format(sentence))


    payload_obj = {
        "app_id": config["payload"]["app_id"],
        "sentence": sentence
    }

    entities = create_entities(payload_obj)
    print("固有表現抽出結果:")
    for entity in entities:
        print(entity)

    morphs = create_morphs(payload_obj)
    print("形態素解析結果:")
    for sentence in morphs:
        for morph in sentence:
            print(morph)


def create_morphs(payloadObj):
    payload = json.dumps(payloadObj, ensure_ascii=False)

    headers = {
        "Accept": "application/json",
        "Content-type": "application/json"
    }

    proxies, verify = get_proxy()
    r = requests.post(
        'https://labs.goo.ne.jp/api/morph',
        data=payload.encode('utf-8').decode('latin-1'),
        headers=headers,
        proxies=proxies,
        verify=verify)
    return r.json()["word_list"]



def create_entities(payloadObj):
    payload = json.dumps(payloadObj, ensure_ascii=False)

    headers = {
        "Accept": "application/json",
        "Content-type": "application/json"
    }

    proxies, verify = get_proxy()
    r = requests.post(
        'https://labs.goo.ne.jp/api/entity',
        data=payload.encode('utf-8').decode('latin-1'),
        headers=headers,
        proxies=proxies,
        verify=verify)
    return r.json()["ne_list"]


def get_proxy():
    verify = True
    proxies = None

    if config["proxy"].getboolean("proxy"):
        proxies = {
            "http": config["proxy"]["http"],
            "https": config["proxy"]["https"]
        }
        verify = False

    return proxies, verify

if __name__ == "__main__":
    main(sys.argv)

お疲れ様でした。


この記事は

選択肢 投票
おもしろかった 0  
そうでもない 0  

Top / 自然言語処理 / gooラボのAPIを呼び出す

現在のアクセス:86


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-07-26 (木) 14:55:38 (83d)