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

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

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

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

Python

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

Q&A

解決済

1回答

2859閲覧

python index out of rangeの原因がわからない

humuhimi

総合スコア49

Mecab

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

Python

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

0グッド

0クリップ

投稿2019/06/17 12:00

現在自然言語処理の問題をしているのですが、エラーになる原因がわかりません。
どなたか教えていただいてもよろしいでしょうか?

python

1""" 230. 形態素解析結果の読み込み 3形態素解析結果(neko.txt.mecab)を読み込むプログラムを実装せよ. 4ただし, 5===== 6各形態素は表層形(surface), 7基本形(base), 8品詞(pos), 9品詞細分類1(pos1) 10==== 11をキーとするマッピング型に格納し, 121文を形態素(マッピング型)のリストとして表現せよ. 13第4章の残りの問題では,ここで作ったプログラムを活用せよ. 14 15表層形\t品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用型,活用形,原形,読み,発音 16 17表層形,品詞,品詞細分類1 18 19当たる、ない:基本形 20""" 21 22import MeCab 23 24#ファイルのパス用 25text_from = "neko.txt" 26text_to = "neko.txt.mecab" 27 28def text_toMeCab(text_from,text_to): 29 ''' 30 convert mecab morphological analisis result and write it to text 31 32 Parameters 33 -------------- 34 35 mecab_tag: メカブオブジェクト 36 origin: 元のファイル先 37 as_mecab: メカブに変更するファイル先 38 39 Returns 40 -------- 41 parsed_text 42 ''' 43 # メカブタグ 44 mecab_tag = MeCab.Tagger('') 45 46 with open(text_from,'r') as origin,\ 47 open(text_to,'w') as as_mecab: 48 tmp_text = origin.read() 49 parsed_text = mecab_tag.parse(tmp_text) 50 as_mecab.write(parsed_text) 51 52 return parsed_text 53 54 55 56def maping_morphology(mecab_file): 57 ''' 58 mapping morphological analysis result 59 60 Parameters 61 ---------- 62 all_text:str 63 「吾輩は猫である」全文読み込み 64 raw_list:list 65 改行ごとにsplit されたもの(要素) 66 temporary_list,tmp_list:list 67 一時変換用リスト 68 # splitの分割によりsurface,word_classに分ける 69 morphological_dict:dict 70 形態素解析結果のマップ 71 72 Returns 73 -------- 74 morphological_dict:mapping dictionary 75 ''' 76 #先頭に改行があるので削除する 77 mecab_file = mecab_file.lstrip('\n') 78 # 一行ずつに分割 79 raw_list = mecab_file.splitlines() 80 morphological_dict = {} 81 82 for temporary_list in raw_list: 83 tmp_list = temporary_list.replace('\t',',').split(',') 84 morphological_dict.update({'surface':tmp_list[0], 85 'base':tmp_list[1], 86 'pos':tmp_list[2], 87 'pos1':tmp_list[-3]}) 88 return morphological_dict 89 90 91mecab_text = text_toMeCab(text_from,text_to) 92result = maping_morphology(mecab_text) 93print(result)

error

1Traceback (most recent call last): 2 File "n30_execise.py", line 90, in <module> 3 result = maping_morphology(mecab_text) 4 File "n30_execise.py", line 84, in maping_morphology 5 morphological_dict.update({'surface':tmp_list[0],'base':tmp_list[1],'pos':tmp_list[2],'pos1':tmp_list[-3]}) 6IndexError: list index out of range

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

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

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

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

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

quickquip

2019/06/17 12:06

tmp_listの中身は確認しましたか? エラーになるときに与えている文は何ですか? すべての文で必ず起きるんですか? 特定の文だけで起きるんですか?
tetsunosuke

2019/06/17 12:08

エラーが起きた時点のtmp_list の中身はどうなっていますか?
humuhimi

2019/06/17 12:16

今確認したところ{'surface': 'EOS'}となっていました。
quickquip

2019/06/17 13:45

質問を書く時間と確認する時間と、どっちが早かったか……
humuhimi

2019/06/18 02:10

間違い無いですね... 多分すごい疲れてたんだと思います.. でも相手してくれてありがとうございます。マジ鬼感謝です
guest

回答1

0

ベストアンサー

tmp_list = temporary_list.replace('\t',',').split(',')の後にprint(tmp_list)してみてください。
MeCabの解析結果に'EOS'が含まれます。この時.split(',')の結果の要素数が1個になりtmp_list[1]で提示エラーが発生します。
tmp_listの要素数をチェックするようにしましょう。

投稿2019/06/17 12:12

can110

総合スコア38256

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

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

humuhimi

2019/06/17 12:20

きずきませんでした。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問