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

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

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

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

Python

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

PyCharm

エディター・開発ツール

Q&A

解決済

2回答

550閲覧

SettingWithCopyWarning及びList index out of rangeの原因がわからない

tina

総合スコア2

Mecab

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

Python

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

PyCharm

エディター・開発ツール

0グッド

0クリップ

投稿2022/12/27 02:07

実現したいこと

読み込んだCSVから形態素解析の分かち書きを出力したい。下記にあるソースコードの数字変換までは上手くいったのですが、その後の分かち書きをした結果を返す場所でエラーが起きてしまいます。Python初心者にご教授お願い致します。

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

~\.conda\envs\NaturalLanguage01\python.exe ~\PycharmProjects\nlp01\report\report1.py ~\PycharmProjects\nlp01\report\report1.py:23: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy review_df['review_number_to_zero'] = review_df['review'].map(replace_number_to_zero) Traceback (most recent call last): File "~\PycharmProjects\nlp01\report\report1.py", line 34, in <module> review_df['lsbw'] = review_df['review_number_to_zero'].map(leaving_space_between_words_column) File "~\.conda\envs\NaturalLanguage01\lib\site-packages\pandas\core\series.py", line 4161, in map new_values = super()._map_values(arg, na_action=na_action) File "~\.conda\envs\NaturalLanguage01\lib\site-packages\pandas\core\base.py", line 870, in _map_values new_values = map_f(values, mapper) File "pandas\_libs\lib.pyx", line 2859, in pandas._libs.lib.map_infer File "~\PycharmProjects\nlp01\report\report1.py", line 30, in leaving_space_between_words_column splitted = ' '.join([x.split('\t')[0] for x in tagger.parse(text).splitlines()[:-1] if x.split('\t')[1].split(',')[0] not in ['助詞', '助動詞', '接続詞', '動詞', '記号']]) File "~\PycharmProjects\nlp01\report\report1.py", line 30, in <listcomp> splitted = ' '.join([x.split('\t')[0] for x in tagger.parse(text).splitlines()[:-1] if x.split('\t')[1].split(',')[0] not in ['助詞', '助動詞', '接続詞', '動詞', '記号']]) IndexError: list index out of range Process finished with exit code 1

該当のソースコード

Python

1import csv 2import MeCab 3import re 4import pandas as pd 5 6shinjuku_ramen_df = pd.read_csv('data/shinjuku_ramen_review_high.csv',index_col=0) 7with open('data/shinjuku_ramen_review_high.csv') as f: 8 writer = csv.writer(f, lineterminator='\n') 9 10# 店舗情報 11store_df = shinjuku_ramen_df[['store_id', 'store_name', 'score', 'ward', 'review_cnt']] 12# 重複データを削除する 13store_df = store_df.drop_duplicates(['store_id', 'store_name', 'score', 'ward', 'review_cnt']) 14# 口コミ情報 15review_df = shinjuku_ramen_df[['store_id', 'review']] 16 17# あまり関係のないと思われる数字を全て0に置き換える関数 18def replace_number_to_zero(text): 19 changed_text = re.sub(r'[0-9]+', "0", text) #半角 20 changed_text = re.sub(r'[0-9]+', "0", changed_text) #全角 21 return changed_text 22# 数字を0に置換 23review_df['review_number_to_zero'] = review_df['review'].map(replace_number_to_zero) 24 25# 形態素解析する 26tagger = MeCab.Tagger('-Ochasen -u \"C:/laboratory/MeCab/dic/neologd/neologd.dic\"') 27 28# 分かち書きした結果を返す関数 29def leaving_space_between_words_column(text): 30 splitted = ' '.join([x.split('\t')[0] for x in tagger.parse(text).splitlines()[:-1] if x.split('\t')[1].split(',')[0] not in ['助詞', '助動詞', '接続詞', '動詞', '記号']]) 31 return splitted 32 33# 分かち書きしたカラムをdfに追加する 34review_df['lsbw'] = review_df['review_number_to_zero'].map(leaving_space_between_words_column) 35print(review_df.head())

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

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

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

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

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

quickquip

2022/12/27 03:37

OSと、使っているmecabバインディングのライブラリ名を教えてもらえますか?
tina

2022/12/27 03:39

OSはWindowsでmecab-python3です。
guest

回答2

0

自己解決

別の方法ですることにしました。

投稿2022/12/27 14:15

tina

総合スコア2

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

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

0

EOSの行でx.split('\t')[1]がエラーを起こすのではないでしょうか

tagger = MeCab.Tagger('-Ochasen -u \"C:/laboratory/MeCab/dic/neologd/neologd.dic\"')

tagger = MeCab.Tagger('-u \"C:/laboratory/MeCab/dic/neologd/neologd.dic\"')

じゃないでしょうか。
これはchasenフォーマット向けのコードではなさそうです。


tagger = MeCab.Tagger('-Ochasen -u \"C:/laboratory/MeCab/dic/neologd/neologd.dic\"') print(tagger.parse('あのイーハトーヴォのすきとおった風、'))

tagger = MeCab.Tagger('-u \"C:/laboratory/MeCab/dic/neologd/neologd.dic\"') print(tagger.parse('あのイーハトーヴォのすきとおった風、'))

を見比べてみてください。期待している出力はどちらですか?

投稿2022/12/27 02:27

編集2022/12/27 06:12
quickquip

総合スコア11038

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

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

tina

2022/12/27 02:38

回答者様のおっしゃる通り試しに0にして行った結果SettingWithCopyWarningエラーが出たものの最後のprint文の結果が表示されました。こちらEOSの場合終了するといった処理にすればよいのでしょうか?
quickquip

2022/12/27 02:45

すみません。間違えました。 .splitlines()[:-1] でEOSは削ってますね?? 間違っているなら間違っていると指摘していただければそれでよかったのですが。
quickquip

2022/12/27 03:00 編集

「元のデータに改行が混じっている」はありえるかもしれないのでいったん回答はそのままにしておきます。
quickquip

2022/12/27 02:47

> 回答者様のおっしゃる通り試しに0にして行った結果 何を言っているのかわかりませんでした。
tina

2022/12/27 03:40

すみません、こちらは特に意味のない変更をしていた上に説明不足で申し訳ありませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問