PythonでYahoo!のルビ振りを使う方法

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()

実行結果

{
‘furigana’: ‘わたしはItisitとかいた’,
‘roman’: ‘watasihaitisittokaita’
}

説明

request_furiganaは結果をJSONで取得する関数です。
ほぼYahoo!のサンプルのとおりです。

get_furiganaはJSONから ふりがな と ローマ字 を取得する関数です。
元の目的が「漢字で入力した文字列をファイル名にしたい」だったのでローマ字も取得しています。

コメント

タイトルとURLをコピーしました