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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Mecab

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

544閲覧

python テキスト前処理で元形状を保持したまま/元形状に戻す方法がわかりません。

hidemomo

総合スコア31

Python 3.x

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

Mecab

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2019/12/17 09:01

悩んでいること:

テキスト解析の前処理で5000行の文章を単語に区分し処理したとき、処理前のデータ形状が失われて1行になってしまいます。処理前のデータ形状を保持したままで処理できるor処理後に元のデータ形状に戻す方法で悩んでいます。

##データおよび形状:
daftaframeです。形状は(5000,2)になります。

ID   word
0   元旦には、みんな私の所に来なさい
1   ピョンと飛び降りて一番最初に神さまの前に行きました
2   怒ったネコは、それからずっと、ネズミを見ると追いかける様になりました

##狙い:
5000行のテキストを必要品詞(parts)と不要ワード(stop_words)で処理し、5000行別の単語に分けたいです。

##試行コード:

python

1import pandas as pd 2import MeCab 3 4df = pd.read_csv(./...) 5mecab = MeCab.Tagger() 6mecab.parse('') 7 8all_words=[] 9 10stop_words = [ 11 '数','%','%','g','g','*','?','?','.','.','ー', 12 '*****','/','/','ml','(','(',')',')', '-','一'] 13 14parts = ['名詞','形容詞','動詞','副詞'] 15 16for word in df['word']: 17 node = mecab.parse(word).splitlines() 18 19 for i in node: 20 if i == 'EOS' or i == '': continue 21 word_tmp = i.split()[0] 22 part = i.split()[1].split(',')[0] #品詞 23 if not (part in parts) or (word_tmp in stop_words): continue 24   all_words.append(word_tmp)

2重ループになるので1次元になるは理解できるのですが解決策がわかりません。
ご教示のほどよろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

二重ループの外側と内側のループそれぞれでリストを作り、二重リストにするのが常套手段です。

擬似コードですが、こんな感じですね。

python

1result = [] 2for 何かループする: 3 tmp = [] 4 for 何かループする: 5 何かする 6 tmp.append(何か) 7 result.append(tmp)

投稿2019/12/17 10:27

hayataka2049

総合スコア30933

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

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

hidemomo

2019/12/18 02:44

ありがとうございます。大変参考になりました。無事正常挙動も確認できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問