質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Q&A

解決済

1回答

2909閲覧

Python3で呼び出されたMecabの結果をWebブラウザ上で表示させる際のエラーメッセージについての質問です。

testcase

総合スコア18

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

1グッド

0クリップ

投稿2018/09/04 19:44

以前ご相談させていただいた内容の関連質問です。

表題のように当時一応Webブラウザ上にPython3で呼び出されたMecabの結果を表示することができました。

その際のご助言にもありましたが、Xserverでの運用の限界を感じまして、
VSPをお借りして再構築をしていたのですが、

Python3

1#!/usr/bin/python3 2# -*- coding: utf-8 -*- 3 4import sys 5import io 6sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf8') 7 8import os 9os.environ['MECAB_PATH'] = '/.../mecab/lib/libmecab.so/libmecab.so.2' 10os.environ['MECAB_CHARSET'] = 'utf8' 11 12import cgi 13# enable debugging 14import cgitb 15cgitb.enable() 16 17from natto import MeCab 18import traceback 19 20text = "今日は台風すごかったね。" 21 22try: 23 mc = MeCab() 24 ma = mc.parse(text) 25 26except: 27 traceback_txt = traceback.format_exc() 28 29print("Content-Type: text/html; charset=utf8\n") 30print(""" 31<!DOCTYPE html> 32<html> 33<head> 34<meta charset="utf8"> 35<title>形態素解析</title> 36</head> 37<body> 38<pre> 39""") 40print(ma) 41print(traceback_txt) 42print(""" 43</pre> 44</body> 45</html> 46""")

のようにしたところ、

Python3

1Traceback (most recent call last): 2 File "/.../mecab_faq_form.py", line 139, in 3 mc = MeCab() 4 File "/.../python3.6/site-packages/natto/mecab.py", line 168, in __init__ 5 raise MeCabError(self._ERROR_NULLPTR.format('Model')) 6natto.api.MeCabError: Could not initialize MeCab Model

解析結果は表示されずに上記のようなエラーメッセージがブラウザ上に表示されてしまいました。

最初はこれまでの質問とかを参照して辞書の割当が上手く行ってないのかと思い、

Python3

1% mecab -D

したところ、きちんと表示されました。

この状況は、これまで上手く動作していたXserverでの環境から移行した結果でして、
基本的にPathの変更以外はプログラム上で変えたところはございません。

OSは両者とも CentOS 7で、移行前が7.1、移行後が7.5
Pythonのバージョンは以降前が3.4、移行後が3.6
Apacheは移行前が2.2、移行後が2.4
MeCabは共に0.996です。

Apacheのエラーログですが、

Python3

1Could not initialize MeCab Model, referer: http://hoge.com/test.py

後はpipやAnacondaで入れたものの依存関係になろうかと思うのですが、
書こうとしましたら文字数制限でだめでした。

このような状況ではありますが、ご助言いただけますと幸甚です。
よろしくお願いします。

tachikoma👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2018/09/05 01:00

ブラウザではなくターミナルから実行した場合は正常に動作するのでしょうか?それとも同様の問題が発生するのでしょうか?
testcase

2018/09/05 02:33

ご質問ありがとうございます。ターミナルからですと正常に動作するようです。エラーメッセージも表示されません。
t_obara

2018/09/05 08:20

問題の切り分けとして、ターミナルで動作するということであれば、Webサーバーでの動作環境とターミナルでの動作環境の違いがポイントなのでは無いでしょうか。移行前は動作しているとのことであれば、そちらでの動作環境の違いも比較すると見えてくるかもしれません。
testcase

2018/09/06 15:23

ご助言ありがとうございます。さんざん考えてなんとか自己解決しました。ありがとうございました。
guest

回答1

0

自己解決

さんざん試行錯誤した結果、
急にひらめいて解決しました。

根拠のない断言ですが、
やはりMeCabが初期化できないのは辞書関係だと思います。

ターミナルですと辞書までのPathがつながっているのに、
Webだと「初期化できない」ということで、
これまでのライブラリへのMECAB_PATHに加えて、
環境変数MECABRCをos.pathで追加しましたところ、
あっさりと動作しました。

旧環境ではMECABRCがなくても動いていましたので盲点でした。

どうもありがとうございました。

投稿2018/09/06 15:29

testcase

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問