古い記事
ランダムジャンプ
新しい記事
とある経緯で、Yahoo!日本語形態素解析API[2007-06-18-1]を使った Perl のサンプルプログラムを作りました。
車輪の再発明的ですが(だれか作ってた気がする)気にしない!

- Yahoo!デベロッパーネットワーク - テキスト解析 - 日本語形態素解析
http://developer.yahoo.co.jp/jlp/MAService/V1/parse.html

以下コードです:
#!/usr/bin/perl
use strict;
use warnings;
use Encode;
use URI::Escape;
use LWP::Simple;
use XML::Simple;
use Getopt::Long;
use utf8;
use open ':utf8';
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";

my $appid = "YahooDemo";

my %opt = ();
GetOptions(\%opt, "results=s", "response=s", "filter=s",
           "ma_response=s", "ma_filter=s",
           "uniq_response=s", "uniq_filter=s",
           "uniq_by_baseform=s");

my $param_results = $opt{'results'} || "ma";
my $param_response = $opt{'response'} || "surface,pos";
my $param_filter = $opt{'filter'} || "";
my $param_ma_response = $opt{'ma_response'} || "";
my $param_ma_filter = $opt{'ma_filter'} || "";
my $param_uniq_response = $opt{'uniq_response'} || "";
my $param_uniq_filter = $opt{'uniq_filter'} || "";
my $param_uniq_by_baseform = $opt{'uniq_by_baseform'} || "";

while (<>) {
    chomp;
    my $xml_ref = webma($_);
    foreach my $v ("ma_result", "uniq_result") {
        next unless $xml_ref->{$v};
        foreach my $i (@{$xml_ref->{$v}->{word_list}->{word}}) {
            print join("\t", map {$i->{$_}} keys %$i), "\n";
        }
    }
}

sub webma {
    my ($key) = @_;
    return {} unless $key;
    my $url = "http://jlp.yahooapis.jp/MAService/V1/parse"
        ."?appid=$appid"
        ."&results=$param_results"
        ."&response=$param_response"
        ."&filter=$param_filter"
        ."&ma_response=$param_ma_response"
        ."&ma_filter=$param_ma_filter"
        ."&uniq_response=$param_uniq_response"
        ."&uniq_filter=$param_uniq_filter"
        ."&uniq_by_baseform=$param_uniq_by_baseform"
        ."&sentence=".URI::Escape::uri_escape_utf8($key);
    my $response = get($url);
    my $xmlsimple = XML::Simple->new(ForceArray => [ 'word' ]);
    return $xmlsimple->XMLin($response);
}

実行例:
% cat a.txt          
これは六本木の赤いペンです。
% ./yapima.pl --response=surface,pos,reading < a.txt 
これ    名詞    これ
は      助詞    は
六本木  名詞    ろっぽんぎ
の      助詞    の
赤い    形容詞  あかい
ペン    名詞    ぺん
です    助動詞  です
。      特殊    。

文字コードは入力も出力も UTF-8 です。
文字化けする場合は「binmode STDOUT, ":utf8";」を削って
お試しください。

追記140529: APIのURLが古いままだったので変更。
- 旧:api.jlp.yahoo.co.jp
- 新:jlp.yahooapis.jp