Python によるスクレイピング&機械学習[開発テクニック]に関する質問です。
6-4 MLPでテキスト分類してみよう の「file: mlp2-seq」の実装が以下のとおりうまくいきません。
レンジを超えた要素数にアクセスしようとしているからだと思うのですが、
書籍の写経を行っており、間違いの要素が見当たりません。
解決策orヒントご教示いただけますと幸いです。
python
1 40 ids=text_to_ids(text) 2 41 for wid in ids: 3---> 42 cnt[wid] += 1 4 43 return cnt 5 44 6 7IndexError: list index out of range 8
python
1import os,glob,json 2 3root_dir="./newstext/text" 4dic_file=root_dir+"/word-dic.json" 5data_file=root_dir+"/data.json" 6data_file_min=root_dir+"/data-mini.json" 7 8word_dic={"_MAX":0} 9def text_to_ids(text): 10 text=text.strip() 11 words=text.split(" ") 12 result=[] 13 14 for n in words: 15 n = n.strip() 16 if n == "":continue 17 if not n in word_dic: 18 wid=word_dic[n]=word_dic["_MAX"] 19 word_dic["_MAX"]+=1 20 print(wid,n) 21 else: 22 wid=word_dic[n] 23 result.append(wid) 24 return result 25 26def file_to_ids(fname): 27 with open(fname,"r",encoding="utf-8") as f: 28 text = f.read() 29 return text_to_ids(text) 30 31def register_dic(): 32 files=glob.glob(root_dir+"/*/*.wakati",recursive=True) 33 for i in files: 34 file_to_ids(i) 35 36def count_file_freq(fname): 37 cnt=[0 for n in range(word_dic["_MAX"])] 38 with open(fname,"r",encoding="utf-8") as f: 39 text=f.read().strip() 40 ids=text_to_ids(text) 41 for wid in ids: 42 cnt[wid] += 1 43 return cnt 44 45def count_freq(limit=0): 46 X=[] 47 Y=[] 48 max_words=word_dic["_MAX"] 49 cat_names=[] 50 for cat in os.listdir(root_dir): 51 cat_dir=root_dir+"/"+cat 52 if not os.path.isdir(cat_dir):continue 53 cat_idx=len(cat_names) 54 cat_names.append(cat) 55 files=glob.glob(cat_dir+"/*.wakati") 56 i=0 57 for path in files: 58 print(path) 59 cnt=count_file_freq(path) 60 X.append(cnt) 61 Y.append(cat_idx) 62 if limit>0: 63 if i >limit: break 64 i += 1 65 return X,Y 66 67if os.path.exists(dic_file): 68 word_dic=json.load(open(dic_file)) 69else: 70 register_dic() 71 json.dump(word_dic,open(dic_file,"w")) 72 73X,Y=count_freq(20) 74json.dump({"X":X,"Y":Y},open(data_file_min,"w")) 75X,Y=count_freq() 76json.dump({"X":X,"Y":Y},open(data_file,"w")) 77print("ok")
下記からコードをダウンロードして、比べてみたらいかがでしょうか??
https://www.socym.co.jp/support/s-1079
https://www.socym.co.jp/support/s-1192
あなたの回答
tips
プレビュー