読者です 読者をやめる 読者になる 読者になる

juman json api

jumanがeuc-jpで解析されるので、強引にeuc-jpにする。これってインストールの時に指定できたかな?3年ぐらい前にインストールしてから使ってないしよくわからんw

#! /usr/bin/env perl

use JSON;

use Encode;
use Juman;
use utf8;

# 文字を全角変換
use Unicode::Japanese;

use IO::Handle;
use IPC::Open2;

use strict;
use warnings;

my $sentence = 'gadgetとしてサービスを提供する。';

#print Unicode::Japanese->new($sentence)->h2z->get, "\n";

# もし、予想外の例外が発生したら、evalでトラップする
my ($reader, $writer) = (IO::Handle->new, IO::Handle->new);
my $pid = open2($reader, $writer, 'juman -e2 -B');
binmode($writer, ':encoding(euc-jp)');

# Jumanはできるだけ全角で処理するのが望ましい
# Unicode::Japaneseモジュールで全角変換
print $writer decode('utf-8', Unicode::Japanese->new($sentence)->h2z->get);

$writer->close;

my @result = ();
while (<$reader>) {
  # euc-jpからutf-8へ変換
  push(@result, decode('euc-jp', $_));
}

$reader->close;

# 自分でプロセスを刈り取らないとゾンビになる
# ここで、プロセスを刈り取る
waitpid($pid, 0);

my $j_result = join("", @result);
#print "$j_result\n";
# Jumanを操作するオブジェクトをインスタンス化する
my $result = Juman::Result->new(result => $j_result);

# 解析に成功
if ($result) {
  my $js = JSON->new;
  my %result = ();

  my @mrph_list = $result->mrph_list;
  my @mrph_info_list = ();
  foreach my $mrph (@mrph_list) {
    my $daihyouhyouki = '';
    my $imis = $mrph->imis;
    if ($imis =~ /代表表記:(.+?)\"$/) {
      $daihyouhyouki = $1;
    }
    push(@mrph_info_list, {mrph_id => $mrph->id,
                           mrph_result => {
                                           midasi => $mrph->midasi,
                                           yomi => $mrph->yomi,
                                           genkei => $mrph->genkei,
                                           hinsi => $mrph->hinsi,
                                           imis => $mrph->imis,
                                           daihyouhyouki => $daihyouhyouki
                                          }
                          });
  }

  $result{"result"} = \@mrph_info_list;
  print "Content-type: application/json; charset=utf-8;\n\n";
  print encode('utf-8', $js->encode(\%result)), "\n";
} else {

}
広告を非表示にする