Wenn die Phase der Geschichte lokal ist, ist es der Typ, den Sie selbst lesen Ich habe versucht, das Stadium der Geschichte mithilfe der einzigartigen Ausdrucksextraktion von COTOHA zu extrahieren und zu veranschaulichen.
Google Colaboratory
-Wordcloud ist die einzige, die einzeln installiert werden muss. (Google Colaboratory ist praktisch, da einige Bibliotheken bereits installiert sind.) Führen Sie den folgenden Befehl aus, um die Vorbereitung abzuschließen.
Installieren Sie Wordcloud und laden Sie Schriftarten herunter
!pip install wordcloud
!apt-get -y install fonts-ipafont-gothic
!rm /root/.cache/matplotlib/fontlist-v300.json
Klonen Sie die Blue Sky-Bibliothek
!git clone --branch master --depth 1 https://github.com/aozorabunko/aozorabunko.git
Der Teil, um einen Roman von Aozora Bunko zu bekommen
from bs4 import BeautifulSoup
def get_word():
#Geben Sie den Pfad aus dem geklonten HTML an(Das Beispiel ist Osamu Osamus Good Buy)
path_to_html='aozorabunko/cards/000035/files/258_20179.html'
#HTML-Analyse mit schöner Suppe
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)
#Aufgeteilt nach Anzahl der Zeichen für den Cotoha-API-Aufruf(Alle 1800 Zeichen)
aozora_text_list = [aozora_text[i: i+1800] for i in range(0, len(aozora_text), 1800)]
return aozora_text_list
Darüber hinaus ist die Zeichenfolge in 1800 Zeichen unterteilt und so angeordnet, dass COTOHA sie ausführen kann. (Ich habe es nicht richtig überprüft, aber 2000 Zeichen haben nicht funktioniert, und als ich es mit 1800 Zeichen ausgeführt habe, war es cool ... ~~ Check it out ~~)
COTOHA_Der Teil, der die API aufruft
import os
import urllib.request
import json
import configparser
import codecs
import sys
import time
client_id = "Ihre Kunden-ID"
client_secret = "Dein eigener geheimer Schlüssel"
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):
#Zugriffstoken erhalten
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
#API-URL-Spezifikation(Einzigartige Ausdrucksextraktion)
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)
#Was tun, wenn in der Anforderung ein Fehler auftritt?
except urllib.request.HTTPError as e:
#Wenn der Statuscode 401 Unauthorized oder 500 Internal Server Error lautet, fordern Sie das Zugriffstoken erneut an und fordern Sie es erneut an
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)
#Wenn der Fehler nicht 401 oder 500 ist, wird die Ursache angezeigt.
else:
print ("<Error> " + e.reason)
#sys.exit()
res_body = res.read()
res_body = json.loads(res_body)
return res_body
Den Teil, der COTOHA (eindeutige Ausdrucksextraktion) aufruft, versuche ich nur bei den Fehlern 401 und 500 erneut zu versuchen.
Der in Word Cloud dargestellte Teil
from wordcloud import WordCloud
import matplotlib.pyplot as plt
from PIL import Image
def get_wordcrowd_mask(text):
#Japanische Schriftartspezifikation
f_path = '/usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf'
#wc Parameterspezifikation
wc = WordCloud(background_color="white",
width=500,
height=500,
font_path=f_path,
collocations=False,
).generate( text )
#Bildschirmdarstellung
plt.figure(figsize=(5,5), dpi=200)
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.show()
Dies ist der Teil, der den Text mit WordCloud veranschaulicht.
Der Teil, der den Prozess ausführt
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)
Der Teil, der einfach 1 bis 3 ausführt Darüber hinaus wird der Fortschritt zum Zeitpunkt des API-Aufrufs als Ausgabeergebnis unten angezeigt. (Zahl im Array, wenn Text durch n / 1 geteilt wird)
python
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9
Es gibt einige Zeichen, die anscheinend nichts mit dem Ortsnamen zu tun haben, aber es scheint, dass sie im Allgemeinen extrahiert werden können. Nachfolgend sind die Ergebnisse anderer Studien aufgeführt.
Es macht Spaß. .. ..
Sowohl COTOHA als auch Colab können kostenlos verwendet werden, und Sie können die Sprachverarbeitung problemlos berühren. Es ist eine Umgebung, also ist es großartig!
Das ist alles, danke fürs Lesen!
Was für eine Arbeit ist das Bild unten! (Hör auf, weil es nervt ...)
Recommended Posts