/usr/share/perl5/Juman.pm is in libjuman-perl 7.0-3.4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 | # $Id: Juman.pm,v 1.9 2011/07/01 05:13:29 kawahara Exp $
package Juman;
require 5.004_04; # For base pragma.
use Carp;
use Juman::Result;
use strict;
use vars qw/ $VERSION %DEFAULT $ENCODING /;
use base qw/ Juman::Process Juman::Hinsi /;
=head1 NAME
Juman - 形態素解析を行うモジュール
=head1 SYNOPSIS
use Juman;
$juman = new Juman;
$result = $juman->analysis( "この文を形態素解析してください." );
print $result->all();
=head1 DESCRIPTION
C<Juman> は,形態素解析器 JUMAN を Perl から利用するためのモジュールで
ある.
単純に形態素解析を行うだけならば、C<Juman::Simple> が利用できる.
C<Juman::Simple> は,C<Juman> モジュールのラッパーであり,より簡単に形
態素解析器を利用できるように設計されている.
=head1 CONSTRUCTOR
C<Juman> オブジェクトを生成するコンストラクタは,以下の引数を受け付け
る.
=head2 Synopsis
$juman = new Juman
[ -Server => string,]
[ -Port => integer,]
[ -Command => string,]
[ -Timeout => integer,]
[ -Option => string,]
[ -Rcfile => filename,]
[ -IgnorePattern => string,]
=head2 Options
=over 4
各引数の意味は次の通り.
=item -Server
JUMAN サーバーのホスト名.省略された場合は,環境変数 C<JUMANSERVER> で
指定されたサーバーが利用される.環境変数も指定されていない場合は,
Juman を子プロセスとして呼び出す.
=item -Port
サーバーのポート番号.
=item -Command
Juman の実行ファイル名.Juman サーバーを利用しない場合に参照される.
=item -Timeout
サーバーまたは子プロセスと通信する時の待ち時間.
=item -Option
JUMAN を実行する際のコマンドライン引数.省略した場合は,
C<$Juman::DEFAULT{option}> の値が用いられる.
ただし,設定ファイルを指定する C<-r> オプションと,KNP によって無視さ
れる行頭パターンを指定する C<-i> オプションについては,それぞれ個別に
C<-Rcfile>, C<-IgnorePattern> によって指定するべきである.
=item -Rcfile
JUMAN の設定ファイルを指定するオプション.
このオプションと,Juman サーバーの利用は両立しないことが多い.特に,サー
バーが利用している辞書と違う辞書を指定している設定ファイルは,意図した
通りには動作しない.
=item -IgnorePattern
JUMAN によって無視される行頭パターン.
=back
=head1 METHODS
=over 4
=item analysis( STR )
指定された文字列 STR を形態素解析し,その結果を C<Juman::Result> オブ
ジェクトとして返す.
=item juman ( STR )
C<analysis> の別名.
=back
=head1 ENVIRONMENT
=over 4
=item JUMANSERVER
環境変数 C<JUMANSERVER> が設定されている場合は,指定されているホストを
Juman サーバーとして利用する.
=back
=head1 SEE ALSO
=over 4
=item *
L<Juman::Result>
=item *
L<Juman::Simple>
=back
=head1 HISTORY
This module is the completely rewritten version of the original module
written by Taku Kudoh <taku-ku@is.aist-nara.ac.jp>.
=head1 AUTHOR
=over 4
=item
TSUCHIYA Masatoshi <tsuchiya@pine.kuee.kyoto-u.ac.jp>
=back
=head1 COPYRIGHT
利用及び再配布については GPL2 または Artistic License に従ってください。
=cut
# バージョン表示
$VERSION = '0.5.7';
# JUMANコマンドの入出力エンコーディング
$ENCODING = 'utf8';
# カスタマイズ用変数
%DEFAULT =
( command => &Juman::Process::which_command('juman'),
server => $ENV{JUMANSERVER} || '', # Juman サーバーのホスト名
port => 32000, # Juman サーバーのポート番号
timeout => 30, # Juman サーバーの応答の待ち時間
option => '-e2 -B',
rcfile => (exists($ENV{HOME}) ? $ENV{HOME} : '') . '/.jumanrc',
mclass => $Juman::Result::DEFAULT{mclass},
ignorepattern => '',
);
# Juman を子プロセスとして実行する場合,標準出力のバッファリングによっ
# て出力が二重にならないようにするためのおまじない
sub BEGIN {
unless( $DEFAULT{server} ){
require FileHandle or die "Juman.pm (BEGIN): Can't load module: FileHandle\n";
STDOUT->autoflush(1);
}
}
sub new {
my $class = shift @_;
my $this = {};
bless $this, $class;
if( @_ == 1 ){
# 旧バージョンの形式で呼び出された場合の処理
my( $argv ) = @_;
$this->setup( $argv, \%DEFAULT );
# $this->setup( { 'option' => $argv }, \%DEFAULT );
} else {
# 新しい形式で呼び出された場合の処理
my( %option ) = @_;
$this->setup( \%option, \%DEFAULT );
}
if( $this->{OPTION}->{rcfile} and $this->{OPTION}->{server} ){
carp "Rcfile option may not work with Juman server";
}
$this;
}
# EUC-JPの3バイトコードを〓に変換
sub conv_3bytecode_to_geta {
my ($buf) = @_;
my ($ret_buf);
while ($buf =~ /([^\x80-\xfe]|[\x80-\x8e\x90-\xfe][\x80-\xfe]|\x8f[\x80-\xfe][\x80-\xfe])/g) {
my $chr = $1;
if ($chr =~ /^\x8f/) { # 3byte code (JISX0212)
$ret_buf .= '〓';
}
else {
$ret_buf .= $chr;
}
}
return $ret_buf;
}
sub juman_lines {
my( $this, $str ) = @_;
my $socket = $this->open();
my $pattern = $this->pattern();
my @buf;
# UTFフラグをチェックする
if (utf8::is_utf8($str)) {
require Encode;
if ($ENCODING eq 'euc-jp') {
# euc-jpにない文字とJISX0212補助漢字(3バイト)は〓に変換
$str = &conv_3bytecode_to_geta(Encode::encode($ENCODING, $str, sub {'〓'}));
}
else { # UTF-8のはず
$str = Encode::encode($ENCODING, $str);
}
$this->{input_is_utf8} = 1;
}
else {
$this->{input_is_utf8} = 0;
}
# プロセスに文を送信する
$str =~ s/[\r\n\f\t]*$/\n/s;
$socket->print( $str );
# 解析結果を読み出す
while( defined( $str = $socket->getline ) ){
if ($this->{input_is_utf8}) {
$str = Encode::decode($ENCODING, $str);
}
push( @buf, $str );
last if $str =~ /$pattern/;
}
\@buf;
}
# 形態素解析を行うメソッド
sub analysis { &juman(@_); }
sub juman {
my( $this, $str ) = @_;
new Juman::Result( result => &juman_lines( $this, $str ),
pattern => $this->pattern(),
mclass => $this->{OPTION}->{mclass} );
}
1;
__END__
# Local Variables:
# mode: perl
# use-kuten-for-period: nil
# use-touten-for-comma: nil
# End:
|