読者です 読者をやめる 読者になる 読者になる

Kuchitama Tech Note

はてな記法がいつまでたっても覚えられないので、はてなダイアリーからマークダウンが使えるこっちに引っ越してきました。

ジャッジメントですの変換を作ってみる

clojure

この記事は変態アドベントカレンダー in Summer 9日目の記事です。

昨日の記事は@tango238さんの、

java.lang.Stringのメソッドをむりやり書き換える」でした。

今回のおだい

ただの悪ノリだけで始まった変態アドベントカレンダーinSummerですが、
なぜか参加者が2桁になってしまったので、僕も書きます。

今回は、確実に3週はしそうなので、連載形式で書いてみようと思います。
ゴールである夏コミまでお付き合いいただければ幸いです。

と、いうことでお題を「ジャッジメントですの 変換」の実装にしました。
これをパクる感じで、
入力された文字列の語尾を「ですの」に変換してtwitter投稿するアプリを作ってみようと思います。
atndの画像や注意文とも相まって良い感じです。

ちなみに、ありえないと思いますが、「ジャッジメントですの」って何ってかたは、この辺で勉強しとくといいと思います。

連載の予定

来週のサ○エさんは

とりあえずClojureでなっ

  • xmlを操作してみる。

ただしClojureでなっ

もちろんClojureでなっ

の、3本です。

Clojrue使っているのは、100%趣味です。

形態素解析してみる

とりあえず、今回は、適当な文章を形態素解析して助動詞を抜き出すところまでやろうと思います。

本題に入る前にちょっとだけ、用語について

ということで、最低限必要な知識はバッチリですね。

形態素解析というと、MeCabとかIgoとかあります。
ありますが今回は、関○電力のお達しにより、省エネモードで進めていこうと思います。

なので、今回はYahoo!日本語形態素解析APIを使おうと思います。

このAPIに、解析したい日本語文章を渡すと、解析結果のXMLが帰ってきます。
「この記事は変態アドベントカレンダー in Summer 9日目の記事です。」という文章を解析した結果を、このエントリの一番最後に載せておきます。

ClojureAPIをたたいてみる

さて、このAPIClojureから叩きたいのですが、
わざわざPureJavaを読み出すのも面白く無いので、今回は、
clj-httpというラッパーライブラリを使います。
https://github.com/dakrone/clj-http/

こいつは、Apache HttpComponentsをClojureでラップしていて、さくっとClojureからHttp-Get/Postのアクセスを行うことができます。
省エネだぜぇ

ということで、サンプルコード

(ns judgement.core
  (:require [clj-http.client :as client]))

(def yahoo-url
  ;yahoo形態素解析APIのURL
  "http://jlp.yahooapis.jp/MAService/V1/parse?appid={あなたのappId}&results=ma&response=surface,pos&sentence=")

(defn enc [in-str]
  ;;与えられた文字列をURLEncodeして返す
  (. java.net.URLEncoder encode in-str "utf8"))

(defn access-yahoo-api [src-str]
  ;;yahoo形態素解析APIにアクセスする
  (client/get 
    (str yahoo-url 
	  (enc src-str))))

はい、これだけです。
これで、Yahooの形態素解析APIを叩けます。
省エネだろぅ?

まとめ

というわけで、今日の記事のまとめはこんな感じ

明日は、@megascusさんの記事です。
よろしくお願いします。

おまけ

<ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:yahoo:jp:jlp" xsi:schemaLocation="urn:yahoo:jp:jlp http://jlp.yahooapis.jp/MAService/V1/parseResponse.xsd">
<ma_result>
<total_count>19</total_count>
<filtered_count>19</filtered_count>
<word_list>
<word>
<surface>この</surface>
<pos>連体詞</pos>
</word>
<word>
<surface>記事</surface>
<pos>名詞</pos>
</word>
<word>
<surface></surface>
<pos>助詞</pos>
</word>
<word>
<surface>変態</surface>
<pos>名詞</pos>
</word>
<word>
<surface>アド</surface>
<pos>名詞</pos>
</word>
<word>
<surface>ベント</surface>
<pos>名詞</pos>
</word>
<word>
<surface>カレンダー</surface>
<pos>名詞</pos>
</word>
<word>
<surface></surface>
<pos>特殊</pos>
</word>
<word>
<surface>in</surface>
<pos>名詞</pos>
</word>
<word>
<surface></surface>
<pos>特殊</pos>
</word>
<word>
<surface>Summer</surface>
<pos>名詞</pos>
</word>
<word>
<surface></surface>
<pos>特殊</pos>
</word>
<word>
<surface>9</surface>
<pos>名詞</pos>
</word>
<word>
<surface></surface>
<pos>接尾辞</pos>
</word>
<word>
<surface></surface>
<pos>名詞</pos>
</word>
<word>
<surface></surface>
<pos>助詞</pos>
</word>
<word>
<surface>記事</surface>
<pos>名詞</pos>
</word>
<word>
<surface>です</surface>
<pos>助動詞</pos>
</word>
<word>
<surface></surface>
<pos>特殊</pos>
</word>
</word_list>
</ma_result>
</ResultSet>