namazu-ml(avocado)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: chasen module



<19981119020219N.satoru@xxxxxxxxxxxxx>の記事において
satoru@xxxxxxxxxxxxxさんは書きました。

>> すごい! 参考までに diff を貰えませんか? KAKASI のモジュール化に挑
>> 戦してみたいです。

  それほど大きくないので、このメールの最後につけておきます。1.2.0.8に
対する差分です。

  モジュールの方は<http://www.daionet.gr.jp/~knok/chasen/>にあります。
chasenにもパッチを当てる必要があるので、ちょっと面倒かもしれません。そ
のかわり、パッチにはちょっとしたメモリ関係のバグ修正を含んであります。
このバグも次のリリースでは修正されるそうです。

*** mknmz.pl	Thu Nov 19 09:22:58 1998
--- mknmz.pl.new	Thu Nov 19 09:40:52 1998
***************
*** 28,33 ****
--- 28,34 ----
  require 5.003;
  use Cwd;
  use English;
+ use chasen;
  use strict;  # strict にしました v1.2.0
  
  # おびただしい数のグローバル変数
***************
*** 56,61 ****
--- 57,63 ----
      $TEXT_TITLE, $TITLEW, $TMP_I, $TMP_W, $TMP_P, $TMP_PI,
      $URL_PREFIX, $USAGE_JA, $USAGE_EN, $UnsignedCmp, $UuencodeOpt,
      $VERSION, $WAKATI, $LANGUAGE, $WAKATITMP, $WORDLIST,
+     $CHASEN_PM, @CHASEN_OPT_DEF, @CHASEN_OPT_MORPH, @CHASEN_OPT,
      $WORDLIST_);
  
  ##
***************
*** 138,146 ****
--- 140,153 ----
  
  ## ChaSen 1.51 (単なるわかち書き)
  $CHASEN = "%OPT_PATH_CHASEN% -j -F '\%m '";
+ @CHASEN_OPT_DEF = ('%OPT_PATH_CHASEN%', '-j', '-F', '%m ');
  
  ## ChaSen 1.51 (形態素解析の品詞情報を扱う)
  $CHASEN_MORPH = "%OPT_PATH_CHASEN% -j -F '\%m %H\\n'";
+ @CHASEN_OPT_MORPH = ('%OPT_PATH_CHASEN%', '-j', '-F', '%m %H\n');
+ 
+ ## chasen.pm
+ $CHASEN_PM = 0;
  
  ## 日本語処理のディフォルト (Makefile から継承)
  $WAKATI  = $%OPT_WAKATI_DEFAULT%;
***************
*** 1026,1031 ****
--- 1033,1040 ----
      &check_present_index;
      chdir $target_dir || die "$target_dir: $!\n";
  
+     &chasen::getopt_argv(@CHASEN_OPT)
+       if ($CHASEN_PM && @CHASEN_OPT);
      # $URL_PREFIX が \t なら $target_dir の cwd を元にセット v1.1.1
      $URL_PREFIX = cwd() . $PSC if $URL_PREFIX eq "\t";
      $TARGET_DIR = cwd();
***************
*** 1143,1150 ****
      while (defined($ARGV[0]) && $ARGV[0] =~ /^-/) {
  	$TARGET_FILE = ".*" if $ARGV[0] =~ /a/;
  	$WAKATI = $KAKASI, $MorphOpt = 0 if $ARGV[0] =~ /k/;
! 	$WAKATI = $CHASEN, $MorphOpt = 0 if $ARGV[0] =~ /c/;
! 	$WAKATI = $CHASEN_MORPH, $MorphOpt = 1 if $ARGV[0] =~ /m/;
  	$UuencodeOpt = 1 if $ARGV[0] =~ /u/;
  	$MailNewsOpt = 1 if $ARGV[0] =~ /h/;
  	if ($ARGV[0] =~ /r/) {
--- 1152,1162 ----
      while (defined($ARGV[0]) && $ARGV[0] =~ /^-/) {
  	$TARGET_FILE = ".*" if $ARGV[0] =~ /a/;
  	$WAKATI = $KAKASI, $MorphOpt = 0 if $ARGV[0] =~ /k/;
! 	$WAKATI = $CHASEN, $MorphOpt = 0, @CHASEN_OPT = @CHASEN_OPT_DEF
! 	  if $ARGV[0] =~ /c/;
! 	$WAKATI = $CHASEN_MORPH, $MorphOpt = 1, @CHASEN_OPT = @CHASEN_OPT_MORPH
! 	  if $ARGV[0] =~ /m/;
!  	$CHASEN_PM = 1 if $ARGV[0] =~ /p/;
  	$UuencodeOpt = 1 if $ARGV[0] =~ /u/;
  	$MailNewsOpt = 1 if $ARGV[0] =~ /h/;
  	if ($ARGV[0] =~ /r/) {
***************
*** 1820,1825 ****
--- 1832,1840 ----
      my ($contents) = @_;
      my (@tmp);
  
+     if ($CHASEN_PM && @CHASEN_OPT) {
+ 	@tmp = split(/\n/, &chasen::sparse_tostr($$contents));
+     } else {
      # IPC::Open2 もあるけど試したらちょっと変でしかも遅かった
      open(WAKATI, "|$WAKATI > $WAKATITMP");
      binmode(WAKATI);
***************
*** 1831,1836 ****
--- 1846,1852 ----
      @tmp = <WAKATI>;
      close(WAKATI);
      unlink $WAKATITMP;
+     }
  
      # ひらがなだけの語は削除する -H オプション時
      # このコードは古川@ヤマハさんがくださりました。[11/13/1997]
-- 
野首 貴嗣
E-mail: knok@xxxxxxxxxxxxx, knok@xxxxxxxxxxxxxxxx (private)
        nokubi@xxxxxxxxx (official)
        knok@xxxxxxxxxxxxx (isoternet)