Last active
February 27, 2020 12:31
-
-
Save kodamap/df630cab0b7e98e541b31465ea370df2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# COTOHA API" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"code_folding": [] | |
}, | |
"outputs": [], | |
"source": [ | |
"import urllib.request\n", | |
"import json\n", | |
"from pprint import pprint\n", | |
"import traceback\n", | |
"\n", | |
"class CotohaApi:\n", | |
" def __init__(self, client_id, client_secret, developer_api_base_url, access_token_publish_url):\n", | |
" self.client_id = client_id\n", | |
" self.client_secret = client_secret\n", | |
" self.developer_api_base_url = developer_api_base_url\n", | |
" self.access_token_publish_url = access_token_publish_url\n", | |
" self.request_count = 0\n", | |
" self.get_access_token()\n", | |
" \n", | |
" def request(self, url, data):\n", | |
" headers={\n", | |
" \"Authorization\": \"Bearer \" + self.access_token,\n", | |
" \"Content-Type\": \"application/json;charset=UTF-8\",\n", | |
" }\n", | |
" req = urllib.request.Request(url, json.dumps(data).encode(), headers) \n", | |
" try:\n", | |
" with urllib.request.urlopen(req) as res:\n", | |
" res_body = json.loads(res.read())\n", | |
" except urllib.error.HTTPError as e:\n", | |
" if e.code == 401:\n", | |
" print(e, \": retrieving an access token....\\n\")\n", | |
" self.get_access_token()\n", | |
" headers={\n", | |
" \"Authorization\": \"Bearer \" + self.access_token,\n", | |
" \"Content-Type\": \"application/json;charset=UTF-8\",\n", | |
" }\n", | |
" req = urllib.request.Request(url, json.dumps(data).encode(), headers) \n", | |
" with urllib.request.urlopen(req) as res:\n", | |
" res_body = json.loads(res.read())\n", | |
" else:\n", | |
" print(e)\n", | |
" traceback.print_exc()\n", | |
" return\n", | |
" self.request_count+=1\n", | |
" return res_body, res.status, res.reason \n", | |
" \n", | |
" def get_access_token(self):\n", | |
" url = self.access_token_publish_url\n", | |
" headers={\n", | |
" \"Content-Type\": \"application/json;charset=UTF-8\",\n", | |
" }\n", | |
" data = {\n", | |
" \"grantType\": \"client_credentials\",\n", | |
" \"clientId\": self.client_id,\n", | |
" \"clientSecret\": self.client_secret\n", | |
" }\n", | |
" req = urllib.request.Request(url, json.dumps(data).encode(), headers)\n", | |
" with urllib.request.urlopen(req) as res:\n", | |
" res_body = json.loads(res.read())\n", | |
" self.request_count+=1\n", | |
" self.access_token = res_body[\"access_token\"]\n", | |
"\n", | |
" # 構文解析\n", | |
" def parse(self, sentence):\n", | |
" url = self.developer_api_base_url + \"v1/parse\"\n", | |
" data = {\n", | |
" \"sentence\": sentence\n", | |
" }\n", | |
" res_body, status, reason = self.request(url, data)\n", | |
" return res_body\n", | |
"\n", | |
" # 固有表現抽出\n", | |
" def named_entry(self, sentence):\n", | |
" url = self.developer_api_base_url + \"v1/ne\"\n", | |
" data = {\n", | |
" \"sentence\": sentence\n", | |
" }\n", | |
" res_body, status, reason = self.request(url, data)\n", | |
" return res_body\n", | |
"\n", | |
" # 照応解析\n", | |
" def coreference(self, document):\n", | |
" url = self.developer_api_base_url + \"v1/coreference\"\n", | |
" data = {\n", | |
" \"document\": document,\n", | |
" \"type\": \"default\",\n", | |
" \"do_segment\":True,\n", | |
" }\n", | |
" res_body, status, reason = self.request(url, data)\n", | |
" return res_body\n", | |
"\n", | |
" # キーワード抽出\n", | |
" def keyword(self, document):\n", | |
" url = self.developer_api_base_url + \"v1/keyword\"\n", | |
" data = {\n", | |
" \"document\": document,\n", | |
" \"type\": \"default\",\n", | |
" }\n", | |
" res_body, status, reason = self.request(url, data)\n", | |
" return res_body\n", | |
"\n", | |
" # 類似度算出\n", | |
" def similarity(self, s1, s2):\n", | |
" url = self.developer_api_base_url + \"v1/similarity\"\n", | |
" data = {\n", | |
" \"s1\": s1,\n", | |
" \"s2\": s2\n", | |
" }\n", | |
" res_body, status, reason = self.request(url, data)\n", | |
" return res_body\n", | |
"\n", | |
" # 文タイプ判定\n", | |
" def sentence_type(self, sentence):\n", | |
" url = self.developer_api_base_url + \"v1/sentence_type\"\n", | |
" data = {\n", | |
" \"sentence\": sentence\n", | |
" }\n", | |
" res_body, status, reason = self.request(url, data)\n", | |
" return res_body\n", | |
"\n", | |
" # ユーザ属性推定\n", | |
" def user_attribute(self, document):\n", | |
" url = self.developer_api_base_url + \"beta/user_attribute\"\n", | |
" data = {\n", | |
" \"document\": document\n", | |
" }\n", | |
" res_body, status, reason = self.request(url, data)\n", | |
" return res_body\n", | |
"\n", | |
" # 感情分析\n", | |
" def sentiment(self, sentence):\n", | |
" url = self.developer_api_base_url + \"v1/sentiment\"\n", | |
" data = {\n", | |
" \"sentence\": sentence\n", | |
" }\n", | |
" res_body, status, reason = self.request(url, data)\n", | |
" return res_body\n", | |
"\n", | |
" # 言い淀み除去(β)\n", | |
" def remove_filter(self, text):\n", | |
" url = self.developer_api_base_url + \"beta/remove_filler\"\n", | |
" data = {\n", | |
" \"text\": text,\n", | |
" \"do_segment\":True,\n", | |
" }\n", | |
" res_body, status, reason = self.request(url, data)\n", | |
" return res_body\n", | |
"\n", | |
" # 要約(β)\n", | |
" def summary(self, document, sent_len):\n", | |
" url = self.developer_api_base_url + \"beta/summary\"\n", | |
" data = {\n", | |
" \"document\": document,\n", | |
" \"sent_len\":sent_len,\n", | |
" }\n", | |
" res_body, status, reason = self.request(url, data)\n", | |
" return res_body" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": { | |
"code_folding": [] | |
}, | |
"outputs": [], | |
"source": [ | |
"# Set Environment valiable with Windows Powershell \n", | |
"# (venv) PS > $env:CLIENT_SECRET = <your client sercret>\n", | |
"# (venv) PS > $env:CLIENT_ID = <your client id>\n", | |
"import os\n", | |
"CLIENT_ID = os.getenv('CLIENT_ID')\n", | |
"CLIENT_SECRET = os.getenv('CLIENT_SECRET')\n", | |
"ACCESS_TOKEN_PUBLISH_URL=\"https://api.ce-cotoha.com/v1/oauth/accesstokens\"\n", | |
"DEVELOPER_API_BASE_URL = \"https://api.ce-cotoha.com/api/dev/nlp/\"\n", | |
"\n", | |
"cotoha_api = CotohaApi(CLIENT_ID, CLIENT_SECRET, \n", | |
" DEVELOPER_API_BASE_URL, ACCESS_TOKEN_PUBLISH_URL)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"scrolled": false | |
}, | |
"outputs": [], | |
"source": [ | |
"sentence=\"昨日母と銀座で焼き肉を食べた。\"\n", | |
"document=\"太郎は友人です。彼は焼き肉を食べた。\"" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 構文解析" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": { | |
"code_folding": [], | |
"scrolled": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"{'attributes': {},\n", | |
" 'dependency_labels': [],\n", | |
" 'features': ['日時'],\n", | |
" 'form': '昨日',\n", | |
" 'id': 0,\n", | |
" 'kana': 'サクジツ',\n", | |
" 'lemma': '昨日',\n", | |
" 'pos': '名詞'}\n", | |
"{'attributes': {},\n", | |
" 'dependency_labels': [{'label': 'cc', 'token_id': 2}],\n", | |
" 'features': [],\n", | |
" 'form': '母',\n", | |
" 'id': 1,\n", | |
" 'kana': 'ハハ',\n", | |
" 'lemma': '母',\n", | |
" 'pos': '名詞'}\n", | |
"{'attributes': {},\n", | |
" 'dependency_labels': [{'label': 'case', 'token_id': 4}],\n", | |
" 'features': ['固有', '地'],\n", | |
" 'form': '銀座',\n", | |
" 'id': 3,\n", | |
" 'kana': 'ギンザ',\n", | |
" 'lemma': '銀座',\n", | |
" 'pos': '名詞'}\n", | |
"{'attributes': {},\n", | |
" 'dependency_labels': [{'label': 'case', 'token_id': 6}],\n", | |
" 'features': [],\n", | |
" 'form': '焼き肉',\n", | |
" 'id': 5,\n", | |
" 'kana': 'ヤキニク',\n", | |
" 'lemma': '焼き肉',\n", | |
" 'pos': '名詞'}\n", | |
"{'attributes': {},\n", | |
" 'dependency_labels': [{'label': 'nmod', 'token_id': 0},\n", | |
" {'label': 'nmod', 'token_id': 1},\n", | |
" {'label': 'nmod', 'token_id': 3},\n", | |
" {'label': 'dobj', 'token_id': 5},\n", | |
" {'label': 'aux', 'token_id': 8},\n", | |
" {'label': 'punct', 'token_id': 9}],\n", | |
" 'features': ['A'],\n", | |
" 'form': '食べ',\n", | |
" 'id': 7,\n", | |
" 'kana': 'タベ',\n", | |
" 'lemma': '食べる',\n", | |
" 'pos': '動詞語幹'}\n" | |
] | |
} | |
], | |
"source": [ | |
"# 構文解析\n", | |
"result = cotoha_api.parse(sentence)\n", | |
"\n", | |
"for id in range(len(result['result'])):\n", | |
" pprint(result['result'][id]['tokens'][0])" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"0 昨日\n", | |
"1 母\n", | |
"2 銀座\n", | |
"3 焼き肉\n", | |
"4 食べる\n", | |
"4 。\n" | |
] | |
} | |
], | |
"source": [ | |
"word_classes=[\"名詞\", \"動詞語幹\", \"句点\"]\n", | |
"for i in range(len(result['result'])):\n", | |
" for word_class in word_classes:\n", | |
" for j in range(len(result['result'][i]['tokens'])):\n", | |
" if result['result'][i]['tokens'][j]['pos'] == word_class:\n", | |
" print(i, result['result'][i]['tokens'][j]['lemma'])" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 固有表現抽出API" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"{'message': '',\n", | |
" 'result': [{'begin_pos': 0,\n", | |
" 'class': 'DAT',\n", | |
" 'end_pos': 2,\n", | |
" 'extended_class': '',\n", | |
" 'form': '昨日',\n", | |
" 'source': 'basic',\n", | |
" 'std_form': '昨日'},\n", | |
" {'begin_pos': 4,\n", | |
" 'class': 'LOC',\n", | |
" 'end_pos': 6,\n", | |
" 'extended_class': '',\n", | |
" 'form': '銀座',\n", | |
" 'source': 'basic',\n", | |
" 'std_form': '銀座'},\n", | |
" {'begin_pos': 7,\n", | |
" 'class': 'ART',\n", | |
" 'end_pos': 10,\n", | |
" 'extended_class': 'Dish',\n", | |
" 'form': '焼き肉',\n", | |
" 'source': 'basic',\n", | |
" 'std_form': '焼き肉'}],\n", | |
" 'status': 0}\n" | |
] | |
} | |
], | |
"source": [ | |
"# 固有表現抽出API\n", | |
"result = cotoha_api.named_entry(sentence)\n", | |
"pprint(result)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 照応解析API" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": { | |
"scrolled": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"{'message': 'OK',\n", | |
" 'result': {'coreference': [{'referents': [{'form': '太郎',\n", | |
" 'referent_id': 0,\n", | |
" 'sentence_id': 0,\n", | |
" 'token_id_from': 0,\n", | |
" 'token_id_to': 0},\n", | |
" {'form': '彼',\n", | |
" 'referent_id': 1,\n", | |
" 'sentence_id': 1,\n", | |
" 'token_id_from': 0,\n", | |
" 'token_id_to': 0}],\n", | |
" 'representative_id': 0}],\n", | |
" 'tokens': [['太郎', 'は', '友人', 'です', '。'],\n", | |
" ['彼', 'は', '焼き肉', 'を', '食べ', 'た', '。']]},\n", | |
" 'status': 0}\n" | |
] | |
} | |
], | |
"source": [ | |
"# 照応解析API\n", | |
"result = cotoha_api.coreference(document)\n", | |
"pprint(result)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## キーワード抽出API" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"{'message': '',\n", | |
" 'result': [{'form': '太郎', 'score': 15.86012},\n", | |
" {'form': '彼', 'score': 15.71654},\n", | |
" {'form': '焼き肉', 'score': 12.8053},\n", | |
" {'form': '友人', 'score': 9.71421}],\n", | |
" 'status': 0}\n" | |
] | |
} | |
], | |
"source": [ | |
"# キーワード抽出API\n", | |
"result = cotoha_api.keyword(document)\n", | |
"pprint(result)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 類似度算出API" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"{'message': 'OK', 'result': {'score': 0.88565135}, 'status': 0}\n" | |
] | |
} | |
], | |
"source": [ | |
"# 類似度算出API\n", | |
"s1=\"近くのレストランはどこですか?\"\n", | |
"s2=\"このあたりの定食屋はどこにありますか?\"\n", | |
"result = cotoha_api.similarity(s1, s2)\n", | |
"pprint(result)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 文タイプ判定API" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"{'message': '',\n", | |
" 'result': {'dialog_act': ['information-providing'], 'modality': 'declarative'},\n", | |
" 'status': 0}\n" | |
] | |
} | |
], | |
"source": [ | |
"# 文タイプ判定API\n", | |
"result = cotoha_api.sentence_type(sentence)\n", | |
"pprint(result)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## ユーザ属性推定API" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"{'message': 'OK',\n", | |
" 'result': {'age': '60歳以上',\n", | |
" 'civilstatus': '既婚',\n", | |
" 'hobby': ['ANIMAL',\n", | |
" 'COOKING',\n", | |
" 'FISHING',\n", | |
" 'FORTUNE',\n", | |
" 'GYM',\n", | |
" 'INTERNET',\n", | |
" 'SHOPPING',\n", | |
" 'STUDY',\n", | |
" 'TVDRAMA'],\n", | |
" 'location': '関東'},\n", | |
" 'status': 0}\n" | |
] | |
} | |
], | |
"source": [ | |
"# ユーザ属性推定API\n", | |
"result = cotoha_api.user_attribute(sentence)\n", | |
"pprint(result)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 感情分析" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"{'message': 'OK',\n", | |
" 'result': {'emotional_phrase': [{'emotion': 'P', 'form': '晴れた'}],\n", | |
" 'score': 0.5499846594613335,\n", | |
" 'sentiment': 'Positive'},\n", | |
" 'status': 0}\n" | |
] | |
} | |
], | |
"source": [ | |
"# 感情分析\n", | |
"sentence=\"今日は晴れた。\"\n", | |
"result = cotoha_api.sentiment(sentence)\n", | |
"pprint(result)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 言い淀み除去" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"{'message': 'OK',\n", | |
" 'result': [{'fillers': [{'begin_pos': 0, 'end_pos': 5, 'form': 'えーっと、'},\n", | |
" {'begin_pos': 5, 'end_pos': 7, 'form': 'あの'}],\n", | |
" 'fixed_sentence': '、今日の打ち合わせでしたっけ。',\n", | |
" 'normalized_sentence': 'えーっと、あの、今日の打ち合わせでしたっけ。'},\n", | |
" {'fillers': [{'begin_pos': 6, 'end_pos': 10, 'form': 'ちょっと'}],\n", | |
" 'fixed_sentence': 'すみません、急用が入ってしまって。',\n", | |
" 'normalized_sentence': 'すみません、ちょっと、急用が入ってしまって。'}],\n", | |
" 'status': 0}\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"'、今日の打ち合わせでしたっけ。すみません、急用が入ってしまって。'" | |
] | |
}, | |
"execution_count": 13, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# 言い淀み除去\n", | |
"sentence = \"えーーっと、あの、今日の打ち合わせでしたっけ。すみません、ちょっと、急用が入ってしまって。\"\n", | |
"result = cotoha_api.remove_filter(sentence)\n", | |
"pprint(result)\n", | |
"fixed_sentences_list = []\n", | |
"for i, fixed_sentence in enumerate(result['result']):\n", | |
" fixed_sentences_list.append(result['result'][i]['fixed_sentence'])\n", | |
"\n", | |
"fixed_sentences=\"\"\n", | |
"for fixed_sentence in fixed_sentences_list:\n", | |
" fixed_sentences+=fixed_sentence\n", | |
" \n", | |
"fixed_sentences" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"{'emotional_phrase': [{'emotion': '悲しい', 'form': 'すみません'}],\n", | |
" 'score': 0.31306889615794387,\n", | |
" 'sentiment': 'Negative'}\n" | |
] | |
} | |
], | |
"source": [ | |
"result = cotoha_api.sentiment(fixed_sentences)\n", | |
"pprint(result['result'])" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 要約" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"{'result': '東京は、湿った空気や前線の影響により、晴れ後曇りで、夜は雨となるでしょう。', 'status': 0}\n" | |
] | |
} | |
], | |
"source": [ | |
"# 要約\n", | |
"sentence =\"前線が太平洋上に停滞しています。一方、高気圧が千島近海にあって、北日本から東日本をゆるやかに覆っています。関東地方は、晴れ時々曇り、ところにより雨となっています。東京は、湿った空気や前線の影響により、晴れ後曇りで、夜は雨となるでしょう。\"\n", | |
"result = cotoha_api.summary(sentence, 1)\n", | |
"pprint(result)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# WordNet" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# ref:\n", | |
"# WordNet Ja: http://compling.hss.ntu.edu.sg/wnja/\n", | |
"import sys, sqlite3\n", | |
"from pprint import pprint" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"query = \"\"\"\n", | |
"SELECT\n", | |
" word.wordid,\n", | |
" COUNT(word.wordid) AS COUNT,\n", | |
" word.lemma,\n", | |
" word.lang,\n", | |
" sense.synset\n", | |
"FROM\n", | |
" sense\n", | |
" JOIN word ON word.wordid = sense.wordid\n", | |
"WHERE\n", | |
" 1 = 1\n", | |
" AND sense.synset IN(\n", | |
" SELECT \n", | |
" synset\n", | |
" FROM\n", | |
" sense\n", | |
" WHERE\n", | |
" wordid IN (\n", | |
" SELECT\n", | |
" wordid\n", | |
" FROM \n", | |
" word\n", | |
" WHERE \n", | |
" 1 = 1\n", | |
" AND lemma = ?\n", | |
" )\n", | |
" )\n", | |
" AND word.lang = ?\n", | |
"GROUP BY word.wordid\n", | |
"ORDER BY COUNT DESC\n", | |
"\"\"\"" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 18, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import emoji as emj\n", | |
"import re\n", | |
"\n", | |
"def get_synonyms(word, lang='eng'):\n", | |
" \"\"\"\n", | |
" search synonyms of the input word from wordnet japnese database\n", | |
" http://compling.hss.ntu.edu.sg/wnja/\n", | |
" \"\"\"\n", | |
" synonyms = []\n", | |
" conn = sqlite3.connect(\"./wnjpn.db\")\n", | |
" c = conn.cursor()\n", | |
" rows = c.execute(query, (word ,lang)) \n", | |
" for row in rows:\n", | |
" synonyms.append(row[2])\n", | |
" c.close()\n", | |
" \n", | |
" return synonyms\n", | |
"\n", | |
"def get_emoji(words, count):\n", | |
" \"\"\"\n", | |
" words: list of words you want to emojize\n", | |
" count: count of the emoji to display depending on the sentiment api score\n", | |
" \"\"\"\n", | |
" assert(type(words) is list)\n", | |
" emojis = {}\n", | |
" for word in words:\n", | |
" if re.search(r':.*:', word):\n", | |
" emoji = emj.emojize(\"{}\".format(word)*count, use_aliases=True)\n", | |
" else:\n", | |
" emoji = emj.emojize(\":{}:\".format(word)*count, use_aliases=True)\n", | |
" if not re.search(r':.*:', emoji):\n", | |
" emojis[str(word)] = emoji \n", | |
" #else:\n", | |
" #print(\":{}: could not be emojized\".format(word))\n", | |
" return emojis" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 19, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[(21724, 1, 'association_football', 'eng', '00478262-n'),\n", | |
" (60620, 1, 'seersucker', 'eng', '04167661-n'),\n", | |
" (111128, 1, 'soccer', 'eng', '00478262-n')]" | |
] | |
}, | |
"execution_count": 19, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"word=\"サッカー\"\n", | |
"synonyms = []\n", | |
"conn = sqlite3.connect(\"./wnjpn.db\")\n", | |
"c = conn.cursor()\n", | |
"rows = c.execute(query, (word ,'eng')) \n", | |
"for row in rows:\n", | |
" synonyms.append(row)\n", | |
"c.close()\n", | |
"synonyms" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 20, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"['association_football', 'seersucker', 'soccer']\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"{'soccer': '⚽'}" | |
] | |
}, | |
"execution_count": 20, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"synonyms = get_synonyms(word)\n", | |
"print(synonyms)\n", | |
"emojis = get_emoji(synonyms, 1)\n", | |
"emojis" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Get synonyms and emoji" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 21, | |
"metadata": { | |
"scrolled": false | |
}, | |
"outputs": [], | |
"source": [ | |
"# 構文解析\n", | |
"sentence = \"集団感染が発生したクルーズ船「ダイヤモンド・プリンセス」を下船した乗客23人に健康観察期間中のウイルス検査を実施していなかったミスについて、与野党からは批判の声が上がった。\"\n", | |
"result = cotoha_api.parse(sentence)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 22, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"健康 {'sound': '🔉'}\n", | |
"声 {'sound': '🔉'}\n", | |
"\n", | |
"*** emoji summary ***\n", | |
"🔉 健康 sound\n", | |
"🔉 声 sound\n" | |
] | |
} | |
], | |
"source": [ | |
"word_classes=[\"名詞\", \"動詞語幹\"]\n", | |
"synonyms = {}\n", | |
"emojis = {}\n", | |
"emojis_summary = {}\n", | |
"for id in range(len(result['result'])):\n", | |
" for word_class in word_classes: \n", | |
" if result['result'][id]['tokens'][0]['pos'] == word_class:\n", | |
" word = result['result'][id]['tokens'][0]['lemma']\n", | |
" synonyms[str(word)] = get_synonyms(word, lang='eng')\n", | |
"\n", | |
"for key, synonym_list in synonyms.items():\n", | |
" if len(synonym_list) > 0:\n", | |
" emojis = get_emoji(synonym_list, 1)\n", | |
" if len(emojis) > 0:\n", | |
" emojis_summary[str(key)] = emojis\n", | |
" print(key, emojis)\n", | |
"\n", | |
"print(\"\\n*** emoji summary ***\")\n", | |
"if len(emojis_summary) > 0:\n", | |
" for word, emoji_dict in emojis_summary.items():\n", | |
" emojis = \"\"\n", | |
" emoji_words = \"\"\n", | |
" for emoji_word, emoji in emoji_dict.items():\n", | |
" emoji_words += \" \" + emoji_word\n", | |
" emojis += emoji + \" \"\n", | |
" print(\"{:5}{}{}\".format(emojis, word, emoji_words))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Main Test" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 23, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"#sentence = \"えーーっと、あの、今日のパーティ楽しみにしていたのですが。すみません、ちょっと、急用が入ってしまって。でも、また今後誘ってください。楽しみにしています。\"\n", | |
"sentence = \"政府は23日、新型コロナウイルス感染症対策本部の会議を首相官邸で開き、感染経路が明らかでない患者が国内で増えていることを踏まえ、対応を協議した。\"\n", | |
"# http://hukumusume.com/douwa/pc/jap/08/01.htm\n", | |
"sentence1= \"\"\"\n", | |
"むかしむかし、あるところに、おじいさんとおばあさんが住んでいました。\n", | |
"おじいさんは山へしばかりに、おばあさんは川へせんたくに行きました。\n", | |
"おばあさんが川でせんたくをしていると、ドンブラコ、ドンブラコと、大きな桃が流れてきました。\n", | |
"「おや、これは良いおみやげになるわ」\n", | |
"おばあさんは大きな桃をひろいあげて、家に持ち帰りました。\n", | |
"そして、おじいさんとおばあさんが桃を食べようと桃を切ってみると、なんと中から元気の良い男の赤ちゃんが飛び出してきました。\n", | |
"「これはきっと、神さまがくださったにちがいない」\n", | |
"子どものいなかったおじいさんとおばあさんは、大喜びです。\n", | |
"桃から生まれた男の子を、おじいさんとおばあさんは桃太郎と名付けました。\n", | |
"\"\"\"\n", | |
"sentence2 = \"\"\"\n", | |
"そしてある日、桃太郎が言いました。\n", | |
"「ぼく、鬼ヶ島(おにがしま)へ行って、わるい鬼を退治します」\n", | |
"おばあさんにきび団子を作ってもらうと、鬼ヶ島へ出かけました。\n", | |
"旅の途中で、イヌに出会いました。\n", | |
"「桃太郎さん、どこへ行くのですか?」\n", | |
"「鬼ヶ島へ、鬼退治に行くんだ」\n", | |
"「それでは、お腰に付けたきび団子を1つ下さいな。おともしますよ」\n", | |
"イヌはきび団子をもらい、桃太郎のおともになりました。\n", | |
"そして、こんどはサルに出会いました。\n", | |
"「桃太郎さん、どこへ行くのですか?」\n", | |
"「鬼ヶ島へ、鬼退治に行くんだ」\\\n", | |
"「それでは、お腰に付けたきび団子を1つ下さいな。おともしますよ」\n", | |
"そしてこんどは、キジに出会いました。\n", | |
"「桃太郎さん、どこへ行くのですか?」\n", | |
"「鬼ヶ島へ、鬼退治に行くんだ」\n", | |
"「それでは、お腰に付けたきび団子を1つ下さいな。おともしますよ」\n", | |
"こうして、イヌ、サル、キジの仲間を手に入れた桃太郎は、ついに鬼ヶ島へやってきました。\n", | |
"\"\"\"\n", | |
"sentence3 = \"\"\"\n", | |
"鬼ヶ島では、鬼たちが近くの村からぬすんだ宝物やごちそうをならべて、酒盛りの真っ最中です。\n", | |
"「みんな、ぬかるなよ。それ、かかれ!」\n", | |
"イヌは鬼のおしりにかみつき、サルは鬼のせなかをひっかき、キジはくちばしで鬼の目をつつきました。\n", | |
"そして桃太郎も、刀をふり回して大あばれです。\n", | |
"とうとう鬼の親分が、「まいったぁ、まいったぁ。こうさんだ、助けてくれぇ」と、手をついてあやまりました。\n", | |
"桃太郎とイヌとサルとキジは、鬼から取り上げた宝物をくるまにつんで、元気よく家に帰りました。\n", | |
"おじいさんとおばあさんは、桃太郎の無事な姿を見て大喜びです。\n", | |
"そして三人は、宝物のおかげでしあわせにくらしましたとさ。\n", | |
"\"\"\"\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 24, | |
"metadata": { | |
"code_folding": [] | |
}, | |
"outputs": [], | |
"source": [ | |
"from wordcloud import WordCloud\n", | |
"import matplotlib.pyplot as plt\n", | |
"import numpy as np\n", | |
"from pprint import pprint\n", | |
"\n", | |
"emotional_label = {'Positive': ':thumbsup:',\n", | |
" 'Negative': ':thumbsdown:',\n", | |
" 'Neutral': ':hand:'}\n", | |
"emotion_label = {'喜ぶ': ':smile:',\n", | |
" '怒る': ':rage:',\n", | |
" '悲しい': ':cry:',\n", | |
" '不安': ':worried:',\n", | |
" '恥ずかしい': ':flushed:',\n", | |
" '好ましい': ':expressionless:',\n", | |
" '嫌'': ': ':stuck_out_tongue_closed_eyes:',\n", | |
" '興奮': ':laughing:',\n", | |
" '安心': ':relieved:',\n", | |
" '驚く': ':astonished:',\n", | |
" '切ない': ':disappointed:',\n", | |
" '願望': ':wink:',\n", | |
" 'P': ':smile:',\n", | |
" 'N': ':pensive:',\n", | |
" 'PN': ':neutral_face:'}\n", | |
"\n", | |
"\n", | |
"def preprocess(sentence):\n", | |
" result = cotoha_api.remove_filter(sentence)\n", | |
" fixed_sentences_list = []\n", | |
" for i, fixed_sentence in enumerate(result['result']):\n", | |
" fixed_sentences_list.append(result['result'][i]['fixed_sentence'])\n", | |
" return fixed_sentences_list\n", | |
"\n", | |
"\n", | |
"def get_words_by_class(parsed_result, word_classes):\n", | |
" words = []\n", | |
" for id in range(len(parsed_result['result'])):\n", | |
" for word_class in word_classes:\n", | |
" if parsed_result['result'][id]['tokens'][0]['pos'] == word_class:\n", | |
" word = parsed_result['result'][id]['tokens'][0]['lemma']\n", | |
" words.append(word)\n", | |
" return words\n", | |
"\n", | |
"\n", | |
"def emotion_score(sentence, verbose=False):\n", | |
" # initialize emotion lable: 'PN' means Neutral(Positive-Negative)????\n", | |
" emotion = 'PN'\n", | |
" emotions = {}\n", | |
" result = cotoha_api.sentiment(sentence)\n", | |
" if verbose:\n", | |
" pprint(result)\n", | |
"\n", | |
" sentiment = result['result']['sentiment']\n", | |
" score = result['result']['score']\n", | |
" emotional_phrase = result['result']['emotional_phrase']\n", | |
"\n", | |
" # emotinal score: 5 levels (low -> high : 1 to 5)\n", | |
" # score: 0 < 0.2 < 0.4 < 0.6 < 0.8 < 1.0 -> level 1, 2, 3, 4, 5\n", | |
" emotional = get_emoji([emotional_label[sentiment]], int(score//0.2 + 1))\n", | |
" # create emoji counter(0) dictionary \n", | |
" emoji_counter = {key: 0 for key in emotion_label.keys()}\n", | |
" \n", | |
" if emotional_phrase:\n", | |
" for i in range(len(result['result']['emotional_phrase'])):\n", | |
" emotion = result['result']['emotional_phrase'][i]['emotion']\n", | |
" emoji_counter[str(emotion)] += 1\n", | |
" for emotion, count in emoji_counter.items():\n", | |
" if count > 0:\n", | |
" emoji_text = [emotion_label[emotion]]\n", | |
" emotions[str(emotion)] = get_emoji(emoji_text, count)\n", | |
"\n", | |
" return emotional, sentiment, score, emotions\n", | |
"\n", | |
"\n", | |
"def show_emoji_summary(words):\n", | |
" synonyms = {}\n", | |
" emojis_summary = {}\n", | |
"\n", | |
" for word in words:\n", | |
" synonyms[str(word)] = get_synonyms(word, lang='eng')\n", | |
"\n", | |
" for key, synonym_list in synonyms.items():\n", | |
" if len(synonym_list) > 0:\n", | |
" emojis = get_emoji(synonym_list, 1)\n", | |
" if len(emojis) > 0:\n", | |
" emojis_summary[str(key)] = emojis\n", | |
" return emojis_summary\n", | |
"\n", | |
"\n", | |
"def show_named_entry(words):\n", | |
" named_entry = []\n", | |
" for word in words:\n", | |
" result = cotoha_api.named_entry(word)\n", | |
" if len(result['result']) > 0:\n", | |
" named_entry.append(result['result'][0])\n", | |
" return named_entry\n", | |
"\n", | |
"\n", | |
"def get_wordcrowd_mask(text):\n", | |
" \"\"\"ref:\n", | |
" https://amueller.github.io/word_cloud/auto_examples/single_word.html\n", | |
" \"\"\"\n", | |
" font_path = './ipagp.ttf'\n", | |
" x, y = np.ogrid[:300, :300]\n", | |
" mask = (x - 150) ** 2 + (y - 150) ** 2 > 130 ** 2\n", | |
" mask = 255 * mask.astype(int)\n", | |
" wc = WordCloud(font_path=font_path, random_state=1, \n", | |
" mask=mask, background_color=\"white\").generate(text)\n", | |
" return wc" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 25, | |
"metadata": { | |
"scrolled": false | |
}, | |
"outputs": [], | |
"source": [ | |
"# main\n", | |
"import os\n", | |
"%matplotlib inline\n", | |
"# Set Environment valiable with Windows Powershell\n", | |
"# (venv) PS > $env:CLIENT_SECRET = <your client sercret>\n", | |
"# (venv) PS > $env:CLIENT_ID = <your client id>\n", | |
"\n", | |
"\n", | |
"CLIENT_ID = os.getenv('CLIENT_ID')\n", | |
"CLIENT_SECRET = os.getenv('CLIENT_SECRET')\n", | |
"ACCESS_TOKEN_PUBLISH_URL = \"https://api.ce-cotoha.com/v1/oauth/accesstokens\"\n", | |
"DEVELOPER_API_BASE_URL = \"https://api.ce-cotoha.com/api/dev/nlp/\"\n", | |
"\n", | |
"cotoha_api = CotohaApi(CLIENT_ID, CLIENT_SECRET,\n", | |
" DEVELOPER_API_BASE_URL, ACCESS_TOKEN_PUBLISH_URL)\n", | |
"\n", | |
"word_classes = [\"名詞\", \"動詞語幹\"]\n", | |
"\n", | |
"\n", | |
"def get_summary(sentence):\n", | |
"\n", | |
" # preprocess: remove filter\n", | |
" fixed_sentences_list = preprocess(sentence)\n", | |
"\n", | |
" # cancatenate fixed sentences produced by remove filter api.\n", | |
" concat_sentence = \"\"\n", | |
" for fixed_sentence in fixed_sentences_list:\n", | |
" concat_sentence += fixed_sentence\n", | |
"\n", | |
" # get synomnyms of the words produced by the parse api.\n", | |
" parsed_result = cotoha_api.parse(concat_sentence)\n", | |
" words = get_words_by_class(parsed_result, word_classes)\n", | |
" concat_words = \"\"\n", | |
" for word in words:\n", | |
" concat_words += word + \" \"\n", | |
"\n", | |
" # Display summary\n", | |
" print(\"\\nInput:\\n\", \"-\"*40, \"\\n\", concat_sentence)\n", | |
" print(\"\\nOutput:\\n\", \"-\"*40)\n", | |
"\n", | |
" # show emotion summmary\n", | |
" print(\"*** emotion summary ***\")\n", | |
" emotional, sentiment, score, emotions = emotion_score(\n", | |
" concat_sentence, verbose=False)\n", | |
" print(\"{}:{} score:{:.2f}\".format(list(emotional.values())[0], sentiment, score))\n", | |
" for key, values in emotions.items():\n", | |
" #print(\" {}:{}\".format(values, key))\n", | |
" print(\" {}:{}\".format(list(values.values())[0], key))\n", | |
"\n", | |
" # show emoji summary of the sentence\n", | |
" print(\"\\n*** emoji summary ***\")\n", | |
" emojis_summary = show_emoji_summary(words)\n", | |
" if len(emojis_summary) > 0:\n", | |
" for word, emoji_dict in emojis_summary.items():\n", | |
" emojis = \"\"\n", | |
" emoji_words = \"\"\n", | |
" for emoji_word, emoji in emoji_dict.items():\n", | |
" emoji_words += emoji + \"(:\" + emoji_word + \":)\"\n", | |
" print(\"{:5}{}\".format(word, emoji_words))\n", | |
" \n", | |
" # show named entry summary of the sentence\n", | |
" print(\"\\n*** named entry summary ***\")\n", | |
" named_entries = cotoha_api.named_entry(concat_sentence)\n", | |
" if len(named_entries['result']) > 0:\n", | |
" named_entry_summary = \"\"\n", | |
" for named_entry in named_entries['result']:\n", | |
" named_entry_summary += named_entry['form'] + \" \"\n", | |
" try:\n", | |
" wc = get_wordcrowd_mask(named_entry_summary)\n", | |
" plt.imshow(wc, interpolation=\"bilinear\")\n", | |
" plt.axis(\"off\")\n", | |
" except ValueError as e:\n", | |
" print(e)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 27, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"\n", | |
"Input:\n", | |
" ---------------------------------------- \n", | |
" 昔々、あるところに、おじいさんとおばあさんが住んでいました。 おじいさんは山へしばかりに、おばあさんは川へせんたくに行きました。 おばあさんが川でせんたくをしていると、ドンブラコ、ドンブラコと、大きな桃が流れてきました。 「おや、これは良いおみやげになるわ」 おばあさんは大きな桃をひろいあげて、家に持ち帰りました。 そして、おじいさんとおばあさんが桃を食べようと桃を切ってみると、なんと中から元気の良い男の赤ちゃんが飛び出してきました。 「これはきっと、神さまがくださったにちがいない」 子どものいなかった。おじいさんとおばあさんは、大喜びです。 桃から生まれた男の子を、おじいさんとおばあさんは桃太郎と名付けました。 \n", | |
"\n", | |
"Output:\n", | |
" ----------------------------------------\n", | |
"*** emotion summary ***\n", | |
"👍:Positive score:0.01\n", | |
" 😑:好ましい\n", | |
" 😲:驚く\n", | |
" 😄😄😄:P\n", | |
"\n", | |
"*** emoji summary ***\n", | |
"山 ⛰(:mountain:)\n", | |
"桃 🍑(:peach:)\n", | |
"なる 💍(:ring:)\n", | |
"家 🏠(:house:)👪(:family:)\n", | |
"切る 👗(:dress:)\n", | |
"男 👨(:man:)\n", | |
"赤ちゃん 👶(:baby:)🧒(:child:)\n", | |
"下さる 🎁(:gift:)\n", | |
"子供 🧒(:child:)👶(:baby:)\n", | |
"大喜び 😂(:joy:)\n", | |
"男の子 👦(:boy:)\n", | |
"\n", | |
"*** named entry summary ***\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "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8GHhbYreJOFMix0z4jOXmdzFuuyd12W3yew8rhNWmfLyHJ3+sPZhUTk917W2lM2K5Cp2tj3OrdlNVzVKrZTihvQabkgvbHvbQtQu8HZIwvlZkTRT3N/6KH7okrWbWJW6ha7kDSTM5MzAhqr7RLptxFidvo33J98iJCRuJOhI9LIxt41NjffWPhy4Pt8QFhJyvPQRPxt9kYHKiZmrEnqAnrvKwsbcNrY076yt443QArW4keDmzAba4t20xDuwl3Ap4ywJ5zVQStEa6+SrPb9Zt/PIyzGUwa3ZTTzoPcGp8lFuTq9nTcPGuo8Ez0ehsJTFuDvE1Dld/eZYO7fn7mFDbiu9qdVL9lpdSmOsla/2/OZSV+M86jK7Lz61X4zhBFXG3CG0rrUmrfGuz/RyMCeo4muPpJla0u/S9EOPdyZ+yutjL9aulN9wJzdl1tdaIxX7TP8OrsG8L8pnNpxi6XihQ94doznWPrOIv/7d+085CacQETVvOKNzRi6EOI+EU4iIknAKEVESTiEiSsIpRERJOIWIKAmnEBEl4RQioiScQkSUhFOIiJJwChFREk4hIkrCKURESTiFiCgJpxARJeEUIqIknEJElIRTiIiScAoRURJOISJKwilEREk4hYgoCacQESXhFCKiJJxCRJSEU4iIknAKEVESTiEiSsIpRERJOIWIKAmnEBEl4RQioiScQkSUhFOIiJJwChFREk4hIkrCKURESTiFiCgJpxARJeEUIqIknEJElIRTiIiScAoRURJOISJKwilEREk4hYgoCacQESXhFCKiJJxCRJSEU4iIknAKEVESTiEiSsIpRERJOIWIKAmnEBEl4RQioiScQkSUhFOIiJJwChFREk4hIkrCKURESTiFiCgJpxARJeEUIqIknEJElIRTiIiScAoRURJOISJKwilEREk4hYgoCacQESXhFCKiJJxCRJSEU4iIknAKEVESTiEiSsIpRERJOIWIKAmnEBEl4RQioiScQkSUhFOIiJJwChFREk4hIkrCKURESTiFiCgJpxARJeEUIqKsy9yurksthBAXkJZTiIiScAoRURJOISJKwilEREk4hYgoCacQEfX/ATtMsu7GLyO2AAAAAElFTkSuQmCC\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"get_summary(sentence1)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 28, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"\n", | |
"Input:\n", | |
" ---------------------------------------- \n", | |
" そしてある日、桃太郎が言いました。 「ぼく、鬼ヶ島(鬼ヶ島)へ行って、わるい鬼を退治します」 おばあさんにきび団子を作ってもらうと、鬼ヶ島へ出かけました。 旅の途中で、イヌに出会いました。 「桃太郎さん、どこへ行くのですか?」 「鬼ヶ島へ、鬼退治に行くんだ」 「それでは、お腰に付けたきび団子を1つ下さいな。おともしますよ」 イヌはきび団子をもらい、桃太郎のうともになりました。 そして、こんどはサルに出会いました。 「桃太郎さん、どこへ行くのですか?」 「鬼ヶ島へ、鬼退治に行くんだ。」「それでは、お腰に付けたきび団子を1つ下さいな。おともしますよ」 そしてこんどは、キジに出会いました。 「桃太郎さん、どこへ行くのですか?」 「鬼ヶ島へ、鬼退治に行くんだ」 「それでは、お腰に付けたきび団子を1つ下さいな。おともしますよ」 こうして、イヌ、サル、キジの仲間を手に入れた桃太郎は、ついに鬼ヶ島へやってきました。 \n", | |
"\n", | |
"Output:\n", | |
" ----------------------------------------\n", | |
"*** emotion summary ***\n", | |
"✋✋✋✋:Neutral score:0.69\n", | |
" 😄:P\n", | |
" 😔:N\n", | |
"\n", | |
"*** emoji summary ***\n", | |
"言う 🔉(:sound:)👄(:mouth:)\n", | |
"鬼 👹(:ogre:)\n", | |
"犬 🐶(:dog:)\n", | |
"付ける 🐻(:bear:)\n", | |
"下さる 🎁(:gift:)\n", | |
"なる 💍(:ring:)\n", | |
"猿 🐒(:monkey:)\n", | |
"仲間 🧉(:mate:)👪(:family:)\n", | |
"手 ✋(:hand:)\n", | |
"\n", | |
"*** named entry summary ***\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"get_summary(sentence2)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 29, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"\n", | |
"Input:\n", | |
" ---------------------------------------- \n", | |
" 鬼ヶ島では、鬼たちが近くの村からぬすんだ宝物やごちそうをならべて、酒盛りの真っ最中です。 「みんな、ぬかるなよ。それ、かかれ!」 イヌは鬼のおしりにかみつき、サルは鬼のせなかをひっかき、キジはくちばしで鬼の目をつつきました。 そして、桃太郎も、刀をふり回して大あばれです。 とうとう鬼の親分が、「まいった、まいった。さんだ、助けてくれぇ」と、手をついてあやまりました。 桃太郎とイヌとサルとキジは、鬼から取り上げた宝物をくるまにつんで、元気よく家に帰りました。 おじいさんとおばあさんは、桃太郎の無事な姿を見て大喜びです。 そして三人は、宝物のおかげでしあわせにくらしましたとさ。 \n", | |
"\n", | |
"Output:\n", | |
" ----------------------------------------\n", | |
"*** emotion summary ***\n", | |
"👍:Positive score:0.06\n", | |
" 😄:喜ぶ\n", | |
" 😄😄😄😄:P\n", | |
" 😔:N\n", | |
" 😐😐:PN\n", | |
"\n", | |
"*** emoji summary ***\n", | |
"鬼 👹(:ogre:)\n", | |
"近く 🔜(:soon:)\n", | |
"犬 🐶(:dog:)\n", | |
"猿 🐒(:monkey:)\n", | |
"背中 🔙(:back:)\n", | |
"目 👁(:eye:)👪(:family:)\n", | |
"刀 🔪(:knife:)\n", | |
"手 ✋(:hand:)\n", | |
"取り上げる🉑(:accept:)\n", | |
"車 🚗(:car:)🚗(:automobile:)\n", | |
"家 🏠(:house:)👪(:family:)\n", | |
"見る ⌚(:watch:)💂(:guard:)\n", | |
"大喜び 😂(:joy:)\n", | |
"\n", | |
"*** named entry summary ***\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"get_summary(sentence3)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Remove Filter and Sentiment Score" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 30, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"{'message': 'OK',\n", | |
" 'result': {'emotional_phrase': [{'emotion': '悲しい', 'form': 'すみません'}],\n", | |
" 'score': 0.2767792075525962,\n", | |
" 'sentiment': 'Negative'},\n", | |
" 'status': 0}\n" | |
] | |
} | |
], | |
"source": [ | |
"# without preprocess\n", | |
"sentence = \"えーーっと、あの、今日の打ち合わせでしたっけ。すみません、ちょっと、急用が入ってしまって。\"\n", | |
"result = cotoha_api.sentiment(sentence)\n", | |
"pprint(result)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 31, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"、今日の打ち合わせでしたっけ。すみません、急用が入ってしまって。\n", | |
"{'message': 'OK',\n", | |
" 'result': {'emotional_phrase': [{'emotion': '悲しい', 'form': 'すみません'}],\n", | |
" 'score': 0.31306889615794387,\n", | |
" 'sentiment': 'Negative'},\n", | |
" 'status': 0}\n" | |
] | |
} | |
], | |
"source": [ | |
"# show a little bit better score than the above (without remove filter)\n", | |
"# preprocess: remove filter\n", | |
"fixed_sentences_list = preprocess(sentence)\n", | |
"\n", | |
"# cancatenate fixed sentences produced by remove filter api.\n", | |
"concat_sentence=\"\"\n", | |
"for fixed_sentence in fixed_sentences_list:\n", | |
" concat_sentence+=fixed_sentence\n", | |
"print(concat_sentence)\n", | |
"result = cotoha_api.sentiment(concat_sentence)\n", | |
"pprint(result)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 32, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"['、今日の打ち合わせでしたっけ。', 'すみません、急用が入ってしまって。']\n", | |
"{'message': 'OK',\n", | |
" 'result': {'emotional_phrase': [],\n", | |
" 'score': 0.37840855175152166,\n", | |
" 'sentiment': 'Neutral'},\n", | |
" 'status': 0}\n", | |
"{'message': 'OK',\n", | |
" 'result': {'emotional_phrase': [{'emotion': '悲しい', 'form': 'すみません'}],\n", | |
" 'score': 0.33550235993984856,\n", | |
" 'sentiment': 'Negative'},\n", | |
" 'status': 0}\n" | |
] | |
} | |
], | |
"source": [ | |
"# by each sentence\n", | |
"fixed_sentences = preprocess(sentence)\n", | |
"print(fixed_sentences)\n", | |
"for fixed_sentence in fixed_sentences:\n", | |
" result = cotoha_api.sentiment(fixed_sentence)\n", | |
" pprint(result) " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "cotoha-api", | |
"language": "python", | |
"name": "cotoha-api" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.6.5" | |
}, | |
"toc": { | |
"base_numbering": 1, | |
"nav_menu": {}, | |
"number_sections": true, | |
"sideBar": true, | |
"skip_h1_title": false, | |
"title_cell": "Table of Contents", | |
"title_sidebar": "Contents", | |
"toc_cell": false, | |
"toc_position": { | |
"height": "calc(100% - 180px)", | |
"left": "10px", | |
"top": "150px", | |
"width": "244.516px" | |
}, | |
"toc_section_display": true, | |
"toc_window_display": true | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment