古い記事
ランダムジャンプ
新しい記事
Yahoo!デベロッパーネットワークの「ルビ振りAPI」の簡単な解説とサンプルプログラムの紹介を、先日の記事[2008-10-11-2]で行いました。
今回は、別なサンプルプログラムとして、漢字混じりの日本語文を平仮名だけの文に変換するプログラムを紹介します。

- Yahoo!デベロッパーネットワーク - テキスト解析 - ルビ振り
http://developer.yahoo.co.jp/jlp/FuriganaService/V1/furigana.html
ルビ振りWebサービス
漢字かな交じり文に、ひらがなとローマ字のふりがな(ルビ)を付けます。

で、詳細ははぶいていきなりコードです。

言語は Perl です。
XML::Simple の性質上、若干バッドノウハウが混じっています。
すいません。

yomibun.pl
#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;
use XML::Simple;
use URI::Escape;
use Encode;
use utf8;
use open ':utf8';
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";

my $appid = "YahooDemo";

while (<>) {
    chomp;
    next unless $_;
    my $r_ref = yapi({sentence => $_});
    my $yomibun = "";
    foreach my $w (@$r_ref) {
        my $c = $w->{Furigana} || $w->{Surface};
        $c = " " if ref($c) eq "HASH"; # space
        $yomibun .= $c;
    }
    $yomibun =~ tr/ァ-ン/ぁ-ん/;
    print "$yomibun\n";
}

sub yapi {
    my ($args_ref) = @_;
    my $s = URI::Escape::uri_escape_utf8($args_ref->{sentence}) || "";
    my $g = $args_ref->{grade} || 1;
    return [] unless $s;
    my $url = "http://jlp.yahooapis.jp/FuriganaService/V1/furigana?"
        ."appid=$appid&grade=$g&sentence=$s";
    my $response = get($url);
    return [] unless $response;
    my $xmlsimple = XML::Simple->new(ForceArray => [ 'Word' ]);
    my $xml = $xmlsimple->XMLin($response);
    return [] unless $xml->{Result};
    return $xml->{Result}->{WordList}->{Word};
}
$appid は自分で取得したものを使ってくださいね。
(http://e.developer.yahoo.co.jp/webservices/register_application)

基本は Furigana の文字列を繋げていくのですが、Furigana がない Word は代わりに Surface を使います。

なお、カタカナ語は、ひらがなのルビが付かないので、内部でカタカナひらがな変換(tr/ァ-ン/ぁ-ん/)をしています。

実行例です。
% cat a.txt 
これはマネー本で、Perl の教科書ではない。
祇園精舎の鐘の声 諸行無常の響きあり
% ./yomibun.cgi a.txt 
これはまねーぼんで、Perl のきょうかしょではない。
ぎおんしょうじゃのかねのこえ しょぎょうむじょうのひびきあり

もちろん、形態素解析APIを使っても良いのですが(「読み」の部分を取ってくる)、せっかく専用のルビ振りAPIがあるのでそれを使うことをオススメします。

あと、APIに、文章渡すとそのまま平仮名文がかえってくるオプションがあれば手軽でいいのになあ、とも思いますっ!

テキスト解析シリーズAPIの解説記事


- ルビ振りAPI
-- [を] ルビ振りAPIで「ふりがな」を付けよう![2008-10-11-2]

- 日本語形態素解析
-- [を] Yahoo!デベロッパーネットワークにテキスト解析APIが登場![2007-06-18-1]
-- [を] Yahoo!日本語形態素解析APIをコマンドラインから使うサンプルプログラム[2008-04-05-5]

- 日本語係り受け解析
-- [を] ヤフーの日本語係り受け解析APIとサンプルプログラム「なんちゃって文章要約」[2008-08-21-1]

- かな漢字変換、構成支援
-- [を] Yahoo! API の「校正支援」と「かな漢字変換」のサンプルプログラムを作ったよ[2008-07-11-1]