Yahoo!デベロッパーネットワーク(YDN)に
「日本語係り受け解析Webサービス」が登場しました。
「係り受けってなに?」という方もいると思うので、
以下、まったくもって厳密ではない、適当な解説を試みます。
(1) 日本語をコンピューターで処理するには、
まず形態素解析というのをやって、
文を形態素(≒単語)単位に分割します。
YDN の「日本語形態素解析Webサービス」[2007-06-18-1]
で試すことができます。
例えば、
(2) 次に、文節、つまり「〜ね」で切れる単位にまとめあげます。
「私はね、パソコンをね、買った」
といった具合に「〜ね」で区切れる単位です。
(3) この文節の係る先を推定するのが係り受け解析です。
「XがYした」(俺が試した)、「XなYだ」(きれいな写真だ)
のような、文章の基本的な構造を取り出すのです。
「日本語係り受け解析Webサービス」を使うと、
先の例では、
すごく大雑把ですけど、係り受け解析がなんなのか、
なんとなくでも分かって頂けたでしょうか?
係り受け解析は、機械翻訳、文章要約、意図理解など、
深くて高度な自然言語処理に利用されています。
言語を自由にあやつる人工知能を作るには必須の技術なのですよ!
§
で、「日本語係り受け解析Webサービス」を使うと、
どんなことができるのでしょうか?
ということで、簡単なサンプルプログラムを作ってみました。
「なんちゃって文章要約」です。
「こんな私の故郷は非常に良い場所なのです。」
という文を、係り受け解析を使って、
「故郷は良い場所なのです。」と要約します。
「なんちゃって文章要約」では、
どこにも係らない文節を「ベース」とし、
それに直接係る文節だけを残し、他を削除することで、
「文章要約」しています。
「こんな私の故郷は非常に良い場所なのです。」
の係り受け関係は、
ベースとなる文節は「場所なのです。」(係られているだけで、
どこにも係っていない)で、
それに直接係っている文節は「故郷は」と「良い」だけなので、
要約文は「故郷は良い場所なのです。」になります。
以下、Perl によるプログラム youyaku.pl と実行結果です。
■コード (youyaku.pl):
(http://e.developer.yahoo.co.jp/webservices/register_application)
■実行結果:
「なんちゃって」文章要約ですのでー!
「日本語係り受け解析Webサービス」が登場しました。
- Yahoo!デベロッパーネットワーク - テキスト解析 - 日本語係り受け解析
http://developer.yahoo.co.jp/jlp/DAService/V1/parse.html
「係り受けってなに?」という方もいると思うので、
以下、まったくもって厳密ではない、適当な解説を試みます。
(1) 日本語をコンピューターで処理するには、
まず形態素解析というのをやって、
文を形態素(≒単語)単位に分割します。
YDN の「日本語形態素解析Webサービス」[2007-06-18-1]
で試すことができます。
例えば、
「私はパソコンを買った」という文章は、形態素解析すると、
「私」「は」「パソコン」「を」「買った」と分割されます。
(2) 次に、文節、つまり「〜ね」で切れる単位にまとめあげます。
「私」「は」「パソコン」「を」「買った」と文節にまとめると
「私は」「パソコンを」「買った」となります。
「私はね、パソコンをね、買った」
といった具合に「〜ね」で区切れる単位です。
(3) この文節の係る先を推定するのが係り受け解析です。
「XがYした」(俺が試した)、「XなYだ」(きれいな写真だ)
のような、文章の基本的な構造を取り出すのです。
「日本語係り受け解析Webサービス」を使うと、
先の例では、
「私は」→「買った」という係り受け関係が抽出できます。
「パソコンを」→「買った」
すごく大雑把ですけど、係り受け解析がなんなのか、
なんとなくでも分かって頂けたでしょうか?
係り受け解析は、機械翻訳、文章要約、意図理解など、
深くて高度な自然言語処理に利用されています。
言語を自由にあやつる人工知能を作るには必須の技術なのですよ!
§
で、「日本語係り受け解析Webサービス」を使うと、
どんなことができるのでしょうか?
ということで、簡単なサンプルプログラムを作ってみました。
「なんちゃって文章要約」です。
「こんな私の故郷は非常に良い場所なのです。」
という文を、係り受け解析を使って、
「故郷は良い場所なのです。」と要約します。
「なんちゃって文章要約」では、
どこにも係らない文節を「ベース」とし、
それに直接係る文節だけを残し、他を削除することで、
「文章要約」しています。
「こんな私の故郷は非常に良い場所なのです。」
の係り受け関係は、
「こんな」→「私の」となります。
「私の」→「故郷は」
「故郷は」→「場所なのです。」
「非常に」→「良い」
「良い」→「場所なのです。」
ベースとなる文節は「場所なのです。」(係られているだけで、
どこにも係っていない)で、
それに直接係っている文節は「故郷は」と「良い」だけなので、
要約文は「故郷は良い場所なのです。」になります。
以下、Perl によるプログラム youyaku.pl と実行結果です。
■コード (youyaku.pl):
$appid は自分で取得したものを使ってくださいね。#!/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); }
(http://e.developer.yahoo.co.jp/webservices/register_application)
■実行結果:
「要約になってないじゃないか!」と言われても困ります。% cat a.txt こんな私の故郷は非常に良い場所なのです。 つまり、これはパソコンですが、こういうのは基本的に買うとダメ。 昨今の経済状況を考慮すると、セレブとの豪華なディナーはいかがなものか。 % ./youyaku.pl a.txt こんな私の故郷は非常に良い場所なのです。 SUMMARY: 故郷は良い場所なのです。 つまり、これはパソコンですが、こういうのは基本的に買うとダメ。 SUMMARY: パソコンですが、買うとダメ。 昨今の経済状況を考慮すると、セレブとの豪華なディナーはいかがなものか。 SUMMARY: 考慮すると、ディナーはいかがなものか。
「なんちゃって」文章要約ですのでー!
参考文献
- Yahoo!デベロッパーネットワークにテキスト解析APIが登場![2007-06-18-1]
- Wikipedia:構文解析
- CaboCha http://chasen.org/~taku/software/cabocha/
- ローカル環境で係り受け解析器を動かしたい人にはこれ!#1
- KNP http://nlp.kuee.kyoto-u.ac.jp/nl-resource/knp.html
- ローカル環境で係り受け解析器を動かしたい人にはこれ!#2
この記事に言及しているこのブログ内の記事
- 【ヲハニュース 2016年7月22日号】今日開始のKindle本セール「グラビア夏祭り」「999円ITビジネス書」「夏コミック第3弾」等、Googleクラウド自然言語API、なぜ研究進まない、なぜ論文書けない、など (2016-07-22)
- 「ウェブサービスを使ったテキストマイニングとサービス適用」のURLリスト (2010-01-26)
- Yahoo!のコマース系APIなどの紹介プレゼンで出てきたURLのリスト (2009-10-26)
- よりぬき「たつをの ChangeLog」2008年 (2009-04-20)
- ルビ振りAPIで漢字混じり日本語文をひらがな文に変換 (2008-11-19)
- ルビ振りAPIで「ふりがな」を付けよう! (2008-10-11)
- Yahoo!ショッピングのコンテンツマッチAPIが登場! (2008-08-28)