Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Yahoo!デベロッパーネットワークで、ちょっと前に「ルビ振りAPI」が公開されました。

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

この記事では、その特徴と簡単なサンプルプログラムを紹介します。

特徴


ふりがなを付けるだけなら形態素解析API[2008-04-05-5]
を使ってもよいのですが、このルビ振りAPIは
対象とする漢字グループを選択できるところがポイントです。
例えば、小学N年生向けを選択すると(N-1)年生までに習う
漢字にはふりがなが付かなくなります。

対象グループは、パラメータ grade で指定します。
grade=1小学1年生向け。全漢字にふりがな。
grade=2小学2年生向け。
grade=3小学3年生向け。
grade=4小学4年生向け。
grade=5小学5年生向け。
grade=6小学6年生向け。
grade=7中学生以上向け。
grade=8一般向け。常用漢字はふりがな無し。

例えば、「拉致被害者を救済する」という文を
小学1年生向け(grade=1)で処理すると
全てにふりがなが付きますが、
一般向け(grade=8)で処理すると
「拉致」のみにふりがなが付きます。

サンプル


Perl で簡単なサンプル CGI を作りました。
フォームを仮設置したので、
適当な日本語文を入れてお試しください。

- ルビ振りデモ
http://yapi.ta2o.net/demos/yyomi.cgi

以下、CGI のソースコードです。

■コード:
#!/usr/bin/perl -T
use strict;
use warnings;
use CGI;
use LWP::Simple;
use XML::Simple;
use HTML::Template;
use URI::Escape;
use Encode;
use utf8;
binmode STDOUT, ":utf8";

my $appid = "YahooDemo";

my $q = new CGI;
my $sentence = $q->param('sentence') || "";
my $grade = $q->param('grade') || 1;

my $r_ref = yapi({sentence => $sentence, grade => $grade});

my $template = join("", <DATA>);
my $t = HTML::Template->new(scalarref => \$template,
			    global_vars => 1,
                            die_on_bad_params => 0);
$t->param(sentence => decode('utf-8', $sentence));
$t->param(grade => $grade);
$t->param(results => $r_ref);

print $q->header(-charset => 'UTF-8'), $t->output();

sub yapi {
    my ($args_ref) = @_;
    my $s = URI::Escape::uri_escape($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};
}

__DATA__
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ルビ振りデモ</title>
</head>
<body>
<h1>ルビ振りデモ</h1>
<form>
<input type="input" name="sentence" size="60" value="<TMPL_VAR name=sentence>">
<input type="input" name="grade" size="1" value="<TMPL_VAR name=grade>">
<input type="submit">
</form>
<TMPL_LOOP name=results><TMPL_VAR name=Surface><TMPL_IF 
name=Furigana>(<TMPL_VAR name=Furigana>, 
<TMPL_VAR name=Roman>)</TMPL_IF></TMPL_LOOP>
<hr>
<a href="http://developer.yahoo.co.jp/about">Webサービス by Yahoo! JAPAN</a>
</body>
</html>
$appid は自分で取得したものを使ってくださいね。
(http://e.developer.yahoo.co.jp/webservices/register_application)

なお、入力文に半角スペースが入っていると、
表示が変になりますがサンプルなので気にせずにー!

おわりに


今回は、
Yahoo!デベロッパーネットワーク (YDN) から出ている
自然言語処理系(テキスト解析系)APIの一つである
ルビ振りAPIを紹介しました。

テキスト解析シリーズの他のAPIの解説記事は下記になります:

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

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

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