/usr/share/perl5/Juman/Katuyou.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 | # $Id: Katuyou.pm,v 1.3 2011/07/01 04:02:15 kawahara Exp $
package Juman::Katuyou;
require 5.000;
use Juman::Grammar qw/ $FORM /;
use Juman::Hinsi qw/ get_form_id /;
use Encode;
use strict;
use vars qw/ $ENCODING /;
=head1 NAME
Juman::Katuyou - 形態素オブジェクトの活用形を操作する
=head1 DESCRIPTION
形態素オブジェクト L<Juman::Morpheme> の活用形を操作するメソッドを追加
する.
=head1 FILE
活用形辞書 F<JUMAN.katuyou.db> を参照する.この辞書は,Juman 本体に付
属している辞書 F<JUMAN.katuyou> から機械的に生成され,F<Katuyou.pm> と
同じディレクトリにインストールされているはずである.
なお,活用形辞書は BerkeleyDB 形式で作成され,L<DB_File> モジュールを
通じてアクセスされる.juman-perl のインストール時に L<DB_File> モジュー
ルが存在しないと,辞書の作成は行われないので,本モジュールで提供される
メソッドは利用できない.
=head1 METHODS
=over 4
=item kihonkei
形態素の基本形を返す.
=cut
$ENCODING = $JUMAN::ENCODING ? $JUMAN::ENCODING : 'utf8';
sub kihonkei {
my( $this ) = @_;
$this->change_katuyou2( '基本形' );
}
=item change_katuyou2 ( FORM )
指定された活用形 I<FORM> (基本形,命令形など)を持つ新たな形態素オブジェ
クトを返す.指定された活用形が存在しない場合は未定義値を返す.
=cut
sub change_katuyou2 {
my( $this, $org_form ) = @_;
my $form;
if( utf8::is_utf8( $org_form ) ){
$form = encode( $ENCODING, $org_form ); # 元のエンコーディング(従来はeuc-jp)にもどす
}
else{
$form = $org_form;
}
my $type = $this->katuyou1;
if( utf8::is_utf8( $type ) ){
$type = encode( $ENCODING, $type ); # 元のエンコーディング(従来はeuc-jp)にもどす
}
my $id = &get_form_id( $type, $form );
if( defined $id and $id > 0 ){
# 変更先活用形が存在する場合
my $new = &_dup( $this );
my @oldgobi = @{ $FORM->{$type}->[$this->katuyou2_id] }; # 元のエンコーディング(従来はeuc-jp)でやりとり
my @newgobi = @{ $FORM->{$type}->[$id] };
if ( utf8::is_utf8( $this->midasi ) ){
map( { $_ = decode( $ENCODING, $_ ) } @oldgobi ); # encodeされてるならdecode
map( { $_ = decode( $ENCODING, $_ ) } @newgobi );
}
$new->{midasi} = &_change_gobi( $this->midasi, $oldgobi[1], $newgobi[1] );
$new->{yomi} = &_change_gobi( $this->yomi,
( $oldgobi[2] || $oldgobi[1] ),
( $newgobi[2] || $newgobi[1] ) );
$new->{katuyou2} = $org_form; # もとのencodingで格納
$new->{katuyou2_id} = $id;
$new;
} else {
# 変更先活用形が存在しない場合
undef;
}
}
# 語尾を変化させる内部関数
sub _change_gobi {
my( $str, $cut, $add ) = @_;
unless( $cut eq '*' ){
$str =~ s/$cut\Z//;
}
unless( $add eq '*' ){
$str .= $add;
}
$str;
}
# 形態素オブジェクトを複製する内部関数
sub _dup {
my( $this ) = @_;
my $new = {};
while( my( $key, $value ) = each %$this ){
$new->{$key} = $value;
}
bless $new, ref $this;
}
1;
=back
=head1 SEE ALSO
=over 4
=item *
L<Juman::Morpheme>
=back
=head1 HISTORY
このモジュールは,L<KULM::Juman::Katuyou> モジュールを原形として作成さ
れた.
=head1 AUTHORS
=over 4
=item
佐藤 理史 <sato@i.kyoto-u.ac.jp>
=item
土屋 雅稔 <tsuchiya@pine.kuee.kyoto-u.ac.jp>
=cut
__END__
# Local Variables:
# mode: perl
# use-kuten-for-period: nil
# use-touten-for-comma: nil
# End:
|