2009年05月22日 20:30 [Edit]

この記事をクリップ! newsing it! Buzzurlにブックマーク b.hatena.ne.jp/entry perl - SayKanji + Yahoo API = itte.pl

camel

というわけで、私も作ってみた。

% itte.pl '小飼弾ってちゃんと読んでくれるよ!'
% itte.pl 'Englishが混じってもOKだよ!'

以下、ソース。

#!/usr/local/bin/perl
#
# $Id: itte.pl,v 0.1 2009/05/22 10:12:26 dankogai Exp dankogai $
#
use strict;
use warnings;
use URI;
use LWP::Simple;
use XML::Simple;

my $appid = 'your.api';    # customize here
my $apiroot = 'http://jlp.yahooapis.jp/FuriganaService/V1/furigana';

sub yomi {
    my $str = shift;
    my $uri = URI->new($apiroot);
    $uri->query_form(
        appid    => $appid,
        sentence => $str,
    );
    return unless my $res = get($uri);
    my $word = XMLin($res)->{Result}{WordList}{Word};
    # use Data::Dumper;
    # print Dumper $word;
    map { $_->{Furigana} || $_->{Surface} }
      grep { !ref $_->{Surface} } 
	  (ref $word eq 'ARRAY' ? @$word : $word);
}

my $str = @ARGV > 1 && $ARGV[-2] eq '-f' ? do{
    local $/;
    my ($f, $fn) = splice @ARGV, -2;
    open my $fh, '<', $fn or die "$fn:$!";
    my $s = <$fh>;
    close $fh;
    $s;
} : pop @ARGV;

for my $word ( yomi($str) ) {
    # warn $word;
    my $say = $word =~ /\A[\d\x{80}-\x{10ffff}]+\z/ ? 'SayKana' : 'say';
    system $say, @ARGV, $word;
}

一番の違いは、形態素解析にMeCabではなくYahoo!デベロッパーネットワーク - テキスト解析 - ルビ振りを使っていることと、アルファベット部分は英語で読み上げること。前者のおかげで「小飼弾」もちゃんと読んでくれる。後者は音声が変わっちゃうのだけど、それがかえって面白い。

Enjoy!

Dan the Perl Monger


この記事へのトラックバックURL

この記事へのソーシャルブックマーク
はてなブックマーク
Livedoorクリップ
0 Buzzurl
この記事へのトラックバック
MacOS Xには英語版Text To Speachを行うsayコマンドが搭載されています。これを使っても、疑似日本語を喋らせる事が可能なのですが、もっとちゃんと日本語として喋る日本語Text To Speachが「SayKana」です。 結構優れているなと思ったのは、アクセントだけじゃなくて数字...
SayKana【わだつみ】at 2009年05月23日 17:17