Show
Ignore:
Timestamp:
03/12/08 17:57:49 (9 months ago)
Author:
daisuke
Message:

* refactor tests
* change %special -> @special so processing order is kept
* change how 2 syllable words are transformed

Location:
lang/perl/Acme-Shukugawa-Atom/trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Acme-Shukugawa-Atom/trunk/lib/Acme/Shukugawa/Atom.pm

    r7832 r7851  
    2828    # Special case handling -- this could be optimized further 
    2929    # put it in a sharefile later 
    30     my %special = ( 
     30    my @special = ( 
    3131        '別に' => 'ジリサワゴネタ', 
    3232        '予約した' => 'バミった', 
     
    3434        '巨乳|胸(?:の|が)(大きい|でかい|デカイ)' => 'パイオツカイデー', 
    3535        '女性|女の人|お姉さん|おねーさん' => 'チャンネー', 
    36         'お?(?:ばあ|婆)さん' => 'F3のチャンバー', 
     36        'お?(?:ばあ|婆)さん' => 'チャンバー', 
     37        '(?:おおきい|大きい)(?:のか?|か)?' => 'カイデー', 
    3738    ); 
    38          
    39     while (my ($pattern, $replace) = each %special) { 
     39 
     40    for(0..$#special/2) { 
     41        my $pattern = $special[$_ * 2]; 
     42        my $replace = $special[$_ * 2 + 1]; 
    4043        $$strref =~ s/$pattern/$replace/g; 
    4144    } 
     
    6063        } else { 
    6164            my $feature = decode_utf8($node->feature); 
    62             my $yomi = (split(/,/, $feature))[8]; 
    63             if ($yomi) { 
    64                 # normalize 
    65                 $yomi = $self->atomize($yomi) || $surface; 
     65 
     66            if (my $yomi = (split(/,/, $feature))[8]) { 
     67                $ret .= $self->atomize($yomi) || $surface; 
    6668            } else { 
    67                 $yomi = $surface; 
     69                $ret .= $surface; 
    6870            } 
    69             $ret .= $yomi; 
    7071        } 
    7172    } 
     
    8283    my $length = length($yomi); 
    8384    if ($length <= 2) { 
     85        return $yomi if $yomi =~ s/(.)([^ン])/$2ー$1ー/; 
    8486        return; 
    8587    } 
  • lang/perl/Acme-Shukugawa-Atom/trunk/t/01_basic.t

    r7832 r7851  
    88} 
    99 
    10 is( Acme::Shukugawa::Atom->translate("六本木の胸の大きいお姉さんがいる店を予約した"), "ギロッポンのパイオツカイデーチャンネーがいる店をバミった" ); 
    11 is( Acme::Shukugawa::Atom->translate("狼"), "カミオー" ); 
     10my %data = ( 
     11    "六本木の胸の大きいお姉さんがいる店を予約した" 
     12        => "ギロッポンのパイオツカイデーチャンネーがいるセーミーをバミった" , 
     13    "狼" => "カミオー", 
     14    "おばあさんの口はどうして大きいの?" => 
     15        "チャンバーのチークーはどうしてカイデー?" 
     16); 
    1217 
    13 is( Acme::Shukugawa::Atom->translate("おばあさんの口はどうして大きいの?"), 
    14     "チャンバーのチークーはどうしてカイデー"); 
     18while (my($orig, $expected) = each %data) { 
     19    is( Acme::Shukugawa::Atom->translate($orig), $expected ); 
     20}