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

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

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

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

Python

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

解決済

python MeCabの使い方 エラーに関する質問

sakura.k
sakura.k

総合スコア45

Mecab

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

Python

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

1回答

0リアクション

0クリップ

266閲覧

投稿2022/10/01 04:55

編集2022/10/01 06:46

b.py

python

# 各種モジュール import MeCab import random from nltk import ngrams from collections import Counter, defaultdict # テストデータのわかち書き、加工 def parse_words(test_data): # テストデータ読み込み with open(test_data, 'r') as f: lines = f.readlines() # わかち書き t = MeCab.Tagger('-Owakati') datas = [] for line in lines: data = t.parse(line).strip() datas.append(data) # 各行の先頭と末尾に目印を付与 datas = [f'__BEGIN__ {data} __END__' for data in datas] datas = [data.split() for data in datas] return datas # 3単語とその出現回数辞書作成 def create_words_cnt_dic(datas): # 行ごとにトライグラム作成し、1つに連結 words = [] for data in datas: words.extend(list(ngrams(data, 3))) # 3単語とその出現回数辞書 words_cnt_dic = Counter(words) return words_cnt_dic # マルコフ用辞書 def create_m_dic(words_cnt_dic): # 空のマルコフ辞書 m_dic = {} for k, v in words_cnt_dic.items(): # 先頭2単語、その次の単語 two_words, next_word = k[:2], k[2] # 存在しなければ作る if two_words not in m_dic: m_dic[two_words] = {'words': [], 'weights': []} # 先頭2単語に対し、次に来る単語とその重み m_dic[two_words]['words'].append(next_word) m_dic[two_words]['weights'].append(v) return m_dic # 文章開始単語リストとその重みリスト作成 def create_begin_words_weights(words_cnt_dic): begin_words_dic = defaultdict(int) for k, v in words_cnt_dic.items(): if k[0] == '__BEGIN__': next_word = k[1] begin_words_dic[next_word] = v begin_words = [k for k in begin_words_dic.keys()] begin_weights = [v for v in begin_words_dic.values()] return begin_words, begin_weights # 文章生成 def create_sentences(m_dic, begin_words, begin_weights): # 開始単語の抽選 begin_word = random.choices(begin_words, weights=begin_weights, k=1)[0] # 作成文章の格納 sentences = ['__BEGIN__', begin_word] # 作成文章の後方2単語をもとに、次の単語を抽選する while True: # 後方2単語 back_words = tuple(sentences[-2:]) # マルコフ用辞書から抽選 words, weights = m_dic[back_words]['words'], m_dic[back_words]['weights'] next_word = random.choices(words, weights=weights, k=1)[0] # 終了の目印が出たら抜ける if next_word == '__END__': break # 取得単語を追加 sentences.append(next_word) # 開始マークより後ろを連結 return ''.join(sentences[1:]) # テストデータのわかち書き、加工 datas = parse_words('osake.txt') # 3単語の出現回数辞書作成 words_cnt_dic = create_words_cnt_dic(datas) # マルコフ用辞書作成 m_dic = create_m_dic(words_cnt_dic) # 開始単語とその重みリスト作成 begin_words, begin_weights = create_begin_words_weights(words_cnt_dic) # 20回 文章生成 for i in range(20): text = create_sentences(m_dic, begin_words, begin_weights) print(str(i).zfill(2), text, sep=': ')

osake.text

酒を1本飲む 2本も飲むと楽しい 5本も飲むと悲しい 酒は楽しい 酒は悲しい 悲しい酒は美空ひばり

上のコードを実行したところ、以下のようなエラーが出ました。どのように解決すれば良いでしょうか。

ちなみに、mecab --versionを実行したところ
mecab of 0.996
と出力された為、mecabはインストール済みです。

Traceback (most recent call last): File "/Users/???/Desktop/Python/b.py", line 2, in <module> import MeCab File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/MeCab/__init__.py", line 10, in <module> from . import _MeCab ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/MeCab/_MeCab.cpython-310-darwin.so, 0x0002): symbol not found in flat namespace (__ZN5MeCab11createModelEPKc)

追記
Pythonのmecabバインディングはどうやってインストールしましたか
→Homebrewをインストールした後、brew install mecab mecab-ipadicというふうにインストールしました。以下の動画を参考にしました。
https://youtu.be/mrzPAQOkRlA
PythonはIntelバイナリですか、Apple Silicon バイナリですか
→Apple Silicon バイナリです。

pip show mecab-python3
の結果を質問を編集して書き入れてください

Name: mecab-python3
Version: 1.0.5
Summary: Python wrapper for the MeCab morphological analyzer for Japanese
Home-page: https://github.com/SamuraiT/mecab-python3
Author:
Author-email:
License: BSD
Location: /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages
Requires:
Required-by:

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/10/01 10:05

こちらの質問が複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました。

quickquip

2022/10/01 05:02 編集

Pythonのmecabバインディングはどうやってインストールしましたか PythonはIntelバイナリですか、Apple Silicon バイナリですか あたりを質問を編集して書いてください
quickquip

2022/10/01 06:08 編集

brew install mecab mecab-ipadic ではmecabコマンドしか入りません Pythonのライブラリは、なにをどうやって入れましたか あと、"あなたが参考にしたもの"ではなくて"あなたがやったこと"を書いてください
sakura.k

2022/10/01 06:18

Pythonのライブラリは、このプログラムを実行するに際し何も入れていません。
quickquip

2022/10/01 06:27

pip list (もしくはpip3 list) を実行して mecab で始まるライブラリはないですか? ないなら「pipで入れていないのに site-packages に MeCab/ があることがおかしい」が結論です あるなら pip show (そのライブラリ名) の結果を質問を編集して書き入れてください
quickquip

2022/10/01 06:31

file /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/MeCab/_MeCab.cpython-310-darwin.so の結果もどうなるのか気になります
sakura.k

2022/10/01 06:35

以下のようになりました。 /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/MeCab/_MeCab.cpython-310-darwin.so: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit bundle x86_64Mach-O 64-bit bundle x86_64] [arm64:Mach-O 64-bit bundle arm64Mach-O 64-bit bundle arm64] /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/MeCab/_MeCab.cpython-310-darwin.so (for architecture x86_64): Mach-O 64-bit bundle x86_64 /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/MeCab/_MeCab.cpython-310-darwin.so (for architecture arm64): Mach-O 64-bit bundle arm64

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Mecab

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

Python

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