動機
前回はdocomoの形態素解析apiを使ってみる。
ルビ振りAPIのパラメータを見てみたら面白い項目があったので試してみたいと思います。
yahooのルビ振りAPI
入力されたテキストに対してルビをつけて返してくれます。
パラメータについて
今回少し変わってると感じたのは、gradeパラメータです。
小学校何年生までの漢字にルビをつけるか、という粒度で設定ができます。
もし、gradeで3を設定すると、1~2年生で習う漢字にふりがなをつけず、
それ以上の難しさの漢字にのみルビをつけてくれます。
1: 小学1年生向け。漢字(注2)にふりがなを付けます。
2: 小学2年生向け。1年生で習う漢字にはふりがなを付けません。
3: 小学3年生向け。1~2年生で習う漢字にはふりがを付けません。
4: 小学4年生向け。1~3年生で習う漢字にはふりがなを付けません。
5: 小学5年生向け。1~4年生で習う漢字にはふりがなを付けません。
6: 小学6年生向け。1~5年生で習う漢字にはふりがなを付けません。
7: 中学生以上向け。小学校で習う漢字にはふりがなを付けません。
8: 一般向け。常用漢字にはふりがなを付けません。
(https://developer.yahoo.co.jp/webapi/jlp/furigana/v1/furigana.html を引用)
ソースコード
import requests
import xml.etree.ElementTree as ET
target_url = "https://jlp.yahooapis.jp/FuriganaService/V1/furigana"
api_key= "ID"
sentence = "今日は学校で国語の勉強をしました"
data = {
"appid":api_key,
"grade":"1",
"sentence":sentence
}
response = requests.post(target_url, data=data)
root = ET.fromstring(response.text)
for line in root:
for word_list in line[0]:
if len(word_list) == 1:
print(word_list[0].text, end="")
else:
print(word_list[1].text, end="")
結果
grade=1でのルビ振りAPIの結果
入力文 私は、山田太郎です。今日は学校で図画工作の授業で、初めての写生をしました
出力文 わたしは、やまだたろうです。きょうはがっこうでずがこうさくのじゅぎょうで、はじめてのしゃせいをしました
grade=3でのルビ振りAPIの結果
入力文 私は、山田太郎です。今日は学校で図画工作の授業で、初めての写生をしました
出力文 わたしは、山田たろうです。きょうは学校で図画工作のじゅぎょうで、はじめてのしゃせいをしました
grade=8でのルビ振りAPIの結果
入力文 私は、山田太郎です。今日は学校で図画工作の授業で、初めての写生をしました
出力文 わたしは、山田太郎です。きょうは学校で図画工作の授業で、初めての写生をしました
おまけ
ルビを実際につけたくなったのでやってみます。
きれいなやり方はわからなかったので力業💪でやりました。
ルビが返ってきてるものは、rubyタグをつけるというものです。
ソースコード
import requests
import xml.etree.ElementTree as ET
target_url = "https://jlp.yahooapis.jp/FuriganaService/V1/furigana"
api_key= "ID"
sentence = "今日は学校で国語の勉強をしました"
data = {
"appid":api_key,
"grade":"1",
"sentence":sentence
}
response = requests.post(target_url, data=data)
root = ET.fromstring(response.text)
ruby_dict = {}
text = []
for line in root:
for word_list in line[0]:
if len(word_list) == 1:
text.append(word_list[0].text)
else:
text.append(word_list[0].text)
ruby_dict[word_list[0].text] = word_list[1].text
for word in text:
if word in list(ruby_dict.keys()):
print("<ruby>{}<rp>".format(word), end="")
print("(</rp><rt>{}</rt><rp>)</rp></ruby>".format(ruby_dict[word]), end="")
else:
print(word, end="")
出力
<ruby>私<rp>(</rp><rt>わたし</rt><rp>)</rp></ruby>は、山田<ruby>太郎<rp>(</rp><rt>たろう</rt><rp>)</rp></ruby>です。<ruby>今日<rp>(</rp><rt>きょう</rt><rp>)</rp></ruby>は学校で図画工作の<ruby>授業<rp>(</rp><rt>じゅぎょう</rt><rp>)</rp></ruby>で、<ruby>初めて<rp>(</rp><rt>はじめて</rt><rp>)</rp></ruby>の<ruby>写生<rp>(</rp><rt>しゃせい</rt><rp>)</rp></ruby>をしました
htmlでの出力
私は、山田太郎です。今日は学校で図画工作の授業で、初めての写生をしました
まとめ
漢字の難易度ごとに分けてルビをつけれるのは面白いですね。
最初はカラオケの歌詞みたいにルビをつけるのを想像しましたが、授業でのプリントとかに、適切なルビ振りがすぐにできるのかもしれません。
ホームページでのルビの対応も簡単ですね。