ClojureからMeCabを使う
MeCabのJavaバインディングを利用する。replからいきなり使用してもエラーが出て動かないので、compileしたlib経由で使用する。コンパイルは以下のようにすると出来た。
(ns mecab (:import (org.chasen.mecab MeCab Tagger Node))) (System/loadLibrary "MeCab") (defn mecab-seq [s] (letfn [(node-parse [node] (when node (lazy-seq (cons (vec (cons (.getSurface node) (re-seq #"[^,]+" (.getFeature node)))) (node-parse (.getNext node))))))] (rest (butlast (node-parse (.parseToNode (Tagger.) s))))))
user=> (use 'mecab) nil user=> (map #(% 0) (mecab-seq "さっき適当にやってみたら知らん国の知らんおっさんに繋がってどうしようもなかった")) ("さっき" "適当" "に" "やっ" "て" "み" "たら" ...) user=> (mecab-seq "さっき適当にやってみたら知らん国の知らんおっさんに繋がってどうしようもなかった") (["さっき" "名詞" "副詞可能" "*" "*" "*" "*" "さっき" "サッキ" "サッキ"] ["適当" "名詞" "形容動詞語幹" "*" "*" "*" "*" "適当" "テキトウ" "テキトー"] ["に" "助詞" "格助詞" "一般" "*" "*" "*" "に" "ニ" "ニ"] ["やっ" "動詞" "自立" "*" "*" "五段・ラ行" "連用タ接続" "やる" "ヤッ" "ヤッ"] ["て" "助詞" "接続助詞" "*" "*" "*" "*" "て" "テ" "テ"] ["み" "動詞" "非自立" "*" "*" "一段" "連用形" "みる" "ミ" "ミ"] ["たら" "助動詞" "*" "*" "*" "特殊・タ" "仮定形" "た" "タラ" "タラ"] ...)
思ったこと
Clojureのseqをmultimethodにして、いろんな物を後付けでシーカブルに出来ないかなぁ。