2013/07/10

Clojureで、Yahoo!の形態素解析APIを使う



という記事を見つけたら、
Yahoo!の形態素解析APIを使ってたのを思い出したので、そのメモ。

Clojureから、Yahoo!のこのAPIを使って、任意の文字列を形態素解析できるようにします。


日本語の形態素解析
Yahoo!日本語形態素解析API

テキストデータと言えば、青空文庫
「青空文庫/夏目漱石/それから」

Clojure側ではとりあえず、
  1. httpのリクエストを送リ、データを受け取る。
  2. データをClojureの内部形式(ハッシュマップ、そして、リスト)に戻す。
という2つの処理が出来ればOK。簡単です。
リクエストは、Clojureのhttp-agentというラッパーを使います。


 Yahoo!日本語形態素解析APIは、XML形式でデータを返してくれます。
 今回は、そのデータを一旦、ローカルに保存して、ClojureのXMLパーサを使って、データをハッシュマップにマッピングします。そこから、必要なデータだけ抜き出して、単語列にします。

以下が実行結果とコード。
user=> (load-file "use-yjma-api.clj")
#'user/tokenizer
user=> (tokenizer kana "誰か慌ただしく門前を馳けて行く足音がした時、代助の頭の中には、大きな俎下駄が空から、ぶら下つてゐた。けれども、その俎下駄は、足音の遠退くに従つて、すうと頭から抜して消えて仕舞つた。さうして眼が覚めた。")
("だれ" "か" "あわただしく" "もんぜん" "を" "はせ" "け" "て" "いく" "あしおと" "が" "し" "た" "とき" "、" "しろ" "たすけ" "の" "あたま" "の" "なか" "に" "は" "、" "おおきな" "まないた" "げた" "が" "そら" "から" "、" "ぶらさがり" "つて" "ゐ" "た" "。" "けれども" "、" "その" "まないた" "げた" "は" "、" "あしおと" "の" "とおのく" "に" "じゅう" "つて" "、" "すう" "と" "あたま" "から" "ぬき" "し" "て" "きえ" "て" "しまい" "つた" "。" "さ" "う" "し" "て" "め" "が" "さめ" "た" "。")
user=> (tokenizer kanji "誰か慌ただしく門前を馳けて行く足音がした時、代助の頭の中には、大きな俎下駄が空から、ぶら下つてゐた。けれども、その俎下駄は、足音の遠退くに従つて、すうと頭から抜して消えて仕舞つた。さうして眼が覚めた。")
("誰" "か" "慌ただしく" "門前" "を" "馳" "け" "て" "行く" "足音" "が" "し" "た" "時" "、" "代" "助" "の" "頭" "の" "中" "に" "は" "、" "大きな" "俎" "下駄" "が" "空" "から" "、" "ぶら下" "つて" "ゐ" "た" "。" "けれども" "、" "その" "俎" "下駄" "は" "、" "足音" "の" "遠退く" "に" "従" "つて" "、" "すう" "と" "頭" "から" "抜" "し" "て" "消え" "て" "仕舞" "つた" "。" "さ" "う" "し" "て" "眼" "が" "覚め" "た" "。")

  • app-idには、yahooから与えられたアプリケーションIDを記述します。
  • (平)仮名と漢字を選べます。(XMLデータには、両方の結果があります)
  • リクエストの日本語のエンコードには、java.net.URLEncoder/encode
  • take-tokensは、ネストしたハッシュマップから、単語の列を生成する。
こんな感じで、テキストデータが単語単位に分割できました。

0 件のコメント :