#author("2018-07-26T05:53:10+00:00","default:masatomix","masatomix")
#author("2018-07-26T05:55:38+00:00","default:masatomix","masatomix")
#topicpath
----


#contents

[[Webソフトやアプリ開発に役立つAPIを無料で提供する【gooラボ】>https://labs.goo.ne.jp/]]

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

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

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

**形態素解析API [#s90daf8e]
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 [#r026da97]
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から呼び出す [#z9b59829]
つづいて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)
 
お疲れ様でした。





----
この記事は
#vote(おもしろかった,そうでもない)

#comment

#topicpath

SIZE(10){現在のアクセス:&counter;}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS