前提・実現したいこと
Pythonで形態素分析を行なった後に、自分で作成した辞書をもとに感情分析をするシステムを作っています。
実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "fire1.py", line 43, in <module> dic_pn = read_pn_di() File "fire1.py", line 19, in read_pn_di dic_pn[columns[0]] = int(columns[3]) IndexError: list index out of range
該当のソースコード
Python
1import re 2import sys 3from janome.tokenizer import Tokenizer 4import codecs 5 6 7#感情ファイルの辞書を作成する 8def read_pn_di(): 9 dic_pn = {} 10 11 f = open('fire_dictionary.txt') 12 lines = f.readlines() # 1行を文字列として読み込む(改行文字も含まれる) 13 14 for line in lines: 15 #フォーマット 16 #見出し語:読み(ひらがな):品詞:感情極性実数値 17 columns = line.split(':') 18 #dic_pn[columns[0]] = float(columns[3]) 19 dic_pn[columns[0]] = int(columns[3]) 20 f.close 21 22 return dic_pn 23 24 25 26#文章データテキストファイルから読み込みます 27print("ツイート内容を入力してみよう。") 28f = input() 29src_txt = f 30 31 32#単語感情極性対応表データを取得する 33dic_pn = read_pn_di() 34#セパレータを「。」とする。 35seperator = "。" 36mixi_diary_origin = src_txt 37mixi_diary_origin = re.sub("[| 「」\n]", "", mixi_diary_origin) # | と全角半角スペース、「」と改行の削除 38 39 40mixi_diary_list = mixi_diary_origin.split(seperator) # セパレーターを使って文章をリストに分割する 41mixi_diary_list = [x+seperator for x in mixi_diary_list] # 文章の最後に。を追加 42 43#この時点でデータの準備が終わりです 44#ここから形態素分析に入ります 45t = Tokenizer() 46 47mixi_diary_words = [] #形態素分析したあとに出てきた語句を格納するリスト(この例では、名詞、形容詞のみの語句を取っています) 48 49semantic_value = 0 50semantic_count = 0 51for sentence in mixi_diary_list: 52 53 tokens = t.tokenize(sentence) 54 words = [] 55 for token in tokens: 56 # 品詞を取り出し 57 partOfSpeech = token.part_of_speech.split(',')[0] 58 59 #感情分析(感情極性実数値より) 60 if( partOfSpeech in ['動詞','名詞', '形容詞', '副詞']): 61 if(token.surface in dic_pn): 62 data = token.surface + ":" + str(dic_pn[token.surface]) 63 print(data) 64 semantic_value = dic_pn[token.surface] + semantic_value 65 semantic_count = semantic_count + 1 66 #if partOfSpeech == u'名詞' or partOfSpeech == u'形容詞' : 67 #print (token.surface) 68 words.append(token.surface) 69 70 if len(words) > 0: 71 mixi_diary_words.extend(words) 72 73 74 75data = "分析した単語数:" + str(semantic_count) + " 炎上値合計:" + str(semantic_value) + " 炎上値平均:" + str(semantic_value / semantic_count) 76print(data) 77 78
補足情報(FW/ツールのバージョンなど)
fire_dictionary.txtの内容は以下の通りです。
夫婦:めおと:名詞:20
普通:ふつう:名詞:20
女性:じょせい:名詞:80
お父さん:おとうさん:名詞:20
奥さん:おくさん:名詞:20
相手:あいて:名詞:20
お母さん:おかあさん:名詞:20
難癖:なんくせ:名詞:30育児:いくじ:名詞:20
女:おんな:名詞:80
皿洗い:さらあらい:名詞:10
ポンコツ:ポンコツ:30
夫:おっと:名詞:20
分かる方がいらっしゃったらどうぞよろしくお願いいたします。