Pythonで実行するopennlp POSTagger
と、結果がうまくいきません。subprocess.call
しかし、同じコマンドを端末に入力すると、結果は正しいです。
opennlp
いくつかのテストの後、これはモデル ファイルを正しく読み込めなかったことが原因だと思いますが、何が問題なのですか? モデルは中国語でトレーニングされており、Python 2.7 を使用しています。
OpenNLP は警告やエラーなしで実行されますが、入力文に完全に間違ったタグを付けます。ターミナルで正しいタグを提供します。エンコーディングの問題だと思いますが、よくわかりません。
これがコードです。特別なものではなく、ASCII 文字のみが含まれています。このコマンドを出力して端末にコピーすると、正しい結果が得られます。
これで、ロケール/エンコーディングの問題であることがわかりました (strace でスクリプトをデバッグします)。しかし、python ロケールをen_US.utf-8
orに設定しても意味がありませんzh_CN.utf-8
。私のシェルロケール設定はzh_CN.utf-8
.
opennlp_path = './opennlp/bin/opennlp'
pos_model = 'train.pos.model'
pos_predict_cmd = [opennlp_path, 'POSTagger', pos_model]
subproc = call(pos_predict_cmd)