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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1613閲覧

形態素分析をし、単語リストを作成したいです(共起ネットワーク作成の前処理)(janome)

akiaki3

総合スコア6

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/10/27 10:20

編集2020/10/27 11:16

前提・実現したいこと

共起ネットワーク作成の前処理として、
CSV形式、Excel形式のファイル(Twitterより取得)に対し、形態素分析をし、
リスト(行・列あり)形式の単語リストを作成したいと考えております。

あれこれ検索しましたが、前処理工程が省かれていたり、1冊の書籍文章に対し形態素分析をかけていたりと、
csv/Excel形式のファイルの処理の参考になるものがなかなか見つからず、
最終的に、以前ワードクラウド作成時に活用した形態素分析のコード(★以下)が使えないか模索しております。

(なお、Google ColaboratoryでPythonを使っております。)

発生している問題・エラーメッセージ

以下が参考にしている、ワードクラウド作成時に使った形態素分析のコードです。
ワードクラウド用であるため、1行になってアウトプットされてしまいます。
行と列のある、リストとしてアウトプットしたいのですが、私の勉強不足ゆえにできずに困っております。
大変恐縮ではございますが、お力添えいただけますと幸いです。

<アウトプットイメージ(欲しいもの:行/列に整理)>

この世,天,働き,心,万物,天地,位,妨げ,安楽,上下,自由自在,身,衣食住,みな,趣意,物,賤
下人,人間,有様,世界,相違
次第,明らか
智,語,実,教,愚人

<アウトプットイメージ(下記のワードクラウド前処理用コード利用時:1行)>
天, この世 天 働き 心 万物 天地 位 妨げ 安楽 上下 自由自在 身 衣食住 みな 趣意 物 賤,下人 人間 有様 世界 相違,次第 明らか, 智 語 実 教 愚人

該当のソースコード

Python

1 2#形態素分析ライブラリ(janome)をインストール 3!pip install janome 4 5#形態素分析 6from janome.tokenizer import Tokenizer 7text_file = open("Twitter_キーワード「XXX」.csv") 8full_text = text_file.read() 9full_text = full_text.replace("\n","") 10 11t = Tokenizer() 12tokens = t.tokenize(full_text) 13 14#分析結果から助詞、助動詞、記号を抜いたワードリスト作成 15word_list = [] 16for token in tokens: 17 word = token.surface 18 partOfSpeech = token.part_of_speech.split(',')[0] 19 partOfSpeech2 = token.part_of_speech.split(',')[1] 20 if (partOfSpeech == "名詞") or (partOfSpeech == "形容詞") : 21 if (partOfSpeech != "記号"): 22 if (partOfSpeech2 != "非自立") and (partOfSpeech2 != "代名詞") and (partOfSpeech2 != "数"): 23 word_list.append(word) 24words_XXX=" ".join(word_list) 25print(words_xxx) 26

試したこと

・「full_text = full_text.replace("\n","")」が1行になってしまう要因かと思って削除したのですが、結果は変わりませんでした。
・自分なりに「forin」構文を使ってみたのですが、上手くいきませんでした(使い方が間違っていると思われます)。

補足情報(FW/ツールのバージョンなど)

Google ColaboratoryでPythonを使っております。

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

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

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

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

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

ebal

2020/10/27 10:59

参考コードのword_listが作成できているのでないならば取得するCSV,あるいはExcelデータの形式に関する記載をお願いします.できているのならば読み込み部分についは質問事項から外したほうが良いかもしれません. また,「行と列のあるリスト」という表現から最終成果物がイメージできません.最終的に欲しいデータの形式も記載して頂きたいです. 例えば,参考コードのワードリスト縦に並べたもの,といった簡単な記述でもあるとないとでは大違いです.
akiaki3

2020/10/27 11:20

ebal様 拙い質問文に対し、丁寧にご指摘いただきまして誠にありがとうございます。 word_listは、失敗版(列なし)については、作成しております。ですので、ご指摘の通り読み込み部分削除いたしました。 また、アウトプットイメージ(正解版)と(失敗版)を追記させていただきました。 今後質問する際にもいただいたアドバイス生かしていきたいと思います。 重ねて、ありがとうございました。
ebal

2020/10/27 11:26 編集

修正ありがとうございます. 欲しいアウトプットイメージを見てもどういう基準で整理されたのか不明です.何も知らない私が見た場合いっそもとの方が整理されているように見えますが…… 行は何を意味し,列は何を意味するのか記載してください.
guest

回答1

0

ベストアンサー

入力ファイルの中身がわからないので想像で回答します。

python

1from janome.tokenizer import Tokenizer 2def main(text): 3 t = Tokenizer() 4 word_list = [] 5 for t in t.tokenize(text): 6 parts = t.part_of_speech.split(",") 7 if parts[0] not in ["助詞","助動詞","記号"]: 8 if t.surface == ",": 9 print(",".join(word_list)) 10 word_list = [] 11 else: 12 word_list.append(t.surface) 13 print(",".join(word_list)) 14 15 16if __name__ == "__main__": 17 with open("Twitter_キーワード「XXX」.csv", "r") as text_file: 18 full_text = text_file.read().replace("\n","") 19 main(full_text)

投稿2020/10/28 05:38

fsoe

総合スコア163

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

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

akiaki3

2020/10/28 08:17

fsoe様 お世話になっております。 入力内容、表現の仕方がわからず、ご提示できなかったところ、想像でご回答いただきありがとうございます。 いただいたコードを使ってみたところ、欲しかったアウトプットが出てきました!! 長い時間格闘しておりましたので、大変助かりました。感動しております。 重ねてとなりますが、本当に、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問