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

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

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

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Mecab

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

Python

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

Q&A

解決済

2回答

1106閲覧

【python】形態素結果をリスト化し、データフレームに結果を列追加するところでエラーが発生します。

hunimojiko

総合スコア1

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Mecab

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

Python

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

0グッド

0クリップ

投稿2022/01/09 19:55

編集2022/01/10 05:22

前提・実現したいこと

下記のリンクのサイトを参考にして感情分析をしようとしていますが、

python

1df['words'] = df[].apply(mecab_analysis)

の部分で以下のようなエラーが出ます。

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

SyntaxError: invalid syntax

参考にしたサイトです

・コードはサイトとほぼ同じ
・txtファイルを使用
・google colabで実行

該当のソースコード

python

1#これより前は参考にしたサイトと同じ 2 3#@title 形態素解析(一般名詞・動詞:基礎型・形容詞:基礎型)&カンマ・スペース区切りをデータフレームに格納 4#形態素解析(一般名詞・動詞・形容詞(動詞と形容詞は基礎型)を抽出対象とした) 5#スペース区切り分かち書き 6def mecab_analysis(text): 7 8 t = MeCab.Tagger('-Ochasen') 9 10 node = t.parseToNode(text) 11 12 words = [] 13 14 while node: 15 if node.surface != "": # ヘッダとフッタを除外 16 17 word_type = node.feature.split(',')[0] 18 sub_type = node.feature.split(',')[1] 19 features_ = node.feature.split(',') 20 21 #品詞を選択 22 if word_type in ["名詞"]: 23# if sub_type in ['一般']: 24 word = node.surface 25 words.append(word) 26 27 #動詞、形容詞[基礎型]を抽出(名詞のみを抽出したい場合は以下コードを除く) 28 elif word_type in ['動詞','形容詞'] and not (features_[6] in stop_words): 29 words.append(features_[6]) 30 31 node = node.next 32 33 if node is None: 34 break 35 36 return " ".join(words) 37 38#カンマ区切り分かち書き 39def mecab_analysis2(text): 40 41 t = MeCab.Tagger('-Ochasen') 42 43 node = t.parseToNode(text) 44 45 words2 = [] 46 47 while(node): 48 49 if node.surface != "": # ヘッダとフッタを除外 50 word_type = node.feature.split(',')[0] 51 sub_type = node.feature.split(',')[1] 52 features_ = node.feature.split(',') 53 54 if word_type in ['名詞']: #名詞をリストに追加する 55# if sub_type in ['一般']: 56 words2.append(node.surface) 57 58 #動詞、形容詞[基礎型]を抽出(名詞のみを抽出したい場合は以下コードを除く) 59 elif word_type in ['動詞','形容詞'] and not (features_[6] in stop_words): 60 words2.append(features_[6]) 61 62 node = node.next 63 if node is None: 64 break 65 return words2 66 67#形態素結果をリスト化し、データフレームdf1に結果を列追加する 68df['words'] = df[].apply(mecab_analysis) 69df['words2'] = df[].apply(mecab_analysis2) 70 71#表示 72df

初学者でどこを直せばよいかわからず右往左往しております。ご教授のほどよろしくお願いいたします。

###追記
サイト上の'comment'に相当するインデックスをつけました。
イメージ説明

しかし、以下のようなエラーメッセージが表示されます。
イメージ説明

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

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

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

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

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

quickquip

2022/01/09 23:45

参考にしたというサイトにはそんな記述はないように思いますが、どういうことでしょうか? 書き間違いか、意図があって書いたのか、どちらでしょうか。 後者だとどういうつもりで書いたのかを添える必要があると思います。
hunimojiko

2022/01/10 05:10

ご指導くださりありがとうございます。wordのtxtファイルを使用し、df.dropna(subset=[], inplace=True)(サイト上の記載:df.dropna(subset=['comment'], inplace=True)) の部分はファイル内の文書中に 'comment' という文言がないのでこのように表記しました。
hunimojiko

2022/01/10 05:44

現在、ファイルをサイト上の同じようにエクセルのcsv形式に変更し、参考にしたサイトの通りにコードを修正しましたが、 df.dropna(subset=[], inplace=True) ↓ df.dropna(subset=['comment'], inplace=True) df['words'] = df[].apply(mecab_analysis) df['words2'] = df[].apply(mecab_analysis2) ↓ df['words'] = df['coment'].apply(mecab_analysis) df['words2'] = df['coment'].apply(mecab_analysis2) 質問に追記したようなエラーが出ます。。MeCabの問題なのでしょうか。
guest

回答2

0

自己解決

時間をおいて試したところ当該箇所のエラーは解決しました。
ppaulさんがおっしゃった‘comment’に対応するものを厳密に記していなかったことが原因でした。分析対象のテキストファイルを見直したところ解決できました。
ご回答、コメントいただいた皆様、ありがとうございました。この質問は自己解決とさせていただきます。

投稿2022/01/10 12:33

hunimojiko

総合スコア1

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

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

0

  • コードはサイトとほぼ同じ

元のコード

python

1df['words'] = df['comment'].apply(mecab_analysis) 2df['words2'] = df['comment'].apply(mecab_analysis2)

と、変更後のコード

python

1df['words'] = df[].apply(mecab_analysis) 2df['words2'] = df[].apply(mecab_analysis2)

は全く同じではありません。
df[]は文法的に許されていないのでSyntaxErrorとなっています。

もとのサイトでcommentに相当するものが何なのかは、データしだいです。

投稿2022/01/09 23:42

ppaul

総合スコア24670

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

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

hunimojiko

2022/01/10 05:28

ありがとうございます。ファイルに"comment"を追加し、df.head()で出力することはできましたが、df['words'] = df['comment'].apply(mecab_analysis) df['words2'] = df['comment'].apply(mecab_analysis2) としても、質問に追記したようなエラーがでます。初歩的な質問で申し訳ありませんが、ご指導のほどよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問