YahooAPI:ルビ振り

最終更新日時:2017-04-10 19:12:57
Perl Web:ルビ

概要


Yahoo デベロッパーネットワークで、ルビ振りの API が公開されています。
詳細は下記をどうぞ。

http://developer.yahoo.co.jp/webapi/jlp/furigana/v1/furigana.html

これを使用することにより、漢字にルビを振ることが簡単にできます。

なお、この API を使用するためにはアプリケーション ID が必要となります。
アプリケーション ID については、下記をどうぞ。

http://help.yahoo.co.jp/help/jp/developer/developer-06.html

使用例


以下、簡単な使用例です。

 use strict;
 use LWP::Simple;
 use XML::Simple;
 use Encode;
 
 my $appid = '********';  # アプリケーション ID を入手する必要があります
 my $y_url = 'http://jlp.yahooapis.jp/FuriganaService/V1/furigana?appid=%s&grade=%d&sentence=%s';
 
 while (<>) {
    chomp;
    unless ($_) {
        print "\n";
        next;
    }
 
    # 1行ずつ Yahoo API でルビを取得
    my $line = '';
    my $word = ruby($_);
 
    # 取得結果を使ってルビ表示を作成
    for my $w (@$word) {
        # 空白:この仕様は微妙
        if ( ref $w->{Surface} eq 'HASH' ) {
            $line .= ' ';
            next;
        }
        # かな混じり
        if ($w->{SubWordList}) {
            for my $s (@{$w->{SubWordList}->{SubWord}}) {
                $line .= $s->{Surface} eq $s->{Furigana} ? $s->{Surface} : $s->{Surface} . '(' . $s->{Furigana} . ')';
            }
            next;
        }
        # 無変換
        unless ($w->{Furigana}) {
            $line .= $w->{Surface};
        }
        # 通常変換
        else {
            $line .= $w->{Surface} . '(' . $w->{Furigana} . ')';
        }
    }
    print Encode::encode('utf8', $line), "\n";
 }
 
 sub ruby {
    my $line = shift;
 
    # ルビ振り対象文字列はエンコードする
    $line =~ s/([^ 0-9A-Za-z])/sprintf("%%%.2X", ord($1))/eg;
    $line =~ tr/ /+/;
 
    # グレード指定 1 ~ 8
    my $grade = 1;
 
    # Yahoo API 呼び出し
    my $url = sprintf($y_url, $appid, $grade, $line);
    my $response = get($url);
    return undef unless $response;
 
    # 結果は XML で返ってくる
    my $xmlsimple = XML::Simple->new(ForceArray => [ 'Word' ]);
    my $xml = $xmlsimple->XMLin($response);
    return $xml->{Result} ? $xml->{Result}->{WordList}->{Word} : undef;
 }


ルビ振りツール


簡単なものを作ってみました(/_\;)
ルビ振りツール

お問い合わせは 掲示板 にて。