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) お疲れ様でした。 この記事は 現在のアクセス:1986 |