Gauche:茶筌

Gauche:茶筌

ふと思い立って、Gaucheから茶筌を呼んで遊んでみようと思ったのだ。

サーバ-クライアントでやってみたらそんなに難しくなかった。

あらかじめ chasen -s で茶筌サーバを立ち上げとく。

 (use gauche.net)
 (use srfi-13)
 
 (define (chasen-sparse string port)
   (call-with-client-socket (make-client-socket 'inet "localhost" port)
     (lambda (in out)
       (read-line in) ;; greeting
       (display "RUN\r\n" out)
       (flush out)
       (display string out)
       (display "\r\n" out)
       (flush out)
       (begin0
        (let1 rep (read-line in)
          (let loop ((line (read-line in)) (r '()))
            (cond ((equal? line "EOS") (reverse r))
                  (else (loop (read-line in) (cons (string-tokenize line) r))))))
        (display ".\r\n" out)
        (read-line in)
        (display "quit\r\n" out)
        (read-line in)
        ))))
 gosh> (chasen-sparse "向こうの山に朝日が照って今日も良い天気" 31000)
 (("向こう" "ムコウ" "向こう" "名詞-一般") ("の" "ノ" "の" "助詞-連体化") ("山" "ヤマ" "山" "名詞-一般") ("に" "ニ" "に" "助詞-格助詞-一般") ("朝日" "アサヒ" "朝日" "名詞-固有名詞-組織") ("が" "ガ" "が" "助詞-格助詞-一般") ("照っ" "テッ" "照る" "動詞-自立" "五段・ラ行" "連用タ接続") ("て" "テ" "て" "助詞-接続助詞") ("今日" "キョウ" "今日" "名詞-副詞可能") ("も" "モ" "も" "助詞-係助詞") ("良い" "ヨイ" "良い" "形容詞-自立" "形容詞・アウオ段" "基本形") ("天気" "テンキ" "天気" "名詞-一般"))
 gosh> (string-concatenate (map cadr (chasen-sparse "ある友人がかつて、著明なオペレーティングシステムの専門家に、 本当に素晴らしいプログラミング言語を設計したいんだと話したことがある" 31000)))
 "アルユウジンガカツテ、チョメイナオペレーティングシステムノセンモンカニ、ホントウニスバラシイプログラミングゲンゴヲセッケイシタインダトハナシタコトガアル"
 gosh> (string-concatenate (map cadr (chasen-sparse "プログラミング言語に 人気が出るかどうかはその言語の良さとは関係がない、 だからいかに良い言語を作ろうと誰も使ってはくれないよ、と" 31000)))
 "プログラミングゲンゴニニンキガデルカドウカハソノゲンゴノヨサトハカンケイガナイ、ダカライカニヨイゲンゴヲツクロウトダレモツカッテハクレナイヨ、ト"

エラー処理とか、ソケットがスタックしたら、とか、そのへんはまだ。


もうちょっといじったやつがここに。

More ...