PythonでYahoo!のルビ振りを使ってみましたのでメモしておきます。

ルビ振り(V2)サンプル - Yahoo!デベロッパーネットワーク
このサンプルはルビ振りAPIを使用して、入力された文章に対してルビ振りを行い、その結果を出力するものです。
コード
import json
from urllib import request
import re
def main():
text = "私はIt is it.と書いた。"
json_text = request_furigana(text)
result = get_furigana(json_text)
print(result)
def request_furigana(text):
APPID = "" # <-- ここにあなたのClient ID(アプリケーションID)を設定してください。
URL = "https://jlp.yahooapis.jp/FuriganaService/V2/furigana"
text = text.strip()
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": text},
}
params = json.dumps(param_dic).encode()
req = request.Request(URL, params, headers)
with request.urlopen(req) as res:
body = res.read()
return body.decode()
def get_furigana(json_str):
rec = json.loads(json_str)
words = rec["result"]["word"]
furiganas = []
romans = []
for word in words:
if "furigana" in word:
furiganas.append(word["furigana"])
else:
temp = word["surface"]
if re.search(r"[あ‐んア-ン]", temp):
furiganas.append(temp)
elif re.search(r"[a-zA-Z]", temp):
furiganas.append(temp)
else:
furiganas.append("")
if "roman" in word:
romans.append(word["roman"])
else:
temp = word["surface"]
if re.search(r"[a-zA-Z]", temp):
romans.append(temp)
else:
romans.append("")
furigana = "".join(furiganas)
roman = "".join(romans)
roman = roman.lower()
return {"furigana": furigana, "roman": roman}
if __name__ == "__main__":
main()
from urllib import request
import re
def main():
text = "私はIt is it.と書いた。"
json_text = request_furigana(text)
result = get_furigana(json_text)
print(result)
def request_furigana(text):
APPID = "" # <-- ここにあなたのClient ID(アプリケーションID)を設定してください。
URL = "https://jlp.yahooapis.jp/FuriganaService/V2/furigana"
text = text.strip()
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": text},
}
params = json.dumps(param_dic).encode()
req = request.Request(URL, params, headers)
with request.urlopen(req) as res:
body = res.read()
return body.decode()
def get_furigana(json_str):
rec = json.loads(json_str)
words = rec["result"]["word"]
furiganas = []
romans = []
for word in words:
if "furigana" in word:
furiganas.append(word["furigana"])
else:
temp = word["surface"]
if re.search(r"[あ‐んア-ン]", temp):
furiganas.append(temp)
elif re.search(r"[a-zA-Z]", temp):
furiganas.append(temp)
else:
furiganas.append("")
if "roman" in word:
romans.append(word["roman"])
else:
temp = word["surface"]
if re.search(r"[a-zA-Z]", temp):
romans.append(temp)
else:
romans.append("")
furigana = "".join(furiganas)
roman = "".join(romans)
roman = roman.lower()
return {"furigana": furigana, "roman": roman}
if __name__ == "__main__":
main()
実行結果
{
‘furigana’: ‘わたしはItisitとかいた’,
‘roman’: ‘watasihaitisittokaita’
}
説明
request_furiganaは結果をJSONで取得する関数です。
ほぼYahoo!のサンプルのとおりです。
get_furiganaはJSONから ふりがな と ローマ字 を取得する関数です。
元の目的が「漢字で入力した文字列をファイル名にしたい」だったのでローマ字も取得しています。
コメント