2007-12-14

Gaucheの練習: 連続する名詞の抽出

連続する名詞の抽出を書いてみた。Gauche(というかScheme)素人なのでとても時間がかかる。


;; coding: utf-8

(use mecab)

(define (takenowns node buf ans)
(if (mecab-node-null? node)
(if (null? buf) ans (append ans (list buf)))
(if (equal? "名詞" (substring (mecab-node-feature node) 0 2))
(takenowns (mecab-node-next node) (append buf (list (mecab-node-surface node))) ans)
(takenowns (mecab-node-next node) '() (if (null? buf) ans (append ans (list buf))))))
)

(define m (mecab-new2 ""))

(map print
(takenowns
(mecab-sparse-tonode m "並み居る共和党候補たちのはるか後方で何カ月も低迷していた
ハッカビー氏は、アイオワ州の支持率でついに、ミット・ロムニー氏についで2位となった")
'() '()))

(mecab-destroy m)

実行結果

ayu@~/work/Gauche-mecab% gosh sample.scm | nkf -e
(共和党 候補 たち)
(はるか 後方)
(何 カ月)
(低迷)
(ハッカビー 氏)
(アイオワ 州)
(支持 率)
(ミット・ロムニー 氏)
(ついで 2 位)


自分で書いておいてなんだが、非常に読みづらいコードだと思う。
もっときれいに書けるようになるにはあと何年かかるだろうか。
Pythonできれいにかけるようになるのにも数年かかったからなあ。

以下を調べておく事------
[done] Pythonのリストのように後ろに追加していけるリストはないのだろうか。
Python文字列のstartswithメソッド相当を作る。