自然言語処理のためにMeCabを入れるのに疲れたのでCOTOHA APIを使った


動機

MeCabを導入するのは結構手間だと感じていて、
環境が変わるたびに入れるのに疲れたのでCOTOHA APIを使ってみました。

COTOHA API

提供API一覧

ここからみれます。

  1. 構文解析 日本語テキストの構造と意味を解析します。
  2. 固有表現抽出 人名や地名などの固有表現を抽出します。
  3. 照応解析 「あれ」「彼/彼女」「同〇〇」「その〇〇」等の指示語を検知し、指し示す対象を特定します。
  4. キーワード抽出 文章からキーワードを抽出します。
  5. 類似度算出 2つの文章の類似性を数値化し出力します。
  6. 文タイプ判定 挨拶や同意、約束などの発話行為のタイプを判定します。 同時に、叙述文、命令文、質問文などの文タイプを出力します。
  7. ユーザ属性推定 文章からユーザの年代、職業などの属性を推定します。
  8. 言い淀み除去 ユーザからの音声入力時に含まれる言い淀みを除去します
  9. 音声認識誤り検知 音声認識処理後のテキストに対して、認識ミスの恐れがある単語を検知・抽出します。
  10. 感情分析 文章作成時の書き手の感情をポジティブまたはネガティブで判定します。さらに文章に含まれる「喜ぶ」や「驚く」といった特定の感情も認識します。
  11. 音声認識 ユーザからの音声入力をテキスト化します。

今回は、構文解析を使っていきます。

ソースコード

ほとんどゲンシジンからもってきました。

import requests
import json

import numpy as np

text = ""
with open("kokoro.txt", "r") as f:
    text = f.readlines()

BASE_URL = "https://api.ce-cotoha.com/api/dev/nlp/"
CLIENT_ID = "ID"
CLIENT_SECRET = "SECRET"

def auth(client_id, client_secret):
    token_url = "https://api.ce-cotoha.com/v1/oauth/accesstokens"
    headers = {
        "Content-Type": "application/json",
        "charset": "UTF-8"
    }

    data = {
        "grantType": "client_credentials",
        "clientId": client_id,
        "clientSecret": client_secret
    }
    r = requests.post(token_url,
                      headers=headers,
                      data=json.dumps(data))
    return r.json()["access_token"]

def parse(sentence, access_token):
    base_url = BASE_URL
    headers = {
        "Content-Type": "application/json",
        "charset": "UTF-8",
        "Authorization": "Bearer {}".format(access_token)
    }
    data = {
        "sentence": sentence,
        "type": "default"
    }
    r = requests.post(base_url + "v1/parse",
                      headers=headers,
                      data=json.dumps(data))
    return r.json()

access_token = auth(CLIENT_ID, CLIENT_SECRET)

result = []
for line in text:
    result.append(parse(line, access_token))

for chunks in result[0]["result"]:
    for token in chunks["tokens"]:
        print(token["form"], end=" ")

結果

単純な形態素解析

入力文 私はその人の記憶を呼び起すごとに、すぐ「先生」といいたくなる
出力文 私 は その 人 の 記憶 を 呼び起 す ごと に 、 すぐ 「 先生 」 と い い た く な る 

kanaを使う

入力文 私はその人の記憶を呼び起すごとに、すぐ「先生」といいたくなる
出力文 ワタシ ハ ソノ ヒト ノ キオク ヲ ヨビオコ ス ゴト ニ  スグ  センセイ  ト イ イ タ ク ナ ル

lemmaを使う

入力文 私はその人の記憶を呼び起すごとに、すぐ「先生」といいたくなる
出力文 私 は その 人 の 記憶 を 呼び起こす す 毎 に 、 直ぐ 「 先生 」 と いう い たい く なる る 

まとめ

環境構築なしで形態素解析とか、lemmaをとれるのは楽でいいですね。
無料ユーザーは1日1000回までしか叩けないですが、何日かわけてやればいいですね。
今後の展望としては、SNSとかの崩れた文に強いオプションとか、業界ごとの辞書もあるらしいので使ってみたいです。