前提・実現したいこと
pythonでmecabを用いて、テキストの形態素解析をしようと思っています.
ちなみにプログラミング超初心者です. OSはwindows10です.
mecabへのパス通しやpython上のmecabバインディングはすんでいる状態(mecab-python-windows)です.
発生している問題・エラーメッセージ
以下のコードによって, 取得文字列内の単語頻度をカウントし, 上位20位までを表示しようとしています.
もともとMacで進めていたものを, windowsで動かす必要が出てきたため,
windowsで動くようにしたいです.
同コードをMacで実行すると, 所望のものを得ることができます.
問題としては, プログラム後半の,
print(c.most_common(20))やprint(f.most_common(20))によって
出現頻度上位20位の単語とその頻度が表示されるのですが,
windowsだと, "[]"が表示されるのみとなってしまいます.
コマンドプロンプト上でmecabは動く状態です.
該当のソースコード
python
1import openpyxl as px 2import re 3import MeCab 4import sys 5import collections 6 7oText = '' 8book = px.load_workbook('../○○.xlsx') 9sheet = book['○○'] 10 11for l in range(5, sheet.max_row+1): 12 a = [] 13 time = 0 14 for i in range(2, sheet.max_column-1, 2): 15 if sheet.cell(row = l, column = i).value is not None: 16 a.append(sheet.cell(row = l, column = i).value) 17 for i in range(len(a)): 18 if a[time] is not None: 19 a[time] = ''.join(a[time].splitlines()) 20 time += 1 21 22 d = [] 23 time2 = 0 24 for i in range(3, sheet.max_column, 2): 25 if sheet.cell(row = l, column = i).value is not None: 26 d.append(sheet.cell(row = l, column = i).value) 27 for i in range(len(d)): 28 if d[time2] is not None: 29 d[time2] = ''.join(d[time2].splitlines()) 30 time2 += 1 31 32 b = ' '.join(a) 33 34 e = ' '.join(d) 35 36 print(sheet.cell(row = l, column = 1).value + '\n') 37 38 print(b) 39 40 m = MeCab.Tagger('-Ochasen') 41 m.parse('') 42 node = m.parseToNode(b) 43 print(node) 44 words=[] 45 while node: 46 hinshi = node.feature.split(",")[0] 47 if hinshi in ["名詞","動詞","形容詞"]: 48 origin = node.feature.split(",")[6] 49 words.append(origin) 50 node = node.next 51 52 c = collections.Counter(words) 53 print(c.most_common(20)) 54 55 print('\n====================\n') 56 57 print(e) 58 59 m = MeCab.Tagger('-Ochasen') 60 m.parse('') 61 node = m.parseToNode(e) 62 words=[] 63 while node: 64 hinshi = node.feature.split(",")[0] 65 if hinshi in ["名詞","動詞","形容詞"]: 66 origin = node.feature.split(",")[6] 67 words.append(origin) 68 node = node.next 69 70 f = collections.Counter(words) 71 print(f.most_common(20)) 72 73 print('\n∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽\n')
試したこと
printで遡って試したのですが, nodeで何もprintされない状態なので
parseToNodeがうまくいってないのではないかと思っているのですが, 対応策がわかりません.
補足情報(FW/ツールのバージョンなど)
python 3.7.6
あなたの回答
tips
プレビュー