Si l'étape de l'histoire est locale, c'est le type que vous lisez tout seul J'ai essayé d'extraire et d'illustrer l'étape de l'histoire en utilisant l'extraction d'expression unique de COTOHA.
Google Colaboratory
-Wordcloud est le seul qui doit être installé individuellement. (Google Colaboratory est pratique car certaines bibliothèques sont déjà installées) Exécutez la commande suivante pour terminer la préparation.
Installer wordcloud et télécharger des polices
!pip install wordcloud
!apt-get -y install fonts-ipafont-gothic
!rm /root/.cache/matplotlib/fontlist-v300.json
Cloner la bibliothèque du ciel bleu
!git clone --branch master --depth 1 https://github.com/aozorabunko/aozorabunko.git
La partie pour obtenir n'importe quel roman d'Aozora Bunko
from bs4 import BeautifulSoup
def get_word():
#Spécifiez le chemin du html cloné(L'échantillon est le bon achat d'Osamu Osamu)
path_to_html='aozorabunko/cards/000035/files/258_20179.html'
#Analyse HTML avec Beautiful Soup
with open(path_to_html, 'rb') as html:
soup = BeautifulSoup(html, 'lxml')
main_text = soup.find("div", class_='main_text')
for yomigana in main_text.find_all(["rp","h4","rt"]):
yomigana.decompose()
sentences = [line.strip() for line in main_text.text.strip().splitlines()]
aozora_text=','.join(sentences)
#Divisé par le nombre de caractères pour l'appel d'API cotoha(Tous les 1800 caractères)
aozora_text_list = [aozora_text[i: i+1800] for i in range(0, len(aozora_text), 1800)]
return aozora_text_list
De plus, la chaîne de caractères est divisée en 1800 caractères et arrangée de manière à ce que COTOHA puisse l'exécuter. (Je ne l'ai pas vérifié correctement, mais 2000 caractères ne fonctionnaient pas, et quand je l'ai exécuté avec 1800 caractères, c'était cool ... ~~ Vérifiez-le ~~)
COTOHA_La partie qui appelle l'API
import os
import urllib.request
import json
import configparser
import codecs
import sys
import time
client_id = "Votre identifiant client"
client_secret = "Votre propre clé secrète"
developer_api_base_url = "https://api.ce-cotoha.com/api/dev/nlp/"
access_token_publish_url = "https://api.ce-cotoha.com/v1/oauth/accesstokens"
def cotoha_call(sentence):
#Obtenez un jeton d'accès
def getAccessToken():
url = access_token_publish_url
headers={
"Content-Type": "application/json;charset=UTF-8"
}
data = {
"grantType": "client_credentials",
"clientId": client_id,
"clientSecret": client_secret
}
data = json.dumps(data).encode()
req = urllib.request.Request(url, data, headers)
res = urllib.request.urlopen(req)
res_body = res.read()
res_body = json.loads(res_body)
access_token = res_body["access_token"]
return access_token
#Spécification d'URL de l'API(Extraction d'expression unique)
base_url_footer = "v1/ne"
url = developer_api_base_url + base_url_footer
headers={
"Authorization": "Bearer " + getAccessToken(), #access_token,
"Content-Type": "application/json;charset=UTF-8",
}
data = {
"sentence": sentence
}
data = json.dumps(data).encode()
time.sleep(0.5)
req = urllib.request.Request(url, data, headers)
try:
res = urllib.request.urlopen(req)
#Que faire si une erreur se produit dans la demande
except urllib.request.HTTPError as e:
#Si le code d'état est 401 Unauthorized ou 500 Internal Server Error, réacquérir le jeton d'accès et demander à nouveau
if e.code == 401 or 500:
access_token = getAccessToken()
headers["Authorization"] = "Bearer " + access_token
time.sleep(0.5)
req = urllib.request.Request(url, data, headers)
res = urllib.request.urlopen(req)
#Si l'erreur est différente de 401 ou 500, la cause est affichée.
else:
print ("<Error> " + e.reason)
#sys.exit()
res_body = res.read()
res_body = json.loads(res_body)
return res_body
J'essaie de réessayer uniquement dans le cas des erreurs 401 et 500, qui est la partie qui appelle COTOHA (extraction d'expressions uniques).
La partie illustrée dans Word Cloud
from wordcloud import WordCloud
import matplotlib.pyplot as plt
from PIL import Image
def get_wordcrowd_mask(text):
#Spécification de la police japonaise
f_path = '/usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf'
#spécification des paramètres wc
wc = WordCloud(background_color="white",
width=500,
height=500,
font_path=f_path,
collocations=False,
).generate( text )
#Représentation d'écran
plt.figure(figsize=(5,5), dpi=200)
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.show()
C'est la partie qui illustre le texte à l'aide de WordCloud.
<détails> La partie qui exécute simplement 1 à 3
De plus, la progression au moment de l'appel d'API est indiquée comme résultat de sortie ci-dessous. (Nombre dans le tableau lors de la division du texte par n / 1) Il y a des caractères qui semblent n'avoir rien à voir avec le nom du lieu, mais il semble qu'ils puissent être extraits en général.
Voici les résultats d'autres essais. C'est marrant. .. .. COTOHA et Colab peuvent être utilisés gratuitement et vous pouvez facilement toucher au traitement de la langue.
C'est un environnement, donc c'est génial! C'est tout, merci d'avoir lu! Enfin, quel genre de travail est l'image ci-dessous! (Arrêtez parce que c'est ennuyeux ...)
Recommended Posts
La partie qui exécute le processus
aozora_text_list = get_word()
json_list = []
loc_str = ''
cnt = 0
for i in aozora_text_list:
cnt+=1
print( str(cnt) + '/' + str(len(aozora_text_list)) )
json_list.append(cotoha_call(i))
for i in json_list:
for j in i['result']:
if(j['class'] == 'LOC'):
loc_str = loc_str + j['form'] + ","
get_wordcrowd_mask(loc_str)
python
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9
Résultat de sortie
・ Au revoir (Osamu Tadashi)
・ Shayo (Osamu Taisei)
・ Soirée Galaxy Railroad (Kenji Miyazawa)
・ Citron (Motojiro Kajii)
Résumé