前提
Word2Vecで作ったモデルを動かして単語間の類似度を算出し一定以上の単語を類義語として算出するプログラムを作成しました
がimportしたはずのライブラリが使えなくて困っています.
実行環境はmacbookpro(2017),visualstudioで実行しましたが以下のエラーメッセージが出ています.
それで自分のterminalで実行しましたが同様のメッセージが出ています.
実現したいこと
ここに実現したいことを箇条書きで書いてください。
- 作成したプログラムを動かしたい
発生している問題・エラーメッセージ
daru % python3 idf_test.py Traceback (most recent call last): File "/Users/daru/***/***/idf_test.py", line 2, in <module> import MeCab ModuleNotFoundError: No module named 'MeCab'
(pip listからmecabが入っているのは確認済み)
該当のソースコード
python
1# -*- coding: utf-8 -*- 2import MeCab 3from gensim.models import Word2Vec 4import pandas as pd 5import math 6import re 7print("モデルロード") 8model = gensim.models.Word2Vec.load("jikken.model") 9myfile = open('history_0text.txt') 10# 以下に抽出したい文text 11text = myfile.read() 12m = MeCab.Tagger("-Ochasen") 13mp = MeCab.Tagger() 14# m.parse("") 15print("処理開始") 16removeW = re.compile( 17 18 '[!"#$%&\'\\\\()*+,-./:;<=>?@[\\]^_`{|}~「」〔〕“”〈〉『』【】&*・()$#@。、?!`+¥% ]') 19text = removeW.sub('', text) 20 21text = re.sub(r"\n", "", text) # 一行づつ配列に入れる時に改行文字が混じったから消しとく 22text = re.sub(r'[a-zA-Z0-9]+', "", text) # 英数字をすべて消す 23text = text.replace("[]", "") # 脚注で無意味に混じった[]の削除 24 25 26print("text clesn complite!") 27# print(text) 28# f=open('simw_d2v_2.txt',"w") 29#paragraf =mp.parse(text).split('\n') 30nouns = [line.split()[0] for line in m.parse(text).splitlines() 31 if "名詞" in line.split()[-1]] # ここをへんこうする 32for str in nouns: 33 str.split() 34 35 # type:strで格納済み 36# print(nouns)#中身の確認 37a = 0 38l_size = len(nouns) 39b = 0 40simd = {} 41simt = [] 42wsimx = {} 43wsimid = {} 44eject = [] 45 46# ここで重複単語の除外 47print("重複単語除外") 48nouns2 = [] 49for x in nouns: 50 if not x in nouns2: 51 nouns2.append(x) 52for w in nouns2: 53 if not w in model: 54 nouns2.remove(w) 55 continue 56 57 simd.setdefault(x, []) 58l_size2 = len(nouns2) 59 60# print(nouns2) 61# print(l_size2,"単語") 62listn = [[None]*l_size2 for i in range(l_size2)] 63# 辞書の作成key=nouns2,value=none 64 65 66# 処理 本体 67 68print("計算中") 69for a in range(0, l_size2): 70 71 w1 = nouns2[a] 72 # simw=[for i in range(l_size2)] 73 print("単語:[", w1, "]", a+1, "回目") 74 75 # simw[a].append(w1) 76 for b in range(0, l_size2): 77 print(b) 78 w2 = nouns2[b] 79 80 sim = model.docvecs.similarity(w1, w2) 81 listn[a][b] = sim 82 83 if sim >= 0.4: 84 # print(w1,"類義語:",w2) 85 86 simd[w1].append(w2) 87 # print("類語 ",w1,":",simd[w1]) 88 89print("処理を", a+1, "回実行しました") 90for k, v in simd.items(): 91 print("単語", k, "値:", v) 92 93 94# 類語辞書作成 95 96 97print("makeing simdictionaly...") 98samw = 0 99for i in range(0, l_size2): 100 wsimid[i] = 0 101 # print(wsimid) 102 for alpha in simd.keys(): 103 list1 = simd.get(alpha) 104 if i <= 140: 105 # print(i,list1) 106 for x in list1: 107 # c=nouns.count(x) 108 # xid=wsimx.get(x) 109 # print(x,":",c) 110 #samw += c 111 wsimx.setdefault(x, i) 112 # wsimid[xid]=wsimid.get(xid)+c 113 # wsimid[xid]=c 114 i += 1 115 116 117print("単語からid辞書", wsimx) 118print("idから出現個数リスト(値は0)", wsimid) 119 120print("tf作成") 121for y in nouns: 122 c = nouns.count(y) 123 xid = wsimx.get(y) 124 print(y, ":id=", xid, "出現回数:", c) 125 samw += c 126 wsimid[xid] = wsimid[xid]+c 127 128 129print("idから出現個数リスト(更新版)", wsimid) 130 131list_tf = [] 132 133for tfx in wsimx.keys(): 134 yid = wsimx[tfx] 135 tf = wsimid[yid]/samw 136 list_tf.append(tf) 137 print(tfx, "のtf:", tf) 138 139 140# print(list_tf) 141 142print("idf作成") 143list_idf = [] 144for tfx in wsimx.keys(): 145 yid = wsimx[tfx] 146 idf = 1/wsimid[yid] 147 idf = math.log(idf) 148 list_idf.append(idf) 149 print(tfx, "のidf:", idf) 150 151 152tf_size = len(list_tf) 153print("tfxidf作成") 154list_tfidf = [] 155for v in range(tf_size): 156 tfidf = list_tf[v]*list_idf[v] 157 list_tfidf.append(tfidf) 158 #listv = simd.get(v) 159 160 # print(v,listv) 161 print(v, ":", tfidf) 162 163 164### 試したこと 165 166mecabのインストールし直しなど 167
> pip listからmecabが入っているのは確認済み
上記のPython環境とスクリプトを実行した環境は同一ですよね?
同じだと思います。
python3.7です。
> 同じだと思います。
pip list を実行し、そのままそのスクリプトを実行すれば「思う」ではなく同じなのですが、そうはしていないということですか?
> python3.7です。
仮想環境含めて”同一”ですか?と訊いています。
今から確認します。
vscode:python2.7.16 python3:3.10 mecab:0.996.3 mecab-python3:1.0.4
terminal: python:2.7.16 python3:3.10 mecab:0.996.3 mecab-python3:1.0.4
です.
3.7じゃありませんでした.
pip list
を実行したのと同じ状態で
pip show mecab
を実行してください
(pipでインストールしたモジュール名がmecabではないなら、インストールしたモジュール名に合わせて実行してください)
実行したらいろいろ表示される中に「Location:」で始まる行がありますので、そこに書かれてるパスを記録してください
次に、pythonで
import MeCab
がうまくいかない状態で、下記のpythonコードを実行してください
import sys
import pprint
pprint.pprint(sys.path)
たくさんパスが表示されますが、その中にpip show...で記録したパスが入ってますでしょうか?
入ってないとimportできません
pip3にmecabinstallできてなかったのでインストールしました.
エラーは変わりませんでした.
Python 2.7.16 (default, Sep 6 2021, 07:39:44)
[GCC Apple LLVM 12.0.5 (clang-1205.0.19.59.6) [+internal-os, ptrauth-isa=deploy on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import pprint
>>> pprint.pprint(sys.path)
['',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
'/Library/Python/2.7/site-packages',
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python',
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC']
>>>
importsysからの3行を実行した時のコピペです.
ちなみに
pip show mecabを実行すると
Name: mecab
Version: 0.996.3
Summary: MeCab binding for many OSs (Windows, macOS, and Linux)
Home-page: https://github.com/ikegami-yukino/mecab/tree/master/mecab/python
Author: Yukino Ikegami
Author-email: yknikgm@gmail.com
License: BSD, GPL or LGPL
Location: /Library/Python/3.8/site-packages
Requires:
Required-by:
mecabは3.8に入ってますね.
> mecabは3.8に入ってますね.
それなのに、
> Python 2.7.16 (default, Sep 6 2021, 07:39:44)
python 2.7を使ってたら、インポートできなくてあたりまえです
python 3.8を使いましょう
「python」じゃなくて「python3」で起動したら、どのバージョンが動くのですか?
> vscode:python2.7.16 python3:3.10 mecab:0.996.3 mecab-python3:1.0.4
terminal: python:2.7.16 python3:3.10 mecab:0.996.3 mecab-python3:1.0.4
3.10?
3.8と3.10を入れてるのですか?
そうなってるみたいですね。
申し訳ないです。
プログラミングあんまり得意じゃなくて…
> daru % python3 idf_test.py
「python3」で実行して、mecabがインポートできないのですよね
それなら、「python3」で起動して、「...pprint.pprint(sys.path)」を実行して調べてください
そうすれば、2.7は起動しないはず
(3.8と3.10のどちらが起動するのかは分からないけど)
一応現状で動きました。
しかし、モデルにない単語を除外できていないようです。
メカブをpython3に入れたら動きました。

回答1件
あなたの回答
tips
プレビュー