2020/04/10 PyPIパッケージ公開しました!
詳しくはこちら(スター頂けるととっても嬉しいです!)
手早く使いたい方は下コードを参照してください
$ pip install cotoha_at_python
from cotohacall.main  import cotoha_call
import os
os.environ['CLIENT_ID'] = 'Your ID'
os.environ['CLIENT_SECRET'] = 'Ypur Secret'
sentence = '日本語の高精度な自然言語解析を実現するAPIサービス。NTTグループの40年以上の研究成果を活かした自然言語解析技術をCOTOHA APIでお手軽にご利用いただけます。'
cotoha_call('keyword', sentence)
# Return
"""
[{'form': '高精度', 'score': 20.0},
 {'form': '実現', 'score': 16.8278},
 {'form': 'お手軽', 'score': 10.8133},
 {'form': '研究成果', 'score': 10.0},
 {'form': 'cotoha api', 'score': 10.0}]
"""
前書き
COTOHAの使い方については既に超わかりやすい解説(自然言語処理を簡単に扱えると噂のCOTOHA APIをPythonで使ってみた や 「メントスと囲碁の思い出」をCOTOHAさんに要約してもらった結果。COTOHA最速チュートリアル付き)があるのですが、
【Qiita x COTOHA APIプレゼント企画】を知って自分で書いていたのと、
・環境構築面倒だからGoogle Colabで!
・何も考えずにコピペ1つで使える!
って感じのものが欲しかったので記事として出しました。
この記事を読めばコピペ1つで即座に解析できるようになる...!(はず)。
このコピペでできるようになること+実装例
cotoha_call("ne", "ブラックサンダーが食べたい")
と入力すると、
「ブラックサンダーが食べたい」の解析結果(これは固有表現抽出)が返ってきます。
===>
固有表現抽出
===>
{'message': '',
'result': [{'begin_pos': 0,
'class': 'ART',
'end_pos': 8,
'extended_class': 'Product_Other',
'form': 'ブラックサンダー',
'source': 'basic',
'std_form': 'ブラックサンダー'}],
'status': 0}
"ne"のところは以下に変更可能です(developersで使用できるapiはすべてカバーしているはず)
| API名 | 入力 | 
|---|---|
| 構文解析 | parse | 
| 固有表現抽出 | ne | 
| キーワード抽出 | keyword | 
| 照応解析 | coref | 
| 類似度算出 | simi | 
| 文タイプ判定 | sen_type | 
| ユーザ属性推定(β) | user_at | 
| 言い淀み除去(β) | filter | 
| 音声認識誤り検知(β) | detect | 
| 感情分析 | senti | 
| 要約(β) | summary | 
for文を使って全部やってみるとこんな感じ→
for api_type in ["ne", "parse", "coref", "keyword", "simi", "sen_type", "user_at", "filter", "detect", "senti", "summary"]:
    cotoha_call(api_type, "ブラックサンダーを食べたい。")
    print("\n") #結果を見やすくするための改行
print("解析終了!")
出力
コピペの前に
・COTOHA APIからユーザー登録し、client_idとclient_secretを入手する(ユーザー登録はかなりわかりやすかったです)。
・「Python is 何?」状態だけどやってみたいって方はこちらの超わかりやすい解説(自然言語処理を簡単に扱えると噂のCOTOHA APIをPythonで使ってみた )を読んでみてください。
コピペするコード
コピペするコード
# -*- coding:utf-8 -*-
# 参考:https://qiita.com/gossy5454/items/83072418fb0c5f3e269f#python%E3%81%A7%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F
import os
import urllib.request
import json
import configparser
import codecs
import sys
client_id = "クライアントID"
client_secret = "クライアントシークレット"
developer_api_base_url = "https://api.ce-cotoha.com/api/dev/nlp/"
access_token_publish_url = "https://api.ce-cotoha.com/v1/oauth/accesstokens"
api_name_show_switch = 1 #出力結果にapi名を表示させたくない場合は0にする
def cotoha_call(api_type, sentence_1, sentence_2 = "ホワイトサンダーを食べたい", sent_len = 1, ):
    # アクセストークン取得
    def getAccessToken():
        # アクセストークン取得URL指定
        url = access_token_publish_url
        # ヘッダ指定
        headers={
            "Content-Type": "application/json;charset=UTF-8"
        }
        # リクエストボディ指定
        data = {
            "grantType": "client_credentials",
            "clientId": client_id,
            "clientSecret": client_secret
        }
        # リクエストボディ指定をJSONにエンコード
        data = json.dumps(data).encode()
        # リクエスト生成
        req = urllib.request.Request(url, data, headers)
        # リクエストを送信し、レスポンスを受信
        res = urllib.request.urlopen(req)
        # レスポンスボディ取得
        res_body = res.read()
        # レスポンスボディをJSONからデコード
        res_body = json.loads(res_body)
        # レスポンスボディからアクセストークンを取得
        access_token = res_body["access_token"]
        return access_token
    # API URL指定
    if api_type == "parse":
        api_name = "構文解析"
        base_url_footer = "v1/" + api_type
        request_body_type = 1
    elif api_type == "ne":
        api_name = "固有表現抽出"
        base_url_footer = "v1/" + api_type
        request_body_type = 1
    elif api_type == "keyword":
        api_name = "キーワード抽出"
        base_url_footer = "v1/" + api_type
        request_body_type = 2
    elif api_type == "coref":
        api_name = "照応解析"
        base_url_footer = "v1/coreference"
        request_body_type = 2
    elif api_type == "simi":
        api_name = "類似度算出"
        base_url_footer = "v1/similarity"
        request_body_type = 3
    elif api_type == "sen_type":
        api_name = "文タイプ判定"
        base_url_footer = "v1/sentence_type"
        request_body_type = 1
    elif api_type == "user_at":
        api_name = "ユーザ属性推定(β)"
        base_url_footer = "beta/user_attribute"
        request_body_type = 2
    elif api_type == "filter":
        api_name = "言い淀み除去(β)"
        base_url_footer = "beta/remove_filler"
        request_body_type = 4
    elif api_type == "detect":
        api_name = "音声認識誤り検知(β)"
        base_url_footer = "beta/detect_misrecognition"
        request_body_type = 1
    elif api_type == "senti":
        api_name = "感情分析"
        base_url_footer = "v1/sentiment"
        request_body_type = 1
    elif api_type == "summary":
        api_name = "要約(β)"
        base_url_footer = "beta/summary"
        request_body_type = 5
    else :
        print("Api Type Error.")
        sys.exit()
    if api_name_show_switch == 1:
        print("===>\n" + api_name + "\n===>")
    
    url = developer_api_base_url + base_url_footer
    # ヘッダ指定
    headers={
        "Authorization": "Bearer " + getAccessToken(), #access_token,
        "Content-Type": "application/json;charset=UTF-8",
    }
    # リクエストボディ指定
    if request_body_type == 1:
        data = {
            "sentence": sentence_1
        }
    elif request_body_type == 2:
        data = {
            "document": sentence_1
        }
    elif request_body_type == 3:
        data = {
            "s1": sentence_1,
            "s2": sentence_2
        }
    elif request_body_type == 4:
        data = {
            "text": sentence_1
        }
    elif request_body_type == 5:
        data = {
            "document": sentence_1,
            "sent_len": sent_len
        }
    # リクエストボディ指定をJSONにエンコード
    data = json.dumps(data).encode()
        # リクエスト生成
    req = urllib.request.Request(url, data, headers)
        # リクエストを送信し、レスポンスを受信
    try:
        res = urllib.request.urlopen(req)
    # リクエストでエラーが発生した場合の処理
    except urllib.request.HTTPError as e:
        # ステータスコードが401 Unauthorizedならアクセストークンを取得し直して再リクエスト
        if e.code == 401:
            access_token = getAccessToken()
            headers["Authorization"] = "Bearer " + access_token
            req = urllib.request.Request(url, data, headers)
            res = urllib.request.urlopen(req)
        # 401以外のエラーなら原因を表示
        else:
            print ("<Error> " + e.reason)
            #sys.exit()
    # レスポンスボディ取得
    res_body = res.read()
    # レスポンスボディをJSONからデコード
    res_body = json.loads(res_body)
    # レスポンスボディから解析結果を取得
    return res_body
あとは
cotoha_call("入力", "解析したい文章")
で解析が始まります!
後書き
企画参加する方がんばりましょう!
