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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Mecab

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

Q&A

0回答

1798閲覧

windows上でpythonによるmecabによる単語カウントができない

chacopen.55

総合スコア0

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Mecab

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

0グッド

0クリップ

投稿2020/05/24 00:18

編集2020/06/12 07:11

前提・実現したいこと

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

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

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

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

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

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

Yasumichi

2020/05/24 01:00

> pythonのバインディングなどはすんでいる とのことですが、単純なバインディングの例について、試して確認済みということでよろしいでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問