##mt1.pl
##
##20120918
##入力文の文末が.だけでなく?と!の場合にも対応。
##20120919
##入力文の大文字は全て小文字に変換する。⇒但し固有名詞など弊害多いのでコメントアウトした状態で配布。
##
##2009mt1.pl
##20100826コメント整理
##スペイン語のレベルで簡単な構文解析もどきを行う。
##
##2006mt1.pl(org taiyaku1.pl)
##辞書引きを最長一致に。
##入力文(半角スペースで分かち書きする言語)に日本語で対訳をつける。
##単語に訳をふるだけで、語順変換はしない。


##入力
print "文を入力してください: ";
$bun = <STDIN>;
chop($bun);


##デバッグ用
##$dicfile = "dicsjforMT2012.txt";	
##$dicfile = "dicsjforMT2012_2.txt";
####
##
##辞書ファイル切替
$dicfile = "dicsjforMT.txt";	#西日翻訳の場合はこちらの辞書をON(=行頭#なし)
$outfile = "outtaiyaku.txt";	#形態素解析結果出力ファイル
##毎回上書き
open(ADD,">$outfile");		#追加(アペンドモード) open(ADD,">>$outfile");

##★20120918前処理(1)「文末が半角?か!であれば削除して辞書検索。」「フラグを残す」
$interrogflag=0;
if($bun =~ /\?$/){
##print $`;
  $bun = $`;
  print $bun\n;

  $interrogflag=1;

}
elsif($bun =~ /\!$/){
##print $`;
  $bun = $`;
  print $bun\n;

  $interrogflag=2;
}

##★20120918前処理(2)「大文字小文字変換を入れる」(弊害が多いのでコメントアウトしておく)
##$bun =~ tr/A-Z/a-z/;

##★2012前処理ここまで

##20090818文頭から文末へ形態素解析。辞書情報を入れる。hablo#v#話す(1s)#dosi

##060817 最長一致。残り形態素がなくなるまでループ。
$tugi=$bun;	#今検索中の文字列
$nokori=$bun;	#残り文字列(今のループの初期文字列)

while($tugi ne ""){
$findflag = 0;	##ファイルを開くたびに(新しい検索にはいるので)フラグをOFFに

#辞書オープン #エラー処理追加20090818
  open(DIC,"$dicfile")|| die "cannot open $!\n";

#1行ずつ読みこみ
  while(<DIC>){
    $line = $_;
    chop($line);

#行頭が#の行(コメント行)は読み飛ばし
  if($line =~ /^#/){
    next;
  }

#辞書の1行を分割して@dicfieldに入れる
    @dicfield = split(/#/,$line);
#dicfiledの最初のフィールド(0番)が入力文中の語とマッチしたら
#対訳フィールド(2番)を表示

##20090818変更
##ファイル出力を辞書情報すべてに。
##20060817変更 
## $tugiの文字列が辞書の見出しフィールドにマッチしたら、訳語を出力。フラグを1に。残りの処理へ移る。

    if($tugi eq $dicfield[0]){		#完全一致のときのみ
      print $dicfield[2]," ";		#画面表示

##20090818 品詞がblanco(スペース)でなければ辞書情報を出力(blancoの場合は何もせず次へ。フラグはオンに。)
      if($dicfield[1] ne "blanco"){
        print ADD "$line\n";	#ファイルに書き込む
      }
      $findflag = 1;
 

      if($nokori =~ /$tugi/ ){ 	#マッチした語を切り取った残り部分をtugiとする
        $nokori = $';
        $tugi = $nokori;
      }
    }
  }	#DICループの終わり
  close(DIC);

##060817 見つからなければ$tugiを文末から短くしていく($nokoriは保存)
  if($findflag==0){
    chop($tugi);
  }


##060817 whileの終わり
}	##見つかっていればマッチの残りがtugi、見つからなければ1文字chopがtugiとなっているはず。


##★20120918前処理に対応
if($interrogflag == 1){
  print "?";
  print ADD "?#punto#?#kuten\n";
}
elsif($interrogflag == 2){
  print "!";
  print ADD "!#punto#!#kuten\n";
}
##

print ADD "\n";	##ファイルの終わりに改行を入れる
close(ADD);	##形態素解析結果出力ファイル



