テキストファイルのpythonスクリプトでcabochaがエラーになる

テキストファイルのpythonスクリプトでcabochaがエラーになったときの対処法。

ターミナルではpythonでcabochaが動かせるが、テキストファイルに記述したpythonスクリプトからcabochaを実行するとエラーになった。

【環境と前提】
・さくらスタンダードプラン
・/home/username/localに自前のpython2.7がインストール済み
・/home/username/localにcabochaがインストール済み
・テキストファイルのpythonスクリプトでのみ問題発生。

エラー内容(Apacheのエラーログ)
------------------------------------------------------
Traceback (most recent call last):
File "python_test2.cgi", line 5, in
import CaboCha
File "/home/username/local/lib/python2.7/site-packages/CaboCha.py", line 26, in
CaboCha = swig_import_helper()
File "/home/username/local/lib/python2.7/site-packages/CaboCha.py", line 22, in swig_import_helper
mod = imp.load_module('_CaboCha', fp, pathname, description)
ImportError: Shared object "libcabocha.so.4" not found, required by "_CaboCha.so"
------------------------------------------------------
テキストのpythonスクリプトだと、共有オブジェクトが見つからないよう。パスが通ってないということだろう。

解決方法

スクリプトの先頭の記述を次のように変更した。

------------------------------------------------------
#!/home/username/local/bin/python
------------------------------------------------------

↓↓↓

------------------------------------------------------
#! /usr/bin/env -S LD_LIBRARY_PATH=/home/workroom/local/lib /home/workroom/local/bin/python
------------------------------------------------------

参考:こちらのページの最後ら辺

Pythonで「あ」が「u'\u3042'」になる文字化けの対処法

python にて、mysql で select したデータがunicode型になる。
期待してない動作で、文字化けである。

たとえば
-----------------------------------
あいう ← 元データ

u'\u3042\u3044\u3046' ← print の出力結果
-----------------------------------

これは、文字列全体に文字コードを指定して解決できる。

-----------------------------------
print word

↓↓↓

print word.encode('utf-8')
-----------------------------------
unicode文字列をstr文字列(UTF-8)に変換している。

【さくら共有サーバー】pythonでmysqlを使えるようにする

pythonでmysqlを使えるようにした際の覚書。

概要をつかむための参考ページ

【環境と前提】
・さくらスタンダードプラン
・「/home/username/local」に自前のpython2.7がインストール済み

1.pythonでmysqlを利用するためドライバをインストール

ドライバは何種類かある中で「MySQL for Python」を選択。デファクトスタンダードらしい。

こちらからダウンロード(この時のファイル名、MySQL-python-1.2.3.tar.gz)

ダウンロード先は「/home/username/local」で、次に解凍。
解凍したフォルダに移動してセットアップを実行。

参考:こちら

セットアップコマンド
--------------------------------------------------
% python setup.py install --home=~/local

Traceback (most recent call last):
File "setup.py", line 5, in
from setuptools import setup, Extension
ImportError: No module named setuptools
--------------------------------------------------

エラーで出る。

setuptoolsがないとのことで、インストールする。

参考:Pythonで一番最初に入れるべきパッケージ
  こちらも参考

setuptoolsは、こちらからダウンロード

ダウンロード後、解凍し、フォルダの中へ移動。

コマンドを実行。
--------------------------------------------------
python ez_setup.py
--------------------------------------------------

インストールできたことを確認するため、コマンドを打って確認
--------------------------------------------------
easy_install
--------------------------------------------------
エラーは出るけど、コマンド自体が存在していることを確認。

setuptoolsがインストールできたので、「MySQL-python」に移動してsetupをリトライ。

コマンド
--------------------------------------------------
python setup.py install --home=~/local
--------------------------------------------------

今度は別のエラーが出る。

エラー内容
--------------------------------------------------
% python setup.py install --home=~/local

running install
Checking .pth file support in /home/username/local/lib/python/
/home/username/local/bin/python -E -c pass
TEST FAILED: /home/username/local/lib/python/ does NOT support .pth files
error: bad install directory or PYTHONPATH

You are attempting to install a package to a directory that is not
on PYTHONPATH and which Python does not read ".pth" files from. The
installation directory you specified (via --install-dir, --prefix, or
the distutils default setting) was:

/home/username/local/lib/python/

and your PYTHONPATH environment variable currently contains:

''

Here are some of your options for correcting the problem:

* You can choose a different installation directory, i.e., one that is
on PYTHONPATH or supports .pth files

* You can add the installation directory to the PYTHONPATH environment
variable. (It must then also be on PYTHONPATH whenever you run
Python and want to use the package(s) you are installing.)

* You can set up the installation directory to support ".pth" files by
using one of the approaches described here:

https://pythonhosted.org/setuptools/easy_install.html#custom-installation-locations

Please make the appropriate changes for your system and try again.
--------------------------------------------------

どうもPYTHONPATHがエラーの原因のようなので、PYTHONPATHの設定を変更する。

ホームディレクトリにある「.cshrc」に以下を追加。
参考:こちら

--------------------------------------------------
setenv PYTHONPATH $HOME/local/lib/python:$HOME/local/lib/python/site-packages

setenv LD_LIBRARY_PATH $HOME/local/lib
--------------------------------------------------
※実際には「$HOME/local/lib/python」というフォルダは存在しない。あるのは「$HOME/local/lib/python2.7」。だけど構わない。

パスの確認は、コンソール画面で
-----------
python
>>>import sys
>>>sys.path
-----------

サーバーに再接続して、ふたたびsetupを試みる。

コマンド
--------------------------------------------------
python setup.py install --home=~/local
--------------------------------------------------

うまくいった。

おまけ。
別に機会に「MySQL for Python」をインストールしたときは、こんなエラーが出た。

エラー内容
--------------------------------------------------
% python setup.py install --home=~/local
running install
error: can't create or remove files in install directory

The following error occurred while trying to add or remove files in the
installation directory:

[Errno 2] No such file or directory: '/home/workroom/local/lib/python/test-easy-install-35897.write-test'

The installation directory you specified (via --install-dir, --prefix, or
the distutils default setting) was:

/home/workroom/local/lib/python/

This directory does not currently exist. Please create it and try again, or
choose a different installation directory (using the -d or --install-dir
option).
--------------------------------------------------
「python」という名前のディレクトリを作ってあげたら解決した。

UWSCでODBCを使ってmysqlに接続する

UWSCでODBCを使ってmysqlに接続したときの覚書。

【環境】
Windows7 64bitで接続。mysqlもlocalhostにある。

1.MySQL用のODBCドライバのインストール

windowsからmysqlに接続するため、MySQL用のODBCドライバをインストールをインストールする。参考

ダウンロードはこちらから

windows7は64bitを利用しているが、UWSCが32bitなので、ドライバは32bit版を選択する。
ダウンロードページで、「login」や「sign up」を求められるが、不要ならその下の「No thanks, just start my download.」のリンクから回避できる。

ダウンロードしたら、インストールする。

2.ODBCにmysqlの情報を設定する

インストールできたら、データソース(ODBC)をこちらから設定する。
---------------------------------
C:\Windows\SysWOW64\odbcad32.exe
---------------------------------

※こちらにあるのは64bit版なので、無効(32bit版windowsなら有効だろう)
---------------------------------
コントロール パネル\すべてのコントロール パネル項目\管理ツール\データ ソース (ODBC)
---------------------------------

設定時、インストールしたドライバが二種類表示されるが「MySQL ODBC 5.x Unicode Driver」を選択。「MySQL ODBC 5.x ANSI Driver」は、日本語WindowsではSHIFT-JISを意味するらしい。

※localhost以外のPCから接続できない場合は、こちら

3.UWSCでmysqlに接続してみる

参考ページ

参考スクリプト
Open メソッド (ADO Recordset)  
Fields コレクション  
FieldsコレクションとFieldオブジェクトの使い方

mysqlに接続するサンプルコード
-----------------------------------------------------------
objConn = CreateOleObj("ADODB.Connection")
objConn.Open("ODBCで作った名前") // コネクション(接続)実行

Dim RS = CreateOleObj("ADODB.Recordset")
Dim StrSQL = "Select * From テーブル名" //クエリ
RS.Open(StrSQL, objConn) // SQL実行 レコードセット取得

While ! RS.EOF
Print_ALLFields(RS) // 全フィールドのプリント
RS.MoveNext // 次のレコードへ
WEnd

sleep(100) //printが消えないように

//全フィールドのプリント
Procedure Print_ALLFields(a_RS)

Dim i, Str
For i = 0 To a_RS.Fields.Count - 1
Str = Str + "[" + i + " " + a_RS.Fields[i].name + " = " + a_RS.Fields[i].value + "]"
Next
Print Str

FEnd
-----------------------------------------------------------

【さくら共用サーバー】pythonでprint出力する

さくら共用サーバーで、pythonを使って、ブラウザに文字を出力する方法。

さくらインターネットスタンダードプランにはあらかじめpythonがインストールされているので、それを利用する。

以下の文字をテキストエディタにコピペして保存。
保存時の拡張子は「.cgi」にする。(「.py」でない。)
-------------------------
#!/usr/local/bin/python
# -*- coding: utf-8 -*-

print "Content-type: text/html\n"
print "hello world "
-------------------------

そして、「www」フォルダ以下に入れる。

-----気をつけるが何点かある-----

1.「/usr/local/bin/python」は自身のサーバー環境を確認。
2.改行コードは「LF」にする。
3.アップロードしたファイル及び、ディレクトリのパーミッションは「755」か「705」にする。
4.「Content-type: text/html」は必須。無いと Internal Server Error になる。詳細はこちら
--------------------------------

さくら共用サーバーにcabochaをインストールする

さくら共用サーバーにcabochaをインストールした際の覚書。

cabochaのインストールや利用方法についてはこちら

前提として、mecab0.97が入っている。
インストール場所は、/home/username/local とする。

1.CRF++をインストールする

----------------------------------------------------
//ダウンロード。「https」だとエラーが出る。
wget http://crfpp.googlecode.com/files/CRF%2B%2B-0.58.tar.gz

tar xzvf CRF++-0.58.tar.gz //解凍

//「$HOME」が「~(チルダ)」だとエラーが出る。
./configure --prefix=$HOME/local

make install //インストール。
----------------------------------------------------

2.cabochaをインストールする

最新版であった「cabocha-0.67」をダウンロードした。
MeCab (0.993以降)が必要と記述されていたが、構わず進めた。

----------------------------------------------------
wget http://cabocha.googlecode.com/files/cabocha-0.67.tar.bz2
----------------------------------------------------

続けて、以下のコマンド。
----------------------------------------------------
tar xzvf cabocha-0.67.tar.bz2
cd cabocha-0.67
./configure --prefix=$HOME/local --with-charset=utf8 --enable-utf8-only LDFLAGS="-L$HOME/local/lib" CPPFLAGS="-I$HOME/local/include" --with-mecab-config=$HOME/local/bin/mecab-config
make
make install
----------------------------------------------------

すると、make installのところでエラー発生!

エラー内容
----------------------------------------------------
morph.cpp: In member function 'virtual bool CaboCha::MorphAnalyzer::parse(CaboCha::Tree*) const':
morph.cpp:197: error: 'mecab_lattice_new' was not declared in this scope
morph.cpp:203: error: 'MECAB_ALLOCATE_SENTENCE' was not declared in this scope
morph.cpp:203: error: 'mecab_lattice_add_request_type' was not declared in this scope
morph.cpp:207: error: 'mecab_lattice_set_sentence2' was not declared in this scope
morph.cpp:209: error: 'mecab_parse_lattice' was not declared in this scope
morph.cpp:211: error: 'mecab_lattice_strerror' was not declared in this scope
morph.cpp:214: error: 'mecab_lattice_get_bos_node' was not declared in this scope
morph.cpp: In static member function 'static void CaboCha::MorphAnalyzer::clearMeCabLattice(mecab_lattice_t*)':
morph.cpp:223: error: 'mecab_lattice_clear' was not declared in this scope
morph.cpp: In static member function 'static void CaboCha::MorphAnalyzer::deleteMeCabLattice(mecab_lattice_t*)':
morph.cpp:228: error: 'mecab_lattice_destroy' was not declared in this scope
*** [morph.lo] Error code 1

Stop in /home/username/local/cabocha-0.67/src.
*** [all-recursive] Error code 1

Stop in /home/username/local/cabocha-0.67.
*** [all] Error code 1

Stop in /home/username/local/cabocha-0.67.
%
----------------------------------------------------

エラー内容の詳細は不明だが、mecabとcabochaのバージョンが合ってないことがエラー原因と当たりをつけて、cabochaのバージョンを下げてリトライ。
(後日、新しい最新のmecab入りにcabocha-0.67を試みたところ、エラーも出ずインストールできた)

cabocha0.60のインストール
----------------------------------------------------
wget http://cabocha.googlecode.com/files/cabocha-0.60.tar.gz
tar xzvf cabocha-0.60.tar.gz
cd cabocha-0.60
./configure --prefix=$HOME/local --with-charset=utf8 --enable-utf8-only LDFLAGS="-L$HOME/local/lib" CPPFLAGS="-I$HOME/local/include" --with-mecab-config=$HOME/local/bin/mecab-config
(make) ← 実行コマンドを読み返したが抜けていた・・・
make install
----------------------------------------------------

あっさりインストールできた。

cabochaを実行
----------------------------------------------------
/home/username/local/bin/cabocha
----------------------------------------------------

※パスも通しておく。パスが通っているにもかかわらずcabochaが実行できない場合は、サーバーに再ログインする。

テキストファイルに書いたpythonスクリプトからcabochaをimportを試みるとエラーになる場合は、こちら

mecabをインストールしたら、これもやる。
----------------------------------------------------
mecabで半角記号が名詞,サ変接続になるのを解決する
----------------------------------------------------

新しいカラムを追加するmysqlクエリ

新しいカラムを既存カラムの後ろに追加するサンプルコード
----------------------------------------------------
ALTER TABLE テーブル名 ADD 追加するカラム名 定義
----------------------------------------------------
新しいカラムの場所指定がなければ、最後に追加される。

新しいカラムを既存カラムの先頭に追加するサンプルコード
----------------------------------------------------
ALTER TABLE テーブル名 ADD 追加するカラム名 定義 FIRST
----------------------------------------------------

既存カラムの後ろに新しいカラムを追加するサンプルコード
----------------------------------------------------
ALTER TABLE テーブル名 ADD 追加するカラム名 定義 AFTER カラム名
----------------------------------------------------

カラムの定義はこんな感じ
----------------------------------------------------
ALTER TABLE list ADD new_colunm text AFTER colunm1
----------------------------------------------------

カラムの定義その2
----------------------------------------------------
ALTER TABLE list ADD new_colunm varchar(20) AFTER colunm1
----------------------------------------------------

windows版mecabにutf-8のシステム辞書を追加する

windows版mecabにシステム辞書を追加する。(unix版はこちら
unicodeの文字も扱いたいので、辞書の文字コードはutf-8とする。

環境: windows 7 (64bit)

windows版のmecab(辞書の文字コードutf-8)が既にインストールされていることが前提。

1.utf-8で書かれた辞書を用意する

こちらのページの1~3を参考

2.インストール済みmecabの辞書をutf-8に保存し直す

windowsにインストールされたmecabの辞書データはsjisで保存されている(インストール時にutf-8を選んだとしても)。拡張子がCSVとdefのファイルが辞書データなのですべてutf-8に保存し直す。(ディレクトリ全体に対してutf-8変換してもいい) ←ダメだった

辞書CSVファイルのパス
---------------------------------------------
C:\Program Files (x86)\MeCab\dic\ipadic
---------------------------------------------

文字コード一括変換のために使用したソフト
KanjiTranslator
「UTF-8(BOM無し)」「改行=CR+LF」← この設定で行った

utf-8に変換したら、追加用の辞書も同じフォルダに放り込む

3.辞書をコンパイルし直す

mecab-dict-indexを実行するので、mecab-dict-index.exeのあるフォルダまでコマンドプロンプトで移動。

mecab-dict-indexの詳細。こちら

mecab-dict-index.exeはここにあった。
------------------------------------------
C:\Program Files (x86)\MeCab\bin
------------------------------------------

実行。
------------------------------------------
mecab-dict-index -d "C:\Program Files (x86)\MeCab\dic\ipadic" -f utf-8 -t utf-8
------------------------------------------
パスの途中の半角スペースが区切りと誤認されないようにパス全体をダブルクォートでくくる。

「アクセスできない」等のエラーが出たら、フォルダを右クリックしてアクセス権を与えておく。

成功すると、4つのファイルができる

ファイルができる場所
------------------------------------------
C:\Program Files (x86)\MeCab\bin
------------------------------------------

ファイル名
------------------------------------------
char.bin
sys.dic
unk.dic
matrix.bin
------------------------------------------

4.できたファイルを正しい場所に移動させる

移動場所。元あるファイルと置換となる。
------------------------------------------
C:\Program Files (x86)\MeCab\dic\ipadic
------------------------------------------

ファイル移動の際アクセス権限がないとエラーが出たら、フォルダに権限を与えて、一度デスクトップにコピーして、目的のフォルダへ移動。(フォルダからフォルダへの移動ができなかった)
mecabは終了させておく。起動してると元ファイルが削除できない。

以上。

秀丸エディタのキー割り当て一覧(デフォルト)

秀丸エディタのキー割り当て一覧。

行の選択がしたくて調べた。
行の選択は左トリプルクリック。

初期設定時のキー割り当て一覧
-----------------------------------------------
F1 = 秀丸エディタヘルプ
F3 = 下候補
F4 = (標準の動作:次の結果)
F5 = 単語をコピー
F6 = 分割ウィンドウ切り替え
F7 = 切り抜き
F8 = コピー
F9 = 貼り付け
F10 = タグジャンプ
F11 = アウトライン解析...
F12 = 行番号表示/非表示
左ダブルクリック = 単語選択(全部)
左トリプルクリック = 行の選択
右クリック = メニュー8:右ボタン
常駐秀丸エディタのダブルクリック = 新規作成
Shift+F1 = 記録開始/記録終了
Shift+F2 = 再生
Shift+F3 = 上候補
Shift+F4 = (標準の動作:前の結果)
Shift+F5 = 行をコピー
Shift+F6 = 選択開始
Shift+F7 = 追加切り抜き
Shift+F8 = 追加コピー
Shift+F9 = BOX貼り付け
Shift+F10 = メニュー8:右ボタン
Shift+Enter = 空行挿入
Ctrl+F1 = 外部ヘルプ
Ctrl+F4 = ファイルを閉じる
Ctrl+F6 = 次の秀丸エディタ
Ctrl+F10 = ダイレクトタグジャンプ
Ctrl+Enter = 行削除
Ctrl+Del = 単語削除(カーソルから後ろ)
Ctrl+Up = 高速上移動
Ctrl+Down = 高速下移動
Ctrl+Right = 単語右
Ctrl+Left = 単語左
Ctrl+A = すべてを選択
Ctrl+C = コピー
Ctrl+F = 検索...
Ctrl+G = 指定行...
Ctrl+H = バックスペース
Ctrl+I = タブ
Ctrl+J = 改行
Ctrl+K = 対応する括弧に移動
Ctrl+L = 最後に編集した所
Ctrl+M = 改行
Ctrl+N = 新規作成
Ctrl+O = 開く...
Ctrl+P = 印刷...
Ctrl+Q = メニュー3:Ctrl-Q
Ctrl+R = 置換...
Ctrl+S = 上書き保存
Ctrl+V = 貼り付け
Ctrl+X = 切り抜き
Ctrl+Y = やり直しのやり直し
Ctrl+Z = やり直し
Ctrl+[ = {に移動
Ctrl+] = }に移動
Ctrl+< = 単語左 Ctrl+> = 単語右
Shift+Ctrl+F1 = 外部ヘルプ2
Shift+Ctrl+F6 = 前の秀丸エディタ
Shift+Ctrl+F10 = バックタグジャンプ
Shift+Ctrl+F = 検索(上)...
Shift+Ctrl+N = 下の強調行
Shift+Ctrl+P = 上の強調行
Shift+Ctrl+< = 単語の先頭に移動 Shift+Ctrl+> = 単語の最後に移動
Alt+Bksp = (標準の動作:やり直し)
Alt+Enter = (標準の動作:単語補完)
Alt+Up = (標準の動作:前の折りたたみ可能行)
Alt+Down = (標準の動作:次の折りたたみ可能行)
Alt+Right = (標準の動作:展開)
Alt+Left = (標準の動作:折りたたみ)
Alt+[ = (標準の動作:部分編集)
Alt+] = (標準の動作:部分編集解除)
Alt+Shift+Bksp = (標準の動作:やり直しのやり直し)

メニュー1:ファイル
N|新規作成
O|開く...
S|上書き保存
C|ファイルを閉じる
B|別ファイルへの追加保存
L|閉じて開く...
P|ファイル名変更...
U|再読み込み
W|上書き禁止

メニュー2:C言語機能
P|上の強調行
N|下の強調行
--------------------
[|{に移動
]|}に移動
--------------------
C|アウトライン解析...
S|強調行の範囲選択
H|外部ヘルプ
T|タグジャンプ
D|ダイレクトタグジャンプ
B|バックタグジャンプ
G|tagsファイルの作成...

メニュー3:Ctrl-Q
S|行頭に移動
D|行末に移動
--------------------
R|ファイルの先頭
C|ファイルの最後
--------------------
E|画面の先頭
X|画面の最後
--------------------
F|検索...
A|置換...
--------------------
[|{に移動
]|}に移動

メニュー8:右ボタン
Z|やり直し
--------------------
V|貼り付け
A|すべてを選択

選択中右ボタン
X|切り抜き
X|コピー
X|貼り付け
--------------------
X|引用付きコピー
X|追加切り抜き
X|追加コピー
--------------------
X|削除
--------------------
X|TO UPPER CASE
X|to lower case
--------------------
X|ハンカクに変換
X|全角ひらがなに変換
X|全角カタカナに変換
--------------------
X|TAB -> 空白 変換
X|空白 -> TAB 変換
--------------------
X|インデント
X|逆インデント
-----------------------------------------------

ちなみにこの一覧は、「その他」-「キー割り当て」-「一覧表作成」で出力できる。

【mysql】CSVをload dataするときに気をつけること

mysqlにおいて、CSVをload dataするときに気をつけること。
うっかりミスを防ぐための自分用おぼえ書き。

1.CSVファイルの改行コードを必ず「LF(\n)」にする

「CR + LF」だと、行の区切りが正しく伝わらず、おかしなところでデータが分けられる。

また、データに改行を含まないときは、行の終わりを明示しておくとハマる可能性が減る。

----------------------------------
load data local infile "/home/username/www/text.csv" into table テーブル名 fields terminated by ',' enclosed by '"' lines terminated by '\n'
----------------------------------

2.NULLが怪しいと思ったら\Nに変えてみる

NULLは\Nで表すらしい。

3.Windows内のCSVファイルでもパスの区切りは「/」(スラッシュ)

通常Windowsのパスの区切りは\(バックスラッシュ)。
しかし、Windowsにインストールしたxamppのmysqlを利用する場合、CSVファイルのパス指定は「/」(スラッシュ)で行う。

コマンドプロンプトで指定
------------------------------------------------------
○ load data infile "C:/Users/username/Desktop/test.csv" into table ~
× load data infile "C:¥Users¥username¥Desktop¥test.csv" into table ~
------------------------------------------------------