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

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

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

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Mecab

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

Q&A

解決済

2回答

1192閲覧

Docker環境でmecab-python3の辞書パス(NEologd)が通らずにエラーを吐き出す

hastings

総合スコア2

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Mecab

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

0グッド

0クリップ

投稿2023/02/18 10:21

編集2023/02/19 02:29

実現したいこと

python-mecab3に辞書パス(NEologd)を通したい
・Django Webフレームワークにおいて、python-mecab3と辞書mecab-unidic-neologdを用いた形態素解析アプリを開発したい

前提

・Django Webフレームワークにて、pyhon-mecab3mecab-unidic-neologdを用いたアプリを開発している
・Django テスト環境では問題なく辞書パス(NEologd)が通り、期待通りの形態素解析ができる
pip install unidic-liteをインストールしているため、mecab = MeCab.Tagger()の場合は問題なく稼働する

・Docker環境になると、表題の通り、辞書パスが通らずに下記のエラーが発生する
・辞書パス(NEologd)を指定しない場合は、Docker環境上でも形態素解析が行えるが、期待された結果にならない
・辞書データについては/reviewer/mecab/dic/mecab-unidic-neologdに格納している

発生している問題・エラーメッセージ

・Docker環境上で、下記のコードを実行した場合、mecab-python3に辞書パス(NEologd)が通らずに、下記のエラーを吐き出す

Djangoデバッグで表示されたエラー

1RuntimeError at / 2---------------------------------------------------------- 3 4Failed initializing MeCab. Please see the README for possible solutions: 5 6 https://github.com/SamuraiT/mecab-python3#common-issues 7 8If you are still having trouble, please file an issue here, and include the 9ERROR DETAILS below: 10 11 https://github.com/SamuraiT/mecab-python3/issues 12 13issueを英語で書く必要はありません。 14 15------------------- ERROR DETAILS ------------------------ 16arguments: -d /django/reviewer/mecab/dic/mecab-unidic-neologd 17[pos != std::string::npos] format error: 18---------------------------------------------------------- 19Request Method: POST 20Request URL: http://localhost:8000/ 21Django Version: 4.1.4 22Exception Type: RuntimeError 23Exception Value: 24---------------------------------------------------------- 25 26Failed initializing MeCab. Please see the README for possible solutions: 27 28 https://github.com/SamuraiT/mecab-python3#common-issues 29 30If you are still having trouble, please file an issue here, and include the 31ERROR DETAILS below: 32 33 https://github.com/SamuraiT/mecab-python3/issues 34 35issueを英語で書く必要はありません。 36 37------------------- ERROR DETAILS ------------------------ 38arguments: -d /django/reviewer/mecab/dic/mecab-unidic-neologd 39[pos != std::string::npos] format error: 40---------------------------------------------------------- 41Exception Location: /usr/local/lib/python3.10/site-packages/MeCab/__init__.py, line 135, in __init__ 42Raised during: reviewer.views.home_view 43Python Executable: /usr/local/bin/python 44Python Version: 3.10.10 45Python Path: 46['/django', 47 '/usr/local/lib/python310.zip', 48 '/usr/local/lib/python3.10', 49 '/usr/local/lib/python3.10/lib-dynload', 50 '/usr/local/lib/python3.10/site-packages'] 51Server time: Sat, 18 Feb 2023 19:11:28 +0900

なお、通常ドキュメントに記載されていた通り、パスが通らない場合は、以下の通り[ifs] no such file or directoryと表示される。(パス自体はDjangoテスト環境で通っている。)

------------------- ERROR DETAILS ------------------------ arguments: -d /django/reviewer/mecab/dic [ifs] no such file or directory: /django/reviewer/mecab/dic/dicrc ----------------------------------------------------------

エラーに[pos != std::string::npos] format error: と表示されていることが関係していると推測される。

該当のソースコード

python

1def mecab_text(text): 2 # MeCabのインスタンスを作成(辞書はmecab-ipadic-neologdを使用) 3 # dicdir = "-d ./reviewer/mecab/dic/mecab-unidic-neologd" # Djangoテスト環境上でのパス 4 dicdir = "-d /django/reviewer/mecab/dic/mecab-unidic-neologd" 5 mecab = MeCab.Tagger(dicdir) 6 7 # 形態素解析 8 node = mecab.parseToNode(text) 9 10 # 形態素解析した結果を格納するリスト 11 wordlist = [] 12 13 while node: 14 # 名詞のみリストに格納する 15 if node.feature.split(",")[0] == "名詞": 16 wordlist.append(node.surface) 17 # 形容詞を取得、elifで追加する 18 elif node.feature.split(",")[0] == "形容詞": 19 wordlist.append(node.surface) 20 # 動詞を取得、elifで追加する 21 # elif node.feature.split(',')[0] == '動詞': 22 # wordlist.append(node.surface) 23 node = node.next 24 return wordlist 25

docker

1FROM python:3.10-buster 2ENV PYTHONBUFFERED=1 3 4WORKDIR /django 5COPY requirements.txt requirements.txt 6 7RUN pip3 install -r requirements.txt 8COPY . . 9 10CMD python manage.py runserver 0.0.0.0:8000

yml

1version: "3.10" 2services: 3 app: 4 build: . 5 volumes: 6 - .:/django 7 ports: 8 - 8000:8000 9 image: ez-app-reviewer-repository:latest 10 container_name: django_container 11 command: python manage.py runserver 0.0.0.0:8000

試したこと

・python-mecab3のドキュメントの通読
https://github.com/SamuraiT/mecab-python3
・先行事例の検索
・Dockerfileの書き換え
・ChatGPTへの質問

最後に

一日ほど方法を探しましたが、解決策が見つかりませんでしたので質問させていただきました。
お手数ではございますが、何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

通常なら/etc/mecabrcの位置にあるmecabrcファイルを用意・あるいは
オプションで指定すればどうでしょう?
(たとえば/django/reviewer/mecab/etc/mecabrc)

python

1mecab_args = "-r /django/reviewer/mecab/etc/mecabrc " \ 2 + "-d /django/reviewer/mecab/dic/mecab-unidic-neologd" 3mecab = MeCab.Tagger(mecab_args)

とでもすればうまくいくのでは?

投稿2023/02/18 14:39

ujimushi_sradjp

総合スコア2091

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

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

hastings

2023/02/19 02:26 編集

ご回答いただきありがとうございます。 下記の記述の`mecabrc`ファイルを`reviewer/mecab/etc/mecabrc`フォルダに格納の上、上記のコードに書き換えさせていただきましたが、同様のエラーが発生しました。 ──────────── ; Configuration file of MeCab ; ; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $; ; dicdir = /var/lib/mecab/dic/debian ; userdic = /home/foo/bar/user.dic ; output-format-type = wakati ; input-buffer-size = 8192 ; node-format = %m\n ; bos-format = %S\n ; eos-format = EOS\n ──────────── ------------------- ERROR DETAILS ------------------------ arguments: -r /django/reviewer/mecab/etc/mecabrc -d /django/reviewer/mecab/dic/mecab-unidic-neologd [pos != std::string::npos] format error: ----------------------------------------------------------
guest

0

自己解決

その後、検証を行ったところ、Docker(Linux)環境で日本語の環境が整っていないことが原因でした。下記の内容(フォントインストール)をDockerfileに追記して辞書パスを通したところ、エラーを吐き出すことなく形態素解析が行えました。

dockerfile

1RUN apt-get update &&\ 2 apt-get install -y wget &&\ 3 apt-get install -y zip unzip &&\ 4 apt-get install -y fontconfig 5RUN wget https://moji.or.jp/wp-content/ipafont/IPAexfont/IPAexfont00301.zip 6RUN unzip IPAexfont00301.zip 7RUN mkdir -p /usr/share/fonts/ipa 8RUN cp IPAexfont00301/*.ttf /usr/share/fonts/ipa 9RUN fc-cache -fv 10 11ENV LANG ja_JP.UTF-8 12ENV LANGUAGE ja_JP:ja 13ENV LC_ALL ja_JP.UTF-8

ただし、辞書pathを通した状態で形態素解析を行った場合、処理速度が著しく低下するという新たな問題が発生します。その点については、現在検証中です。

本件につきましては、一旦クローズとさせていただきます。ありがとうございました。

投稿2023/02/21 02:05

編集2023/02/21 03:07
hastings

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問