Namazu-devel-ja(旧)


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

Re: sgmt



Sun, 15 Oct 2000 10:57:05 +0900 頃の
   Mail-Count: 00982
      Subject: [namazu-devel-ja] Re: sgmt   
についてのお話にて Satoru Takabayashi さん曰く… 
(S == Satoru Takabayashi <satoru-t@xxxxxxxxxxxxxxxxxx> さん)

In article 00982, <20001015105705O.satoru-t@xxxxxxxxxxxxxxxxxx>
S> バグ報告ありがとうございます。
S> まさか一度にこんなに見つかるとは。

どもです. 
おかげで Ruby 用の sgmt 拡張ライブラリはだいたいできたと思います. 
簡単なテスト用のスクリプトと sgmt-cmd もどきを作って確認しました. 

  $ cat t
  sgmt はわかち書き用のラッパーライブラリです。
  $ sgmt -m kakasi -s/ < t
  sgmt/はわかち/書き/用/の/ラッパーライブラリ/です/。
  $ ruby examples/sgmt.rb  -m kakasi -s/ < t
  sgmt/はわかち/書き/用/の/ラッパーライブラリ/です/。

簡単なドキュメントを書いたので添付しておきます. 
あと, どうせなら sgmt 本体と一緒に配布されるとうれしいんですが, 
どうしたらよいでしょう? (もちろんちゃんと動くかどうか, 
他の人によるテストは必要でしょうが)

テストをしていて気付いたんですが

  require 'sgmt'

  x1 = Sgmt.new("pipe",'kakasi -w')	# segmenter1
  x2 = Sgmt.new("pipe",'sed -e"s/ //"') # segmenter2

  p x1.segment("test test\n")           # (1) segmenter1 で segment
  p x2.segment("test test\n")           # (2) segmenter2 で segment

  p Sgmt.new("pipe",'kakasi -w').segment("test test\n")     # (3)
  p Sgmt.new("pipe",'sed -e"s/ //"').segment("test test\n") # (4)

こんなスクリプトを実行すると, こういう結果になります. 

  (1) ["testtest", "\n"]
  (2) ["testtest", "\n"]
  (3) ["test", "test", "\n"]
  (4) ["testtest", "\n"]

(1), (2) のケースでは segmeter1, segmenter2 とも同時に生きていて, 
(3), (4) のケースでは同時に生きていないという違いがあります. 

(3), (4) は問題ないのですが, (1), (2) は問題ありのように思います. 
これは制限事項ということになるでしょうか?
(実際こういう使い方がされるかどうかという話はあるかとも思いますが)

-- 

 やまだ あきら <URL:http://arika.org/>
 (akira@xxxxxxxxx, akira@xxxxxxxxxxxxx or akira@xxxxxxxxxx)

 

=begin

= わかち書きライブラリ

これはわかち書きライブラリである sgmt を 
Ruby から使用するための拡張ライブラリです. 

== インストール

sgmt をインストールした上で extconf.rb を実行します. 

  ruby extconf.rb

この場合 sgmt で提供されるライブラリやヘッダファイルは
それぞれそのシステムでの標準的な場所(/usr/include や 
/usr/lib など)にあることを期待されます. 
もしもこれとは異った場所にインストールされている場合には
次のような引数を与えることで調整することができます. 

: --with-sgmt-lib=dir
  sgmt.h がインストールされているディレクトリを指定します. 

: --with-sgmt-include=dir
  libsgmt.a や libsgmt.so がインストールされているディレクトリを指定します. 

また extconfig.rb の内部で glib-config コマンドを使用しています. 
PATH が通っていなかったり, 特定の glib-config コマンドを使用したい場合には
次の引数で指定できます. 

: --with-glib-config=/path/to/glib-config
  使用する glib-config コマンドを指定します. 

== 使い方

sgmt 拡張ライブラリを読み込みます. 

  require 'sgmt'

=== クラスメソッド

: module_directory=(path)
  sgmt のモジュールを探すディレクトリを path に設定し, 
  設定する前のディレクトリを返します. 
  特にその必要がなければ行わなくてかまいません. 

  なお, 現在は一度設定を行ってしまうとシステムのデフォルト値に
  戻すための方法が提供されていません(システムのデフォルト値を
  知っていて, 明示的にそれを設定することは可能ですが)ので, 
  設定する場合には慎重に行ってください. 

: module_directory
  現在のモジュール探索ディレクトリを返します. 
  システムのデフォルトの場合には nil が返ります. 

: new(module, argument = nil)
  segmenter(わかち書き君)を生成します. 
  module は文字列で sgmt がサポートしている
  わかち書きモジュールの中のいずれかを指定します. 
  argument にはわかち書きモジュールに渡す引数を
  文字列で指定します. 

=== メソッド

: codeset
  segmenter(わかち書き君)が期待しいてる文字コード名を文字列で返します. 
  特に指定がない場合には nil を返します. 
  segment メソッドを使用する際には, 与える文字の
  文字コード変換をここで得られる文字コードにしておかなくてはなりません. 

: segment(str)
  str で与えられた文字列をわかち書きにします. 
  メソッドとして呼び出すと
  わかち書きにした結果得られた単語の配列を返します. 
  また, イテレータとして呼び出すと
  わかち書きにした結果得られた個々の単語に対して
  ブロックを適用します. 

=end