前提・実現したいこと
Pythonを使ってアンケート内の自然言語データを
可視化したいと考えています。
今回はNlplotを使った可視化を考えていますが、
可視化の前に行う処理でMeCabで作ったデータから助詞を消したいのですが、
上手くいっておらずご相談したく存じます。
発生している問題・エラーメッセージ
TypeError Traceback (most recent call last) <ipython-input-10-c6c44e85bce1> in <module> 1 mecab = MeCab.Tagger() ----> 2 parse = mecab.parse(data['wakachi']) 3 4 words = [] 5 lines = parse.split('\n') TypeError: in method 'Tagger_parse', argument 2 of type 'char const *' Additional information: Wrong number or type of arguments for overloaded function 'Tagger_parse'. Possible C/C++ prototypes are: MeCab::Tagger::parse(MeCab::Lattice *) const MeCab::Tagger::parse(char const *)
該当のソースコード
Python
1import pandas as pd 2import nlplot 3 4path = r'C:\Users\データ\LIVE Screening.csv' 5df = pd.read_csv(path, sep=',', encoding='cp932') 6df.head() 7 8***→これの助詞を消したい。 9VOICE 100 字が綺麗になりたいから 111 始めたきっかけは親の影響です。 122 字がきれいになりたいから 133 字が綺麗な友人に憧れて。 144 文字を綺麗に書きたいと思ったので習い始めました。 15*** 16import MeCab 17 18m0 = MeCab.Tagger('-Owakati') 19wakachi_list = [] 20for i, di in enumerate(df['VOICE']): 21 try: 22 w = m0.parse(di) 23 except: 24 w = di 25 26 if 'list' in str(type(w)): 27 print('No.', i, w[:30]) 28 wakachi_list += [w.split(' ')] 29 else: 30 print('X No.', i, w) 31 wakachi_list += [w] 32 33data = pd.DataFrame(wakachi_list) 34data.columns = ['wakachi'] 35data.head() 36 37*** 38wakachi 390 字 が 綺麗 に なり たい から \n 401 始め た きっかけ は 親 の 影響 です 。 \n 412 字 が きれい に なり たい から \n 423 字 が 綺麗 な 友人 に 憧れ て 。 \n 434 文字 を 綺麗 に 書き たい と 思っ た の で 習い 始め まし た 。 \n 44*** 45 46mecab = MeCab.Tagger() 47parse = mecab.parse(data['wakachi']) 48# for i in data['wakachi']: 49# parse = mecab.parse(i) 50 51words = [] 52lines = parse.split('\n') 53import re 54for line in lines: 55 items = re.split('[\t,]',line) 56 if len(items) >= 2 and items[1] == '助詞': 57 continue 58 words.append(items[0]) 59 60data['words'] = ' '.join(words) 61data.drop('wakachi', axis=1, inplace=True) 62data.head()
試したこと
parse部分に繰り返し処理が必要なのではと思い、
Python
1for i in data['wakachi']: 2 parse = mecab.parse(i)
を試してみたのですが、
全ての行が同じになってしまい、うまくいきません。
words
0 友人 が 師範 な の で 誘わ れ て はじめ まし た 。 10 年 近く 習っ て お...
1 友人 が 師範 な の で 誘わ れ て はじめ まし た 。 10 年 近く 習っ て お...
2 友人 が 師範 な の で 誘わ れ て はじめ まし た 。 10 年 近く 習っ て お...
3 友人 が 師範 な の で 誘わ れ て はじめ まし た 。 10 年 近く 習っ て お...
4 友人 が 師範 な の で 誘わ れ て はじめ まし た 。 10 年 近く 習っ て お...
補足情報(FW/ツールのバージョンなど)
Python 3.8.3 [MSC v.1924 64 bit (AMD64)] on win32
参考ページ:https://teratail.com/questions/171703
ご協力頂けますと大変助かります。
何卒宜しくお願い致します。
###追記
やりたいことは一行一行の文字列から助詞を抜きたいことです。
parseが文字列しか渡せないということで、関数を作ればいいのではと思い、
下記のようなコードを作ろうとしたのですが、
上手くいきませんでした。。
Python
1import MeCab 2import re 3def mec(text): 4 tagger = MeCab.Tagger() 5 parse = tagger.parse('') 6 word_class = [] 7 for line in lines: 8 items = re.split('[\t,]',line) 9 if len(items) >= 2 and items[1] == '助詞': 10 continue 11 words.append(items[0]) 12 13df['words'] = df['VOICE'].apply(mec) 14df.head()
エラーメッセージ
File "<ipython-input-13-a3ff3e372fa2>", line 10 continue ^ SyntaxError: 'continue' not properly in loop
###再追記
以下のコードに書き換えたところ、
出力が全て”EOS”になってしまいました。。
Python
1import MeCab 2import re 3tagger = MeCab.Tagger() 4 5 6def mec(text): 7 parse = tagger.parse('') 8 lines = parse.split('\n') 9 words = [] 10 for line in lines: 11 items = re.split('[\t,]',line) 12 if len(items) >= 2 and items[1] == '助詞': 13 continue 14 words.append(items[0]) 15 return ' '.join(words) 16 17df['words'] = df['VOICE'].apply(mec) 18df.head() 19 20###出力 21VOICE words 220 字が綺麗になりたいから EOS 231 始めたきっかけは親の影響です。 EOS 242 字がきれいになりたいから EOS 253 字が綺麗な友人に憧れて。 EOS 264 文字を綺麗に書きたいと思ったので習い始めました。 EOS
EOSがどこから出てきたのか分からず。。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/13 08:50
2021/05/13 09:05 編集
2021/05/13 09:41
2021/05/14 00:43
2021/05/14 02:05
2021/05/14 02:30
2021/05/14 02:37 編集
2021/05/14 04:55
2021/05/14 09:47
2021/05/14 10:14
2021/05/14 11:10