Common Lisp から Yahoo の日本語形態素解析を使う
XML を XMLS に変換すれば destructuring(destructuring-bind と loop) なバインドで簡単に処理できる。
- DRAKMA で Web API をたたいて XML を取得。
- Closure XML で XMLS に変換。これで S 式の世界。
- destructuring-bind で word_list 部分をとりだす。
- loop で形態素を集める。
これだけ簡単だと SAX とか DOM とか XPath なんてとても使う気になれないよね。
(eval-when (:compile-toplevel :load-toplevel :execute)
(require :drakma)
(require :cxml)
(require :cl-ppcre))
(defvar *yahoo-appid* "アプリケーションID")
(defvar *yahoo-url* "http://jlp.yahooapis.jp/MAService/V1/parse")
(setf drakma:*drakma-default-external-format* :utf-8)
(defun yahoo-http-request (text)
(drakma:http-request
*yahoo-url*
:method :post
:parameters `(("appid" . ,*yahoo-appid*)
("filter" . "1|2|5|9|10") ; 形容詞 形容動詞 連体詞 名詞 動詞
("sentence" . ,text))))
(defun text-to-words (text)
(destructuring-bind (result-set
schema-location
(ma-result
_
total-count
filtered-count
word-list))
(cxml:parse (yahoo-http-request text) (cxml-xmls:make-xmls-builder))
(declare (ignorable result-set schema-location ma-result _
total-count filtered-count))
(print word-list)
(loop for (_a _b (_c _d word)) in (cddr word-list)
collect word)))
(text-to-words "貘の鼻は長くて、羊はもこもこしている。
ところで貘の腹巻は白と黒のどちらだったろうか?")
;;=> ("貘" "鼻" "長く" "羊" "もこもこ" "し" "貘" "腹巻" "白" "黒" "どちら")
0 件のコメント:
コメントを投稿