古い記事
ランダムジャンプ
新しい記事
Yahoo!デベロッパーネットワーク(YDN)に
「日本語係り受け解析Webサービス」が登場しました。


「係り受けってなに?」という方もいると思うので、
以下、まったくもって厳密ではない、適当な解説を試みます。

(1) 日本語をコンピューターで処理するには、
まず形態素解析というのをやって、
文を形態素(≒単語)単位に分割します。
YDN の「日本語形態素解析Webサービス」[2007-06-18-1]
で試すことができます。
例えば、
「私はパソコンを買った」
という文章は、形態素解析すると、
「私」「は」「パソコン」「を」「買った」
と分割されます。

(2) 次に、文節、つまり「〜ね」で切れる単位にまとめあげます。
「私」「は」「パソコン」「を」「買った」
と文節にまとめると
「私は」「パソコンを」「買った」
となります。
「私はね、パソコンをね、買った」
といった具合に「〜ね」で区切れる単位です。

(3) この文節の係る先を推定するのが係り受け解析です。
「XがYした」(俺が試した)、「XなYだ」(きれいな写真だ)
のような、文章の基本的な構造を取り出すのです。
「日本語係り受け解析Webサービス」を使うと、
先の例では、
「私は」→「買った」
「パソコンを」→「買った」
という係り受け関係が抽出できます。

すごく大雑把ですけど、係り受け解析がなんなのか、
なんとなくでも分かって頂けたでしょうか?

係り受け解析は、機械翻訳、文章要約、意図理解など、
深くて高度な自然言語処理に利用されています。
言語を自由にあやつる人工知能を作るには必須の技術なのですよ!

§

で、「日本語係り受け解析Webサービス」を使うと、
どんなことができるのでしょうか?
ということで、簡単なサンプルプログラムを作ってみました。
「なんちゃって文章要約」です。

「こんな私の故郷は非常に良い場所なのです。」
という文を、係り受け解析を使って、
「故郷は良い場所なのです。」と要約します。

「なんちゃって文章要約」では、
どこにも係らない文節を「ベース」とし、
それに直接係る文節だけを残し、他を削除することで、
「文章要約」しています。

「こんな私の故郷は非常に良い場所なのです。」
の係り受け関係は、
「こんな」→「私の」
「私の」→「故郷は」
「故郷は」→「場所なのです。」
「非常に」→「良い」
「良い」→「場所なのです。」
となります。
ベースとなる文節は「場所なのです。」(係られているだけで、
どこにも係っていない)で、
それに直接係っている文節は「故郷は」と「良い」だけなので、
要約文は「故郷は良い場所なのです。」になります。

以下、Perl によるプログラム youyaku.pl と実行結果です。

■コード (youyaku.pl):
#!/usr/bin/perl
use strict;
use warnings;
use URI::Escape;
use LWP::Simple;
use XML::Simple;

my $appid = "YahooDemo";

while (<>) {
    chomp;
    my $xml_ref = dana($_);
    next unless $xml_ref->{Result} and $xml_ref->{Result}->{ChunkList};
    my @morphs;
    my @froms;
    my $base_id = -1;
    foreach my $c (@{$xml_ref->{Result}->{ChunkList}->{Chunk}}) {
        if ($c->{Dependency} >= 0) {
            push @{$froms[$c->{Dependency}]}, $c->{Id};
        } else {
            $base_id = $c->{Id};
        }
        next unless $c->{MorphemList};
        my $str = join("", map {$_->{Surface}}
                       @{$c->{MorphemList}->{Morphem}});
        $morphs[$c->{Id}] = $str;
    }
    next if $base_id == -1;
    print "$_\nSUMMARY: ", @morphs[@{$froms[$base_id]}],
        $morphs[$base_id], "\n\n";
}

sub dana {
    my ($key) = @_;
    return {} unless $key;
    my $url = "http://jlp.yahooapis.jp/DAService/V1/parse"
        ."?appid=$appid"
        ."&sentence=".URI::Escape::uri_escape($key);
    my $response = get($url);
    my $xmlsimple = XML::Simple->new(ForceArray => [ 'Chunk', 'Morphem' ]);
    return $xmlsimple->XMLin($response);
}
$appid は自分で取得したものを使ってくださいね。
(http://e.developer.yahoo.co.jp/webservices/register_application)

■実行結果:
% cat a.txt
こんな私の故郷は非常に良い場所なのです。
つまり、これはパソコンですが、こういうのは基本的に買うとダメ。
昨今の経済状況を考慮すると、セレブとの豪華なディナーはいかがなものか。

% ./youyaku.pl a.txt
こんな私の故郷は非常に良い場所なのです。
SUMMARY: 故郷は良い場所なのです。

つまり、これはパソコンですが、こういうのは基本的に買うとダメ。
SUMMARY: パソコンですが、買うとダメ。

昨今の経済状況を考慮すると、セレブとの豪華なディナーはいかがなものか。
SUMMARY: 考慮すると、ディナーはいかがなものか。

「要約になってないじゃないか!」と言われても困ります。
「なんちゃって」文章要約ですのでー!


参考文献