Corredor

ウェブ、プログラミングの勉強メモ。

Python MeCab CGI : MeCab パース処理を提供する Python CGI を作ってみた

Python を CGI として動作させ、MeCab によるパース結果をレスポンスするスクリプトを作った。

XREA のように MeCab がプリインストールされていて、Python を CGI として実行可能なサーバに配置すれば、MeCab を Web API 的に利用できるようになる。

ソースコード

ソースコードは以下の GitHub リポジトリに置いた。

github.com

サーバの前提条件

上のソースコードを配置して動作させるために必要な前提条件を記す。

  1. 対象のサーバに MeCab がインストールしてあること
    • XREA の場合はプリインストール済なので特にやることなし
  2. 対象のサーバに Python3 がインストールしてあること
    • コレも XREA は導入済
  3. mecab-python3 をインストールしておく
    • $ python3 -m pip install mecab-python3 --user
  4. .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 を取得してやればよかろう。

curlwget からの使い方

このスクリプトを curlwget でリクエストすると、レスポンスのされ方が変わるように作ってある。

$ 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 だが、自前のサーバでも利用できると思うので、よかったらドウゾ。