La dernière fois a réussi à lire lentement l'Aozora Bunko en utilisant Python. Cependant, comme je l'ai lu sans considérer ruby, il y avait un problème que la précision de lecture était assez faible. Cette fois je vais corriger ce point
Ce que je veux faire ** Si vous lancez l'URL d'Aozora Bunko, elle sera lue lentement après avoir été enregistrée dans le dictionnaire de lecture **. Par conséquent, nous allons créer le flux suivant
Il existe une page appelée carte de livre dans Aozora Bunko, à partir de laquelle vous pouvez accéder à la page Web contenant le texte et télécharger divers fichiers.
Cette fois, je veux zip et xhtml à partir des fichiers inclus en rouge, donc j'utiliserai BeautifulSoup4 pour les obtenir.
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("./", "/")
#Obtenir le chemin relatif de XHTML
table2 = soup.select('table.download a[href*=".zip"]')
zipurl_rel = str(table2).split('\"')[1].replace("./", "/")
#Obtenez le chemin relatif du fichier zip
urlsplit = re.sub("/card[0-9]*.html", "", url)
htmlurl = urlsplit + htmlurl_rel
zipurl = urlsplit + zipurl_rel
aozoraurllist = [htmlurl, zipurl]
#Coupez sous la carte de l'URL saisie et attachez-la au chemin relatif ci-dessus
return aozoraurllist
if __name__ == '__main__':
print(aozoraurl("https://www.aozora.gr.jp/cards/000879/card85.html"))
Si vous lancez l'URL de la page de la fiche du livre, celle-ci renverra la liste des [URL XHTML, URL zip].
Créer une liste de rubis à partir de 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"))
Puisque SofTalk ne peut être lu et enregistré qu'en Hiragana, Katakana sera converti en Hiragana.
J'ai utilisé ʻenumerate` pour la première fois cette fois, et c'est intelligent et bon.
Comme la dernière fois, je vais emprunter à Je veux obtenir le texte d'Aozora Bunko en Python - AI Artificial Intelligence Technology.
Si vous lancez l'URL à la fonction download ()
, le corps sera renvoyé par la fonction convert ()
.
Puisque la fonction main ()
n'est pas utilisée, placez-la sous ʻif name == '__ main __': `
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.Chemin exe"
_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)
Placez le texte dans la liste pour chaque saut de ligne et effectuez de l'enregistrement du dictionnaire à la lecture du texte.
Si vous voulez changer votre voix lentement, ajoutez / M:
ou / MN:
à _command
(référence [^ dai1kai])
Le corps est tiré de txt (zip) et le ruby est tiré de la version XHTML car je souhaite utiliser le code existant. Je pense que le texte devrait être unifié à la version XHTML à l'avenir (car il semble assez difficile de supprimer ruby de txt)
Dans Aozora Bunko, il semble que les kanji difficiles comme l'image ci-dessous soient affichés sous forme d'image. Il est difficile de lire ceci, il est donc bon de sauter l'enregistrement du dictionnaire et de le résumer dans le texte comme hiragana. Cette fois, je ne l'ai pas traité parce que je pensais qu'il serait bon de le lire dans une certaine mesure
Les kanji en question
[^ dai1kai]: Faisons la voix lentement avec Python https://qiita.com/Mechanetai/items/78b04ed553cce01fa081