アプリケーション開発ポータルサイト
ServerNote.NET
カテゴリー【PythonFreeBSD
さくらインターネットでPython MecabをCGIから使う
POSTED BY
2024-09-29

Python3.8に形態素解析エンジンMecabモジュールを組み込むの延長だが、さくらインターネットでもソースからコンパイル・インストールを行う必要がある。

pipのインストール

当然ながらレンタルサーバにroot権限はないので、pipおよびソースコンパイル・インストールも自分のホームで行う。python自体はシステム/usr/local/bin/python3.8系が存在するのでそれを使う。

cd
wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py

$HOME/.local/bin/pip
$HOME/.local/lib/python3.8/site-packages

などが出来上がっていることを確認。.local/binにパスを通しておく。

Mecabソースコードのダウンロード・コンパイル・インストール

cd
wget https://files.pythonhosted.org/packages/86/e7/bfeba61fb1c5d1ddcd92bc9b9502f99f80bf71a03429a2b31218fc2d4da2/mecab-python-0.996.tar.gz
tar xvfzp mecab-python-0.996.tar.gz
cd mecab-python-0.996
vi setup.py

setup.pyを以下のように修正する。

# 変更前
def cmd2(str):
    return string.split (cmd1(str))

# 変更後
def cmd2(str):
    return cmd1(str).split()

コンパイル・インストール。インストール先をprefixで$HOME/.localにするのが最大のポイント。

python3.8 setup.py build
python3.8 setup.py install --prefix=$HOME/.local

$HOME/.local/lib/python3.8/site-packagesにMecab関係のものが入ったことを確認。

Mecab CGIの作成とセットアップ

mecab.pyを以下のようなCGIとして書く。ユーザー入力をMeCabにかけて結果を出力するもの。

Pythonmecab.pyGitHub Source
#!/usr/local/bin/python3
# -*- coding: utf-8 -*-

import codecs
import cgi
import os
import sys
import io
import MeCab

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

def mecab_list(text):
    tagger = MeCab.Tagger("-Ochasen")
    tagger.parse('')
    node = tagger.parseToNode(text)
    word_class = []
    while node:
        word = node.surface
        wclass = node.feature.split(',')
        if wclass[0] != u'BOS/EOS':
            if wclass[6] == None:
                word_class.append((word, wclass[0], wclass[1], wclass[2], ""))
            else:
                word_class.append(
                    (word, wclass[0], wclass[1], wclass[2], wclass[6]))
        node = node.next
    return word_class

form = cgi.FieldStorage()
mecab_ta = form.getfirst('mecab_ta', '')

test = mecab_list(mecab_ta)

print("Content-Type: text/html; charset=UTF-8\r\n\r\n", end="")
for ttt in test:
    i = 0
    for tt in ttt:
        if i > 1:
            print(",", end="")
        print(tt, end="")
        if i == 0:
            print(" [")
        i += 1
    print("]<br>\n", end="")

さくらインターネットに引っ越したときの設定で、.cgiは.phpにリダイレクトするようにしたので.cgiは以後使えない。.pyをCGIプログラムとして実行できるように設定する必要がある。.htaccessに以下のように書く。

AddType application/x-httpd-cgi .py

これを動かせる、完成したサンプルがこちら

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

【キーワード検索】