COTOHA APIを使って数行で言語処理(形態素解析、感情分析)をする

# はじめに
[COTOHA Community Slack](https://api.ce-cotoha.com/contents/community.html)でCOTOHA APIのレスポンスを読みやすくするライブラリが紹介されていました (恐らく非公式)
今回は、そのライブラリを使って五行で形態素解析したいと思います。

# 事前準備
## 環境
Python 3.9.0
cotohappy 0.4.2

## インストール
ライブラリの名前は[cotohappy](https://pypi.org/project/cotohappy/)です。

インストールは簡単にpipでできます。
`pip install cotohappy`

 >Python 3.7 and 3.8 are supported

とのことなので注意が必要です。

## 認証情報をおく
`Payload.json` に認証情報を記述して置いておくと、accesstokenも取得してくれます。
名前を指定すればPayloadじゃなくても大丈夫そうです。
参考: https://github.com/278Mt/cotohappy/blob/master/examples/sjgyoen.py

```json:Payload.json
{
  "AccessTokenPublishURL": "https://api.ce-cotoha.com/v1/oauth/accesstokens",
  "APIBaseURL"           : "https://api.ce-cotoha.com/api/dev/",
  "ClientId"             : "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456",
  "ClientSecret"         : "7890abcdefghijkl"
}
```

# 使い方
## 形態素解析
cotohappyをimportして、parseに文章を投げるだけです。
form以外を表示する場合は少しだけ長くなります。

<details><summary>形態素解析のソースコード</summary><div>

```python:parser.py
import cotohappy

coy = cotohappy.API()
parse_li = coy.parse("すもももももももものうち")
for parse in parse_li:
    for token in parse.tokens:
        print(token)
```
</div></details>

```terminal:出力
すもも	 0,スモモ,李,名詞,*,*,*,*,*
も	 1,モ,も,連用助詞,*,*,*,*,*
もも	 2,モモ,桃,名詞,*,*,*,*,*
も	 3,モ,も,連用助詞,*,*,*,*,*
もも	 4,モモ,桃,名詞,*,*,*,*,*
の	 5,ノ,の,格助詞,連体,*,*,*,*
うち	 6,ウチ,内,名詞,連用,*,*,*,*
```

### formだけとりたい場合
formだけを表示させる場合はより簡単にできます。
これなら五行ですね。

<details><summary>form取得のソースコード</summary><div>

```python:form.py
import cotohappy
coy = cotohappy.API()
parse_li = coy.parse("すもももももももものうち")
for parse in parse_li:
    print(parse.form)
```
</div></details>

```terminal:出力
すももも
ももも
ももの
うち
```

## 固有表現抽出
`coy.ne` に書き換えるだけです。
固有表現があれば、抽出して情報を列挙してくれます。

<details><summary>固有表現抽出のソースコード</summary><div>

```python:ne.py
import cotohappy

coy = cotohappy.API()
ne_li = coy.ne("ドナルドトランプはアメリカの大統領で、11月19日現在、73歳で、資産は30億ドルとも言われている.") 
for ne in ne_li:
    print(ne)
```
</div></details>

```terminal:出力
ドナルドトランプ	 0,8,ドナルドトランプ,ART,,*,basic
アメリカ	 9,13,アメリカ,LOC,,*,basic
11月19日	 19,25,11月19日,DAT,,*,basic
30億ドル	 36,41,30億ドル,MNY,,*,basic
大統領	 14,17,大統領,ART,,*,basic
73歳	 28,31,73歳,NUM,,*,basic
```

## 照応解析
照応関係があれば、抽出して情報を列挙してくれます。

<details><summary>照応解析のソースコード</summary><div>

```python:coref.py
import cotohappy

coy = cotohappy.API()
coreference = coy.coreference("花子は友人です。彼女は焼き肉を食べた。") 
for content in coreference.coreference:
    for referent in content.referents:
        print(referent)
```
</div></details>

```terminal:出力
花子     0,0,0,0
彼女     1,0,5,5
```

## キーワード抽出
重要なキーワードを抽出して情報を列挙してくれます。

<details><summary>キーワード抽出のソースコード</summary><div>

```python:keyword.py
import cotohappy

coy = cotohappy.API()
keyword_li = coy.keyword("オリンピックの開催まであと242日") 
for keyword in keyword_li:
    print(keyword)
```
</div></details>

```terminal:出力
242日    12.97184
オリンピック     7.0874
開催     5.84348
```

## 類似度判定
二つの文の類似度判定して情報を列挙してくれます。

<details><summary>類似度判定のソースコード</summary><div>

```python:similarity.py
import cotohappy

coy = cotohappy.API()
similarity = coy.similarity("最近咳が止まらない", "熱がある") 
print(similarity)
```
</div></details>

```terminal:出力
0.5262752
```

## 文タイプ判定
発話行為のタイプを判定して情報を列挙してくれます。

<details><summary>文タイプ判定のソースコード</summary><div>

```python:sentence_type.py
import cotohappy

coy = cotohappy.API()
sentence_type = coy.sentence_type("体調はいかがですか？") 
print(sentence_type)
```
</div></details>

```terminal:出力
interrogative    information-seeking,*,*,*,*
```

## ユーザ属性推定
文章からユーザーの年代などの情報を推定して列挙してくれます。

<details><summary>ユーザ属性推定のソースコード</summary><div>

```python:user_attribute.py
import cotohappy

coy = cotohappy.API()
user_attribute = coy.user_attribute("俺は田町駅で飲みに行ったら奥さんに怒られた。") 
print(user_attribute)
```
</div></details>

```terminal:出力
60歳以上,*,*,男性,*,*,*,*,*,*,*,ANIMAL,CAMERA,COOKING,FISHING,FORTUNE,*,*
```

## 言い淀み除去
文章の言いよどみを除去して列挙してくれます。

<details><summary>言い淀み除去のソースコード</summary><div>

```python:remove_filler.py
import cotohappy

coy = cotohappy.API()
remove_filler_li = coy.remove_filler("えーっと、それでは今からプレゼンを、始めさせていただこうかと思います") 
for remove_filler in remove_filler_li:
    print(remove_filler)
```
</div></details>

```terminal:出力
えーっと、それでは今からプレゼンを、始めさせていただこうかと思います     
それでは今からプレゼンを、始めさせていただこう かと思います
```

## 音声認識誤り検知
音声認識の誤りを検知して列挙してくれます。

<details><summary>音声認識誤り検知のソースコード</summary><div>

```python:detect_misrecognition.py
import cotohappy

coy = cotohappy.API()
detect_misrecognition = coy.detect_misrecognition("温泉入力は誤認識を起こす")
for candidate in detect_misrecognition.candidates:
    print(candidate)
```
</div></details>

```terminal:出力
温泉     0,2,0.9999975896797001,音声,おんせい,混線,モンセン,厭戦
```

## 感情分析
感情語を抽出して列挙してくれます。

<details><summary>感情分析のソースコード</summary><div>

```python:sentiment.py
import cotohappy

coy = cotohappy.API()
sentiment = coy.sentiment("花子さんは泣き虫だ")
emotional_phrase_li = sentiment.emotional_phrase
for emotional_phrase in emotional_phrase_li:
    print(emotional_phrase)
```
</div></details>

```terminal:出力
泣き虫だ         N,*,*,*,*
```

# まとめ
* よくわからなくてもAPIを使える(APIを叩くとか意識しなくていい)
* 要約APIがあるらしいけど、cotohappyは対応してない
* versionが3.7~なのでcolaboratoryで動かない
* 出力まで0.3秒くらい
* APIが10個もあって大変だった