次のページを参考にしました。
ルビ振り
次のようにルビを振ります。
「最後」のルビは誤りです。
add_ruby.py
#! /usr/bin/python
#
# add_ruby.py
#
# Jul/29/2022
# ------------------------------------------------------------------
import sys
import os
import json
from urllib import request
from dotenv import load_dotenv
from parse_results import parse_results_proc
# ------------------------------------------------------------------
URL = "https://jlp.yahooapis.jp/FuriganaService/V2/furigana"
# ------------------------------------------------------------------
def file_to_str_proc(file_in):
str_out = ""
try:
fp_in = open(file_in,encoding='utf-8')
str_out = fp_in.read()
fp_in.close()
except Exception as ee:
sys.stderr.write("*** error *** file_to_str_proc ***\n")
sys.stderr.write(str (ee))
#
return str_out
# ------------------------------------------------------------------
def post(query):
headers = {
"Content-Type": "application/json",
"User-Agent": "Yahoo AppID: {}".format(APPID),
}
param_dic = {
"id": "1234-1",
"jsonrpc": "2.0",
"method": "jlp.furiganaservice.furigana",
"params": {
"q": query,
"grade": 1
}
}
params = json.dumps(param_dic).encode()
req = request.Request(URL, params, headers)
with request.urlopen(req) as res:
body = res.read()
return body.decode()
#
# ------------------------------------------------------------------
sys.stderr.write("*** 開始 ***\n")
#
dotenv_path = '.env'
load_dotenv(dotenv_path)
APPID = os.environ.get("APPID")
file_in = sys.argv[1]
sys.stderr.write(file_in + "\n")
text_in = file_to_str_proc(file_in)
response = post(text_in)
dict_aa = json.loads(response)
parse_results_proc(dict_aa)
#
sys.stderr.write("*** 終了 ***\n")
# ------------------------------------------------------------------
parse_results.py
#
# parse_results.py
#
# Jul/29/2022
#
# ------------------------------------------------------------------
import sys
#
sys.path.append('/var/www/data_base/common/python_common')
from file_io import file_to_str_proc
#
# ------------------------------------------------------------------
def add_rubi_proc(ww):
if ww["surface"] != ww["furigana"]:
str_out = "<ruby>" + ww["surface"]
str_out += "<rt>" + ww["furigana"] + "</rt>"
str_out += "</ruby>"
print(str_out, end='')
else:
print(ww["surface"], end='')
# ------------------------------------------------------------------
def parse_word_proc_s2(word):
for ww in word["subword"]:
add_rubi_proc(ww)
# ------------------------------------------------------------------
def parse_word_proc(word):
if "subword" in word:
parse_word_proc_s2(word)
elif "furigana" in word:
add_rubi_proc(word)
else:
print(word["surface"], end='')
# ------------------------------------------------------------------
def parse_results_proc(dict_aa):
for word in dict_aa["result"]["word"]:
parse_word_proc(word)
# ------------------------------------------------------------------
.env
APPID = "dj0zaiZpPW9NN3FuTWw3UmFkdC****"
実行結果 ##
入力ファイル
『おぢいさんのランプ』は新美南吉作の児童文学。新美の生前に刊行された唯一の童話集「おぢいさんのランプ」(1942年)に収載された。
老人が孫に自身の人生と灯油ランプにまつわる話を語って聞かせる構成で、最初と最後の部分は刊行当時の1940年代、本編の話は「日露戦争のじぶん」の物語である。
出力ファイル
『おぢいさんのランプ』は<ruby>新美<rt>にいみ</rt></ruby><ruby>南吉<rt>なんきち</rt></ruby><ruby>作<rt>さく</rt></ruby>の<ruby>児童<rt>じどう</rt></ruby><ruby>文学<rt>ぶんがく</rt></ruby>。<ruby>新美<rt>にいみ</rt></ruby>の<ruby>生前<rt>せいぜん</rt></ruby>に<ruby>刊行<rt>かんこう</rt></ruby>された<ruby>唯一<rt>ゆいいつ</rt></ruby>の<ruby>童話<rt>どうわ</rt></ruby><ruby>集<rt>しゅう</rt></ruby>「おぢいさんのランプ」(1942<ruby>年<rt>ねん</rt></ruby>)に<ruby>収載<rt>しゅうさい</rt></ruby>された。
<ruby>老人<rt>ろうじん</rt></ruby>が<ruby>孫<rt>まご</rt></ruby>に<ruby>自身<rt>じしん</rt></ruby>の<ruby>人生<rt>じんせい</rt></ruby>と<ruby>灯油<rt>とうゆ</rt></ruby>ランプにまつわる<ruby>話<rt>はなし</rt></ruby>を<ruby>語<rt>かた</rt></ruby>って<ruby>聞<rt>き</rt></ruby>かせる<ruby>構成<rt>こうせい</rt></ruby>で、<ruby>最初<rt>さいしょ</rt></ruby>と<ruby>最<rt>さい</rt></ruby><ruby>後<rt>あと</rt></ruby>の<ruby>部分<rt>ぶぶん</rt></ruby>は<ruby>刊行<rt>かんこう</rt></ruby><ruby>当時<rt>とうじ</rt></ruby>の1940<ruby>年代<rt>ねんだい</rt></ruby>、<ruby>本編<rt>ほんぺん</rt></ruby>の<ruby>話<rt>はなし</rt></ruby>は「<ruby>日露<rt>にちろ</rt></ruby><ruby>戦争<rt>せんそう</rt></ruby>のじぶん」の<ruby>物語<rt>ものがたり</rt></ruby>である。