Python MeCab CGI : MeCab パース処理を提供する Python CGI を作ってみた
Python を CGI として動作させ、MeCab によるパース結果をレスポンスするスクリプトを作った。
XREA のように MeCab がプリインストールされていて、Python を CGI として実行可能なサーバに配置すれば、MeCab を Web API 的に利用できるようになる。
目次
ソースコード
ソースコードは以下の GitHub リポジトリに置いた。
サーバの前提条件
上のソースコードを配置して動作させるために必要な前提条件を記す。
- 対象のサーバに MeCab がインストールしてあること
- XREA の場合はプリインストール済なので特にやることなし
- 対象のサーバに Python3 がインストールしてあること
- コレも XREA は導入済
mecab-python3
をインストールしておく$ python3 -m pip install mecab-python3 --user
.py
ファイルが CGI として認識されない場合は、次のように.htaccess
で設定したりして対処するAddHandler cgi-script .py
スクリプトの配置方法
作成した Python スクリプトは単一ファイルなので、基本的にはコレをサーバに配置し、ファイルに実行権限を付与するだけで良い。
$ chmod 755 index.py
ファイル1行目の Shebang や MeCab の辞書ファイルのパスなどは、XREA サーバですぐに使えるよう最適化して記述してあるので、各環境に合わせて適宜変更すること。
ファイル名の変更も任意でドウゾ。
http://example.s0.xrea.com/index.py
といった URL でアクセスできるようになったら OK。
ブラウザからの使い方
まずは単純にブラウザから使ってみる方法。
http://example.s0.xrea.com/index.py
にアクセスすると、テキストボックスと「Parse」ボタンが表示されているはず。ココに任意の文言を入力して「Parse」ボタンを押下すると、パース結果が下部に表示される。
http://example.s0.xrea.com/index.py?q=任意の文言
↑このように、q
というクエリ文字列パラメータで文言を設定すると、初期表示時にパース結果を表示してくれる。
パースした結果は pre#result
要素にまるっと投げ込んでいるので、自分でスクレイピングしたい時はこの要素を特定して innerText
を取得してやればよかろう。
curl
や wget
からの使い方
このスクリプトを curl
や wget
でリクエストすると、レスポンスのされ方が変わるように作ってある。
$ curl http://example.s0.xrea.com/index.py
このようにアクセスすると
Python MeCab CGI : Please input text with "q" parameter
とだけレスポンスされる。
そこで q
パラメータを渡してみると、mecab
コマンドによる結果のみをレスポンスする。
# GET パラメータで書いた場合
$ curl 'http://example.s0.xrea.com/index.py?q=こんにちは世界'
# POST パラメータで書いた場合
$ curl -X POST http://example.s0.xrea.com/index.py -d 'q=こんにちは世界'
# いずれも、レスポンスは次のようになる
こんにちは 感動詞,*,*,*,*,*,こんにちは,コンニチハ,コンニチワ
世界 名詞,一般,*,*,*,*,世界,セカイ,セカイ
EOS
MeCab はインストールが面倒だったりするので、このように curl
で Web API 的に使えると、何かと便利だと思う。
User Agent をみて、ブラウザでは HTML を、curl などでの呼び出し時は MeCab のパース結果だけをレスポンスするようにしてある。コレは cheat.sh
というサイトがそのような挙動をしていたところから着想を得た。
以上
Python3 や MeCab がプリインストールされている XREA の利点を生かした CGI だが、自前のサーバでも利用できると思うので、よかったらドウゾ。