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

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

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

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

Python

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

Q&A

解決済

1回答

9008閲覧

pythonでMeCabを使おうとするとエラー

asibarai

総合スコア6

Mecab

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

Python

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

0グッド

0クリップ

投稿2020/09/17 11:45

編集2020/09/18 07:11

#前提・実現したいこと
pythonでMeCabによる形態素解析をしようと思っています。
しかし、以下のプログラムを実行しようとしたところ、エラーを吐いていしまいます。
一部のモード("-Owakati"と”mecabrc”)は実行できるのですが、”-Ochasen”は実行できません。考えられる原因や改善策等ありましたら教えていただきたいです。

python

1import sys 2import MeCab 3m = MeCab.Tagger ("-Ochasen") 4print(m.parse ("すもももももももものうち")) 5

<エラー内容>

arguments: -Ochasen error message: [!tmp.empty()] unknown format type [chasen] Traceback (most recent call last): File "C:/Users/名前/PycharmProjects/youyaku/genngosyori.py", line 3, in <module> m = MeCab.Tagger ("-Ochasen") File "C:\Users\名前\AppData\Local\Programs\Python\Python38\lib\site-packages\MeCab\__init__.py", line 124, in __init__ super(Tagger, self).__init__(args) RuntimeError

#補足(FW/ツールのバージョンなど)
pycharmを利用しています。
OS:windows
pythonバージョン:3.8.5

追記

ターミナルで"mecab -O chasen"を「犬が歩いた」で実行した結果です

C:\Users\名前\PycharmProjects\youyaku>mecab -O chasen
犬が歩いた
犬が 犬が 犬が 險伜捷-荳
烽「 烽「 烽「 蜷崎ゥ・繧オ螟画磁邯
た た た 險伜捷-荳
EOS


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

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

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

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

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

guest

回答1

0

ベストアンサー

辞書が置いてあるディレクトリにあるdicrcというファイルにフォーマットの設定がないためです。

http://taku910.github.io/mecab/format.html

の一番下です。


辞書がUTF-8でできていて、辞書が置いてあるディレクトリが空白を含んでいないなら、

python

1m = MeCab.Tagger ("-d 辞書のディレクトリ -O chasen")

のように指定すればいいと思います。

投稿2020/09/17 12:19

編集2020/09/18 04:03
quickquip

総合スコア11027

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

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

asibarai

2020/09/17 13:52

回答いただきありがとうございます。 dicrcファイルの中は下記の様になっていました。 既にChaSenはありましたがこれでは設定されていないのでしょうか。 ``` ; ; Configuration file of IPADIC ; ; $Id: dicrc,v 1.4 2006/04/08 06:41:36 taku-ku Exp $; ; cost-factor = 800 bos-feature = BOS/EOS,*,*,*,*,*,*,*,* eval-size = 8 unk-eval-size = 4 config-charset = SHIFT-JIS ; yomi node-format-yomi = %pS%f[7] unk-format-yomi = %M eos-format-yomi = \n ; simple node-format-simple = %m\t%F-[0,1,2,3]\n eos-format-simple = EOS\n ; ChaSen node-format-chasen = %m\t%f[7]\t%f[6]\t%F-[0,1,2,3]\t%f[4]\t%f[5]\n unk-format-chasen = %m\t%m\t%m\t%F-[0,1,2,3]\t\t\n eos-format-chasen = EOS\n ; ChaSen (include spaces) node-format-chasen2 = %M\t%f[7]\t%f[6]\t%F-[0,1,2,3]\t%f[4]\t%f[5]\n unk-format-chasen2 = %M\t%m\t%m\t%F-[0,1,2,3]\t\t\n eos-format-chasen2 = EOS\n ```
quickquip

2020/09/17 23:26

設定されてますね。このdicrcが使われていないのでは? という判断になると思います。
asibarai

2020/09/18 02:46

pythonで"chasen"を使おうとするとエラーが出ますが、ターミナルで直接"mecab -O chasen"を入力した場合は正しく動くみたいです。 pythonの方でこのdicrcファイルを使うように指定したい場合は、何を書き換えればよいでしょうか。
quickquip

2020/09/18 03:10

質問者さんのマシン上で、なにがどこにあるかわからないのでサジェスチョンできません。 こちら pythonのmecab用モジュールはmecab (pip install mecab) mecabが64bit私家版 https://github.com/ikegami-yukino/mecab/releases で、mecabに付いてくるipadicを使っていて特に問題ありません。 mecab(64bitか32bitか)、mecabモジュール、辞書をどうしたのか? など質問に追記していただけると、なにか書けるかもしれません。 あと「ターミナルで直接"mecab -O chasen"を入力した場合は正しく動くみたいです」が"どういう状態を正しく動く"と言っているのか気になります。こちらも質問に追記していただけますか? Python3でmecabを使おうと思ったら、私の考える"正しく動く"は以下のような感じなのですが。 --- >mecab -O chasen 犬が歩いた 犬が 犬が 犬が 險伜捷-荳€闊ャ 烽「 烽「 烽「 蜷崎ゥ・繧オ螟画磁邯 た た た 險伜捷-荳€闊ャ EOS ---
quickquip

2020/09/18 04:00

> 質問者さんのマシン上で、なにがどこにあるかわからないのでサジェスチョンできません。 はちょっと勘違いでした。回答に追記します。
asibarai

2020/09/18 07:13

https://hassiweb-programming.blogspot.com/2017/08/mecabwindows-10-64-bitpython.html こちらのサイトを参考にmecabを入れていましたが、改善できないので 回答者様から提示いただいたサイトからmecabを入れなおしてみました。 入れなおしてからはmecabモジュール、辞書は特に触っていませんが、状況変わらずです。 追記していただいた内容を試しましてみましたが以下のようなエラーが吐き出されます。 <プログラム> import sys import MeCab m = MeCab.Tagger ("-d C:\ProgramData\MeCab\etc..\dic\ipadic\sys.dic -O chasen") print(m.parse ("すもももももももものうち")) <エラー> arguments: -d C:\ProgramData\MeCab\etc..\dic\ipadic -O chasen error message: [ifs] no such file or directory: C:ProgramDataMeCabetc..dicipadic\dicrc Traceback (most recent call last): File "C:/Users/名前/PycharmProjects/youyaku/genngosyori.py", line 3, in <module> m = MeCab.Tagger ("-d C:\ProgramData\MeCab\etc..\dic\ipadic -O chasen") File "C:\Users\名前\AppData\Local\Programs\Python\Python38\lib\site-packages\MeCab\__init__.py", line 124, in __init__ super(Tagger, self).__init__(args) RuntimeError ----------- パスが通っていないか、プログラム内のディレクトリを間違っているかのどっちかとは思いますが、下2つのディレクトリ以外で登録が必要なパスや、指定した辞書のディレクトリに間違い等ありますでしょうか。 環境変数 Path  C:\ProgramData\MeCab\bin MECABRC  C:\ProgramData\MeCab\etc\mecabrc <辞書情報> C:\Users\名前>mecab -D filename: C:\ProgramData\MeCab\etc..\dic\ipadic\sys.dic version: 102 charset: UTF-8 type: 0 size: 392126 left size: 1316 right size: 1316 -----
asibarai

2020/09/18 07:15 編集

質問の方にターミナルで"mecab -O chasen"で「犬が歩いた」を実行した結果を追記しました
quickquip

2020/09/18 07:28

m = MeCab.Tagger (r"-d C:\ProgramData\MeCab\etc..\dic\ipadic\sys.dic -O chasen") にしてください。 \ をエスケープ文字に解釈されないよう r"" リテラルを使うのがいいです。
asibarai

2020/09/18 08:37

教えていただいたようにr""リテラルを活用しましたが、 変わらず同じエラーです。 <プログラム> import sys import MeCab m = MeCab.Tagger (r"-d C:\ProgramData\MeCab\etc..\dic\ipadic\sys.dic -O chasen") print(m.parse ("すもももももももものうち")) <エラー> arguments: -d C:\ProgramData\MeCab\etc..\dic\ipadic\sys.dic -O chasen error message: [ifs] no such file or directory: C:ProgramDataMeCabetc..dicipadicsys.dic\dicrc Traceback (most recent call last): File "C:/Users/名前/PycharmProjects/youyaku/genngosyori.py", line 3, in <module> m = MeCab.Tagger (r"-d C:\ProgramData\MeCab\etc..\dic\ipadic\sys.dic -O chasen") File "C:\Users\名前\AppData\Local\Programs\Python\Python38\lib\site-packages\MeCab\__init__.py", line 124, in __init__ super(Tagger, self).__init__(args) RuntimeError
quickquip

2020/09/18 09:21

ああ。 m = MeCab.Tagger (r"-d C:\ProgramData\MeCab\etc..\dic\ipadic -O chasen") ですね。
asibarai

2020/09/18 11:37

ipadicの方が辞書なのですね。 教えていただいたディレクトに変更しましたが、同じエラーが吐き出されます。。。
quickquip

2020/09/18 15:30

ここには error message: [ifs] no such file or directory: C:ProgramDataMeCabetc..dicipadicsys.dic\dicrc Traceback とあって \ (Windowsのコマンドプロンプトなら円記号?)が見えませんが、こう表示されているのですか?
asibarai

2020/09/18 16:33

はい、そのように表示されていました。 言われてみて、確かにおかしいと思ったので"\"が2本になるようにした所、ちゃんと動くようになりました。(rをつけても\マークが省略されてしまう原因がわからないですが) 長々となってしまいましたが、質問にお付き合いいただきありがとうございました。 大変助かりました。 <プログラム> import sys import MeCab m = MeCab.Tagger (r"-d C:\ProgramData\MeCab\etc\..\dic\ipadic -O chasen") print(m.parse ("すもももももももものうち")) <実行結果> C:\Users\名前\AppData\Local\Programs\Python\Python38\python.exe C:/Users/名前/PycharmProjects/youyaku/genngosyori.py すもも スモモ すもも 名詞-一般 も モ も 助詞-係助詞 もも モモ もも 名詞-一般 も モ も 助詞-係助詞 もも モモ もも 名詞-一般 の ノ の 助詞-連体化 うち ウチ うち 名詞-非自立-副詞可能 EOS
quickquip

2020/09/18 22:56

Pythonのmecabモジュールの出所(pip install ???)を教えていただけますか。 興味あります。
asibarai

2020/09/21 16:56

返信遅れてしまい申し訳ありません。 mecab-python3というのを使っていました。 バージョンは1.0.1です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問