[PYTHON] Lassen Sie sie den Aozora Bunko langsam lesen: Genauer

Letztes Mal gelang es, den Aozora Bunko langsam mit Python zu lesen. Da ich es jedoch ohne Berücksichtigung von Rubin gelesen habe, gab es ein Problem, dass die Lesegenauigkeit ziemlich niedrig war. Dieses Mal werde ich diesen Punkt korrigieren

Dieser Fluss

Was ich machen will; was ich vorhabe zu tun ** Wenn Sie die URL von Aozora Bunko eingeben, wird sie nach der Registrierung im Lesewörterbuch langsam vorgelesen **. Daher erstellen wir den folgenden Ablauf

Untitled Diagram.png

Rufen Sie die URL der Datei von der URL der Buchkarte ab

In Aozora Bunko gibt es eine Seite namens Buchkarte, von der aus Sie mit dem Text zur Webseite springen und verschiedene Dateien herunterladen können.

tosyoka-do.PNG

Dieses Mal möchte ich zip und xhtml aus den rot eingeschlossenen Dateien, also werde ich BeautifulSoup4 verwenden, um sie zu erhalten.

aozora_urlsplit.py


from bs4 import BeautifulSoup
import requests
import re

def aozoraurl(url):
    page = requests.get(url)
    soup = BeautifulSoup(page.content, 'html.parser')

    table = soup.select('table.download a[href*=".html"]')
    htmlurl_rel = str(table).split('\"')[1].replace("./", "/")
    #Ermitteln Sie den relativen Pfad von XHTML

    table2 = soup.select('table.download a[href*=".zip"]')
    zipurl_rel = str(table2).split('\"')[1].replace("./", "/")
    #Ruft den relativen Pfad der Zip-Datei ab

    urlsplit = re.sub("/card[0-9]*.html", "", url)
    htmlurl = urlsplit + htmlurl_rel
    zipurl = urlsplit + zipurl_rel
    aozoraurllist = [htmlurl, zipurl]
    #Schneiden Sie unter der Karte der eingegebenen URL aus und hängen Sie sie an den relativen Pfad darüber an

    return aozoraurllist

if __name__ == '__main__':
	print(aozoraurl("https://www.aozora.gr.jp/cards/000879/card85.html"))

Wenn Sie die URL der Seite der Buchkarte werfen, wird die Liste von [XHTML-URL, Zip-URL] zurückgegeben.

Machen Sie eine Liste von Rubin

Erstellen Sie eine Rubinliste aus XHTML

aozora_rubylisting.py


from bs4 import BeautifulSoup
import requests
import re
import jaconv

def aozoraruby(url):
    page = requests.get(url)
    soup = BeautifulSoup(page.content, 'html.parser')

    _ruby = soup.select("ruby")

    _rubylist = []
    for i in _ruby:
        _ruby_split = re.sub("<[/a-z]*>", "", str(i)).replace(")", "").split("(")
        _rubylist.append(_ruby_split)

    for index, item in enumerate(_rubylist):
        _rubylist[index][1] = jaconv.kata2hira(str(item[1]))
    
    return _rubylist

if __name__ == '__main__':
	print(aozoraruby("https://www.aozora.gr.jp/cards/000879/files/3813_27308.html"))

Da SofTalk nur in Hiragana gelesen und registriert werden kann, wird Katakana in Hiragana konvertiert.

Ich habe dieses Mal zum ersten Mal enumerate verwendet und es ist klug und gut.

Erstellen Sie einen Text aus einer TXT-Datei

Wie beim letzten Mal werde ich von Ich möchte den Text von Aozora Bunko in Python - AI Artificial Intelligence Technology ausleihen.

Wenn Sie die URL auf die Funktion "download ()" werfen, wird der Text von der Funktion "convert ()" zurückgegeben. Die Funktion main () wird nicht verwendet, setzen Sie sie also unter if __name__ == '__ main __':

Langsame Wörterbuchregistrierung und Lesen

aozora_yukkuri.py


import subprocess
import os

from aozora_urlsplit import aozoraurl
from aozora_rubylisting import aozoraruby
from aozora_honbun import download, convert

os.chdir(os.path.dirname(os.path.abspath(__file__)))

urllist = aozoraurl("https://www.aozora.gr.jp/cards/000879/card3813.html")

_ruby = aozoraruby(urllist[0])
_honbun = convert(download(urllist[1])).splitlines()

_start = "start SofTalk.exe Pfad"
_pron  = "/P:"
_speed = "/S:120"
_word  = "/W:"

for j in _ruby:
    _command_ruby = [_start, _pron + j[1] + "," + j[0] + ",True"]
    print(_command_ruby)
    subprocess.run(' '.join(_command_ruby), shell=True)

for i in _honbun:
    _command = [_start, _speed, _word + i]
    subprocess.run(' '.join(_command), shell=True)

Fügen Sie den Text für jeden Zeilenumbruch in die Liste ein und führen Sie ihn von der Wörterbuchregistrierung bis zum Lesen des Textes durch.

Wenn Sie Ihre Stimme langsam ändern möchten, fügen Sie / M: oder / MN: zu _command hinzu (Referenz [^ dai1kai])

Bekannte Probleme

Der Text und der Rubin stammen von verschiedenen Stellen

Der Body stammt aus txt (zip) und der Ruby aus der XHTML-Version, da ich den vorhandenen Code verwenden möchte. Ich denke, dass der Text in Zukunft mit der XHTML-Version vereinheitlicht werden sollte (da es ziemlich schwierig zu sein scheint, Ruby aus txt zu entfernen).

Kanji-Zeichen, die nicht im Wörterbuch registriert wurden

In Aozora Bunko scheint es, dass schwieriges Kanji wie das folgende Bild als Bild angezeigt wird. Es ist schwierig, dies zu lesen, daher ist es gut, die Wörterbuchregistrierung zu überspringen und sie im Text als Hiragana zusammenzufassen. Diesmal habe ich es nicht verarbeitet, weil ich dachte, es wäre gut, es bis zu einem gewissen Grad zu lesen

kakuryaku.PNG Das fragliche Kanji

[^ dai1kai]: Lassen Sie uns mit Python langsam sprechen https://qiita.com/Mechanetai/items/78b04ed553cce01fa081

Recommended Posts

Lassen Sie sie den Aozora Bunko langsam lesen: Genauer
Lassen Sie sie die Bibliothek des blauen Himmels langsam lesen
Lassen Sie sie den Aozora Bunko langsam lesen: Codeverbesserung
Lassen Sie uns Aozora Bunko im Gespräch mit COTOHA zusammenfassen