YahooAPI:ルビ振り
概要
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; }
ルビ振りツール
簡単なものを作ってみました(/_\;)
ルビ振りツール