COTOHA APIを用いて、人のレポートをうまくパクるアプリを作る


都内の大学に通う者です。大学に入学してから一年、プログラミングを始めてから7ヶ月が経とうとしています。普段は友人とアプリを作ったり機械学習のコンペに参加したりしています。
昨日【Qiita x COTOHA APIプレゼント企画】というイベントを知りました。
Macが欲しいので、入賞目指して、初めての記事を書きます。:fist:（今日が締め切りですが...:angel_tone2:）


# 大学のレポートがめんどくさい
大学では多くのレポートを課されます。これはとても苦痛なイベントです。:frowning2:

# うまくすり抜けられないか
楽にすます方法としては、人のレポートをパクるということが挙げられます。しかし、一言一句パクれば流石にバレます。そこで、レポートの内容をそのままに表現だけを変えられないか、と考えました。

# 題材
今回は以下のような文章（先月書いたレポートの一部）をパクろうと思います。
```'また、厚生労働省の「精神疾患による患者数」によると精神疾患の患者数は年々増加しており平成29年には400万人を超えた。この増加は今後も続くと思われており、このことからも50年後の都市において休息の場としての公園が必要であることがわかる。また、人口減少に加え、高齢化が顕著に進んでいることがわかる。また、国立社会保障・人口問題研究所の『日本の地域別将来推計人口（平成３０（2018）年推計）』によると、今後、65歳未満の人口はすべての都道府県で減少する。'
```
パクりたいと思うほど上手な文章ではないですね... 「また」が多いし...　:sweat:

# ルール
1. 『』の中の言葉は変えない。（書籍やホームページの名前なので）
1. 地名や人物名、組織名は変えない。
1. 数字は変えない。

#  それっぽいロジックを作る
類語辞典やGCPなどを使って、元の表現を少しずついじります。
その結果がこれです。
```'厚生労働省の「精神疾患患者」によると、精神疾患患者の数は年々増加しており、2017年には400万人を超えています。この増加は今後も続くと予想され、50年後の都市には休息の場所が必要です。さらに、人口が減少しており、人口が著しく高齢化していることがわかります。全国人口社会保障研究所「日本の地域別推定人口（2018年推定）」によると、65歳未満の人口は将来的にすべての都道府県で減少します。'
```
所々表現が変わっています。
三つ目のルールは守られていますが、「国立社会保障・人口問題研究所」が「全国人口社会保障研究所」に変わってしまいました。人物名や組織名に対応できていません。

# COTOHA APIを使う。
満を持してCOTOHA APIの登場です。
[COTOHA APIのリンク](https://api.ce-cotoha.com/)
COTOHA APIは「構文解析、照応解析、キーワード抽出、音声認識、要約など、様々な自然言語処理・音声処理APIを提供しているサービスです。NTTグループの40年にわたる研究成果である、日本語辞書や単語を3000種以上の意味性分類する技術などを活用し、高度な解析をAPIで手軽に利用できます。」
この優れたAPIの中で、今回は固有表現抽出APIを使用して、人物名や組織名を判定します。
### COTOHA APIの無料枠に登録
[ここから](https://api.ce-cotoha.com/contents/developers/index.html)簡単に登録できます。
登録したら[ここで](https://api.ce-cotoha.com/home)API BASE URL、 CLIENT ID、 CLIENT secretを確認します。

```python:get_token.py
data = {
    "grantType": "client_credentials",
    "clientId": "Your CLIENT ID",
    "clientSecret": "Your CLIENT secret"
    }
str_json = json.dumps(data)

url = "https://api.ce-cotoha.com/v1/oauth/accesstokens"
headers={
    "Content-Type": "application/json"
    }


result=requests.post(url,headers=headers,data=str_json)
print(result.text)
```
これでアクセストークンを確認できます。

```python:get_koyu.py
def get_koyu_(text, token):
    data = {
    "sentence":text,
    "type": "default"
    }
    headers = {
        "Content-Type":"application/json",
        "Authorization":"Bearer " + token
    }

    str_json = json.dumps(data)

    url = "https://api.ce-cotoha.com/api/dev/nlp/v1/ne"
    rr=requests.post(url,headers=headers,data=str_json)
    result = json.loads(rr.text)["result"]
```
上のコードで文中の固有表現を抽出できます。
`[{'begin_pos': 3, 'end_pos': 8, 'form': '厚生労働省', 'std_form': '厚生労働省', 'class': 'ORG', 'extended_class': '', 'source': 'basic'}, {'begin_pos': 42, 'end_pos': 47, 'form': '平成29年', 'std_form': '平成29年', 'class': 'DAT', 'extended_class': '', 'source': 'basic'}, {'begin_pos': 84, 'end_pos': 88, 'form': '50年後', 'std_form': '50年後', 'class': 'DAT', 'extended_class': '', 'source': 'basic'}, {'begin_pos': 156, 'end_pos': 170, 'form': '国立社会保障・人口問題研究所', 'std_form': '国立社会保障・人口問題研究所', 'class': 'ORG', 'extended_class': '', 'source': 'basic'},...`
地名、人名、組織名などのカテゴリがふられているので、これらを頼りに地名、人名、組織名を判定します。

あとはこれらの固有表現を変えないようにコードを書き換えます。

# 完成

パクる前
```'また、厚生労働省の「精神疾患による患者数」によると精神疾患の患者数は年々増加しており平成29年には400万人を超えた。この増加は今後も続くと思われており、このことからも50年後の都市において休息の場としての公園が必要であることがわかる。また、人口減少に加え、高齢化が顕著に進んでいることがわかる。また、国立社会保障・人口問題研究所の『日本の地域別将来推計人口（平成３０（2018）年推計）』によると、今後、65歳未満の人口はすべての都道府県で減少する。'
```

パクった後
```'厚生労働省の「精神疾患による患者数」によると、精神疾患患者数は年々増加しており、2017年には400万人を超えている。この増加は今後も続くと予想され、50年後の都市では休息場所としての公園が必要であることを示唆している。また、人口が減少し、高齢化が著しく進んでいるのも分かる。国立社会保障・人口問題研究所の『日本の地域別将来推計人口（平成３０（2018）」によると、全県で65歳未満の人口が減少する。'
```
『』の中の言葉や、組織名はそのままに、表現だけが変わっています。微妙な部分もありますが、とりあえずよしとします。

実際に完成したアプリが[こちら](https://copy-7b6d4.web.app/)です。