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

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

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

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

Python

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

Q&A

解決済

1回答

565閲覧

pythonでのmecabのエラーの解決法がわかりません

fghgfesgszhyj

総合スコア1

Mecab

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

Python

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

0グッド

0クリップ

投稿2024/07/30 15:26

編集2024/08/01 06:59

実現したいこと

エラー箇所の改善方法を教えてください

発生している問題・分からないこと

tagger = MeCab.Tagger(r'-d "C:\Program Files (x86)\MeCab\dic\ipadic" -u "C:\Program Files (x86)\MeCab\dic\NEologd\NEologd.20200910-u.dic"')
を実行時にエラーが出ます

エラーメッセージ

error

1Traceback (most recent call last): 2 File "mecab.py", line 6, in <module> 3 tagger = MeCab.Tagger(r'-d "C:\Program Files (x86)\MeCab\dic\ipadic" -u "C:\Program Files (x86)\MeCab\dic\NEologd\NEologd.20200910-u.dic"') 4 File "C:\Users\○○\anaconda3\envs\python3716\lib\site-packages\MeCab.py", line 355, in __init__ 5 _MeCab.Tagger_swiginit(self, _MeCab.new_Tagger(*args)) 6RuntimeError

該当のソースコード

python3.7

1# -*- coding: utf-8 -*- 2import MeCab 3 4#tagger = MeCab.Tagger(r'-d "C:\\Program Files (x86)\\MeCab\\dic\\ipadic"') 5tagger = MeCab.Tagger(r'-d "C:\Program Files (x86)\MeCab\dic\ipadic" -u "C:\Program Files (x86)\MeCab\dic\NEologd\NEologd.20200910-u.dic"') 6 7def tokenize(text): 8 words = tagger.parse(text) 9 return {"words": words} 10 11text1="2024年7月31日の晩御飯はカレーです" 12result = tokenize(text1) 13print(result)

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

システム環境変数のPathに「C:\Program Files (x86)\MeCab\bin」を追加
・「pip install mecab-python3」を実行すると
「error: command 'C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.40.33807\bin\HostX86\x64\cl.exe' failed with exit code 2
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for mecab-python3
Running setup.py clean for mecab-python3
Failed to build mecab-python3
ERROR: Could not build wheels for mecab-python3, which is required to install pyproject.toml-based projects」
というエラーが生じ、数時間格闘したものの解決できなかったので「pip install mecab」にてMeCabを使用しています。
・「""」や空白を取り外しても同じエラーが生じました。
・参考にならないかもしれませんが「-dや-u」を指定したときにこのエラーが生じることを確認しました。(「mecab = MeCab.Tagger(r'C:\Program Files\MeCab\dic\NEologd\NEologd.20200910-u.dic')」の場合辞書は反映されませんでしたが実行自体は出来ました。)

「tagger = MeCab.Tagger(r'-d "C:\MeCab\dic\ipadic" -u "C:\MeCab\dic\NEologd\NEologd.20200910-u.dic"')」でも全く同じエラーが出ました。

補足

python3.10や3.11では動作を確認したのですが3.7でないと機能しないものを使いたいのでエラーを解決させたいです。
neologdのインストール方法はこちらを参考にしました。
https://nekonogorogoro.com/neologd_setup/

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

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

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

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

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

quickquip

2024/07/31 09:46

「あなたがやったこと」の情報は回答のコメントになど書かずに質問に書いてください あとからでも編集できます
guest

回答1

0

ベストアンサー

MeCab.Taggerの引数の文字列の中で、-で始まるオプション指定の次にディレクトリやファイルを指定するものに対して、空白が入っているディレクトリを"で括って指定できるのはmecab-python3 パッケージが独自に入れた拡張要素です。MeCabの公式Pythonバインディングや、mecabパッケージでは、空白を含むディレクトリやファイルは取り扱えません。(というか"は引数の一部に認識されるだけですから)
辞書を空白が入ってないディレクトリにコピーして使うのが手っ取り早いでしょう。


mecab = MeCab.Tagger('hoge')

のように意味を持たない(=そもそもオプションではない)引数を指定しても特にエラーになりませんでした。
したがって

mecab = MeCab.Tagger(r'C:\Program Files\MeCab\dic\NEologd\NEologd.20200910-u.dic')

C:\ProgramFiles\MeCab\dic\NEologd\NEologd.20200910-u.dic という意味がないオプションが2つ渡され、ただ無視されているだけと推測します。
(mecabコマンドだと解析対象ファイルの指定にあたるものですから、Taggerのコンストラクタでは意味がないものとして無視するという挙動は特に不思議ではない気はします。C++のコードの中でどこの部分が無視する挙動を生んでいるのかは推量できませんでした)

投稿2024/07/30 16:09

編集2024/08/01 02:23
quickquip

総合スコア11202

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

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

fghgfesgszhyj

2024/07/31 06:24

・「pip install mecab-python3」を実行すると 「error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\VC\\Tools\\MSVC\\14.40.33807\\bin\\HostX86\\x64\\cl.exe' failed with exit code 2 [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for mecab-python3 Running setup.py clean for mecab-python3 Failed to build mecab-python3 ERROR: Could not build wheels for mecab-python3, which is required to install pyproject.toml-based projects」 というエラーが生じ、数時間格闘したものの解決できなかったので「pip install mecab」にてMeCabを使用しています。 ・「""」や空白を取り外しても同じエラーが生じました。 ・参考にならないかもしれませんが「-dや-u」を指定したときにこのエラーが生じることを確認しました。(「mecab = MeCab.Tagger(r'C:\Program Files\MeCab\dic\NEologd\NEologd.20200910-u.dic')」の場合辞書は反映されませんでしたが実行自体は出来ました。)
quickquip

2024/07/31 06:41 編集

「空白が入って(いる)ディレクトリを"で括って指定できるのはmecab-python3 パッケージが独自に入れた拡張要素です」と回答した通りです (脱字に気付いたので訂正しました)
quickquip

2024/07/31 10:04 編集

(回答に移動)
fghgfesgszhyj

2024/07/31 17:06

すみません、恐らく認識のずれが生じています。 3.10や3.11ではこのソースコードで正しく実行されたので空白や"の有無ではなくpythonのバージョンが3.7であるからこそのエラーだと思っています。 情報ありがとうございます。質問後にやったことも編集で追記します。
quickquip

2024/08/01 00:59

Pythonのバージョンは関係なくて、mecabパッケージとmecab-python3パッケージの機能の差の話です
fghgfesgszhyj

2024/08/01 06:58

お願いします、文章を読んでください Pythonが3.10、3.11の時には実行できています。 「tagger = MeCab.Tagger(r'-d "C:\MeCab\dic\ipadic" -u "C:\MeCab\dic\NEologd\NEologd.20200910-u.dic"')」でも全く同じエラーが出ました。
quickquip

2024/08/01 08:22

3.10 3.11 では mecab-python3 パッケージを使っていたのではないですか? 「neologdのインストール方法はこちらを参考にしました」のページは mecab-python3 になってますし
quickquip

2024/08/01 08:25

> tagger = MeCab.Tagger(r'-d "C:\MeCab\dic\ipadic" -u "C:\MeCab\dic\NEologd\NEologd.20200910-u.dic"') だと "C:\MeCab\dic\ipadic" という ダブルクォートで始まってダブルクォートで終わるファイル名を開こうとしてしまうのでダメで、 tagger = MeCab.Tagger(r'-d C:\MeCab\dic\ipadic -u C:\MeCab\dic\NEologd\NEologd.20200910-u.dic') としないといけません
quickquip

2024/08/01 08:28

だってPython3.11にmecabは素直に入りませんよね? https://pypi.org/project/mecab/#files Python3.10 と Python 3.11 では mecab-python3 を Python3.7 では mecabパッケージ を使って作業しているのではないですか?
fghgfesgszhyj

2024/08/01 10:50

すみません、「pip uninstall mecab-python3」を実行すると同じエラーが出たのでその通りでした... tagger = MeCab.Tagger(r'-d C:\MeCab\dic\ipadic -u C:\MeCab\dic\NEologd\NEologd.20200910-u.dic') にすると解決しました。 この数日間知識が足りてない私に付き合ってくださりありがとうございました!
quickquip

2024/08/02 01:20 編集

mecabとmecab-python3 の両方がインストールされて、意図せずmecab-python の方が使われていたということですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問