さくらインターネットでPython MecabをCGIから使う
POSTED BY
2024-09-29
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にかけて結果を出力するもの。
Python | mecab.py | GitHub 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
これを動かせる、完成したサンプルがこちら。
Android
iPhone/iPad
Flutter
MacOS
Windows
Debian
Ubuntu
CentOS
FreeBSD
RaspberryPI
HTML/CSS
C/C++
PHP
Java
JavaScript
Node.js
Swift
Python
MatLab
Amazon/AWS
CORESERVER
Google
仮想通貨
LINE
OpenAI/ChatGPT
IBM Watson
Microsoft Azure
Xcode
VMware
MySQL
PostgreSQL
Redis
Groonga
Git/GitHub
Apache
nginx
Postfix
SendGrid
Hackintosh
Hardware
Fate/Grand Order
ウマ娘
将棋
ドラレコ
※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!ご連絡は以下アドレスまでお願いします★
【キーワード検索】
【最近の記事】【全部の記事】
Intel Macbook2020にBootCampで入れたWindows11 Pro 23H2のBluetoothを復活させるWindowsのデスクトップ画面をそのまま配信するための下準備
WindowsでGPUの状態を確認するには(ASUS系監視ソフトの自動起動を停止する)
CORESERVER v1プランからさくらインターネットスタンダートプランへ引っ越しメモ
さくらインターネットでPython MecabをCGIから使う
さくらインターネットのPHPでAnalytics-G4 APIを使う
インクルードパスの調べ方
【Git】特定ファイルを除外する.gitignore
【Ubuntu/Debian】NVIDIA関係のドライバを自動アップデートさせない
【Python】Spacyを使用して文章から出発地と目的地を抜き出す
【人気の記事】【全部の記事】
進研ゼミチャレンジタッチをAndroid端末化する【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
Windows版Google Driveが使用中と言われアンインストールできない場合
VirtualBoxの仮想マシンをWindows起動時に自動起動し終了時に自動サスペンドする
【Apache】サーバーに同時接続可能なクライアント数を調整する
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
Googleファミリーリンクで子供の端末の現在地がエラーで取得できない場合
【Linux】iconv/libiconvをソースコードからインストール
Ubuntu Server 21.10でイーサリアムブロックチェーン【その5】
【カテゴリーリンク】
Android
iPhone/iPad
Flutter
MacOS
Windows
Debian
Ubuntu
CentOS
FreeBSD
RaspberryPI
HTML/CSS
C/C++
PHP
Java
JavaScript
Node.js
Swift
Python
MatLab
Amazon/AWS
CORESERVER
Google
仮想通貨
LINE
OpenAI/ChatGPT
IBM Watson
Microsoft Azure
Xcode
VMware
MySQL
PostgreSQL
Redis
Groonga
Git/GitHub
Apache
nginx
Postfix
SendGrid
Hackintosh
Hardware
Fate/Grand Order
ウマ娘
将棋
ドラレコ