Hatena::Grouptwitter

smokeymonkey@ついったー部 RSSフィード

 | 

2008-01-29

Yahoo!デベロッパーネットワークの「日本語形態素解析Webサービス」を使ってみる。

15:38 | Yahoo!デベロッパーネットワークの「日本語形態素解析Webサービス」を使ってみる。 - smokeymonkey@ついったー部 を含むブックマーク はてなブックマーク - Yahoo!デベロッパーネットワークの「日本語形態素解析Webサービス」を使ってみる。 - smokeymonkey@ついったー部

昨日の作業をしている間に、@kiyosickさんに教えてもらった

Yahoo!デベロッパーネットワーク - テキスト解析 - 日本語形態素解析

を使って遊んでみました。

#!/usr/bin/perl

use strict;
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;
use XML::DOM;
use Jcode;

sub main {
  my $rest = 'http://api.jlp.yahoo.co.jp/MAService/V1/parse?appid=dabesa&results=ma&response=surface,reading,pos,baseform,feature&sentence=';

  my $text = '形態素解析とは、コンピュータ等の計算機を用いた自然言語処理の基礎技術のひとつ。かな漢字変換等にも応用されている。';
  Jcode::convert(\$text,"utf8");
  my $urltxt = &encurl($text);
  my $URL = $rest.$urltxt;

  my $proxy = new LWP::UserAgent;
  my $req = HTTP::Request->new('GET' => $URL);
  my $res = $proxy->request($req);

  if ($res->is_success) {
    my $parser = new XML::DOM::Parser;
    my $doc = $parser->parsefile($URL); 
    my $nodelist = $doc->getElementsByTagName("word");
    my @surface = ();
    my @reading = ();
    my @pos = ();
    my @baseform = ();
    my @feature = ();
    for (my $i=0; $i<$nodelist->getLength; $i++) {
      my $node = $nodelist->item($i); 
      $surface[$i] = $node->getElementsByTagName("surface")->item(0)->getFirstChild->getNodeValue;
      $reading[$i] = $node->getElementsByTagName("reading")->item(0)->getFirstChild->getNodeValue;
      $pos[$i] = $node->getElementsByTagName("pos")->item(0)->getFirstChild->getNodeValue;
      $baseform[$i] = $node->getElementsByTagName("baseform")->item(0)->getFirstChild->getNodeValue;
      $feature[$i] = $node->getElementsByTagName("feature")->item(0)->getFirstChild->getNodeValue;
    }
    for (my $i=0; $i<$nodelist->getLength; $i++) {
      my $word = "$surface[$i],$reading[$i],$pos[$i],$baseform[$i],$feature[$i]\n";
      Jcode::convert(\$word,"utf8");
      print $word;
    }
  } else {
    print "IS_ERROR\n";
  }
  
}

sub encurl($) {
  my $str = shift;
  $str =~ s/([^\w])/'%'.unpack('H2', $1)/eg;
  $str =~ tr/ /+/;
  return $str;
}

eval {&main(@ARGV)};
print "ERROR\n" if $@;

exit;

結果は

形態素,けいたいそ,名詞,形態素,名詞,名詞,*,形態素,けいたいそ,形態素
解析,かいせき,名詞,解析,名詞,名サ他,*,解析,かいせき,解析
と,と,助詞,と,助詞,格助詞,*,と,と,と
は,は,助詞,は,助詞,係助詞,*,は,は,は
、,、,特殊,、,特殊,読点,*,、,、,、
コンピュータ,こんぴゅーた,名詞,コンピュータ,名詞,名詞,*,コンピュータ,こんぴゅーた,コンピュータ
等,など,助詞,等,助詞,副助詞,*,等,など,等
の,の,助詞,の,助詞,助詞連体化,*,の,の,の
計算機,けいさんき,名詞,計算機,名詞,名詞,*,計算機,けいさんき,計算機
を,を,助詞,を,助詞,格助詞,*,を,を,を
用い,もちい,動詞,用いる,動詞,一段,連用形,用い,もちい,用いる
た,た,助動詞,た,助動詞,助動詞た,基本形,た,た,た
自然,しぜん,名詞,自然,名詞,名形,*,自然,しぜん,自然
言語,げんご,名詞,言語,名詞,名詞,*,言語,げんご,言語
処理,しょり,名詞,処理,名詞,名サ他,*,処理,しょり,処理
の,の,助詞,の,助詞,助詞連体化,*,の,の,の
基礎,きそ,接頭辞,基礎,接頭辞,接頭,*,基礎,きそ,基礎
技術,ぎじゅつ,名詞,技術,名詞,名詞,*,技術,ぎじゅつ,技術
の,の,助詞,の,助詞,助詞連体化,*,の,の,の
ひとつ,ひとつ,名詞,ひとつ,名詞,数詞特殊,*,ひとつ,ひとつ,ひとつ
。,。,特殊,。,特殊,句点,*,。,。,。
かな漢字,かなかんじ,名詞,かな漢字,名詞,名詞,*,かな漢字,かなかんじ,かな漢字
変換,へんかん,名詞,変換,名詞,名サ他,*,変換,へんかん,変換
等,など,助詞,等,助詞,副助詞,*,等,など,等
に,に,助詞,に,助詞,格助詞,*,に,に,に
も,も,助詞,も,助詞,係助詞,*,も,も,も
応用,おうよう,名詞,応用,名詞,名サ自,*,応用,おうよう,応用
さ,さ,助動詞,する,助動詞,助動詞する,未然レル接続,さ,さ,する
れ,れ,助動詞,れる,助動詞,助動詞一段,連用形,れ,れ,れる
て,て,助詞,て,助詞,接続助詞,*,て,て,て
いる,いる,助動詞,いる,助動詞,助動詞一段,基本形,いる,いる,いる
。,。,特殊,。,特殊,句点,*,。,。,。

これはなかなか良いサービスですね。MeCabの代わりにも充分使えそう。

 |