teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

エラーの問題箇所を強調、ソースコードからコメントを外し、見やすいようにした

2017/12/04 23:39

投稿

raintrain
raintrain

スコア7

title CHANGED
@@ -1,1 +1,1 @@
1
- マルコフ連鎖を実装したです
1
+ list index out of rangeのエラーにつ
body CHANGED
@@ -1,18 +1,18 @@
1
1
  ###前提・実現したいこと
2
2
 
3
- janomeで形態素解析をして、マルコフ連鎖で文章を作成したい。
3
+ janomeで形態素解析をして、マルコフ連鎖で文章を作成したいです
4
4
 
5
5
  ###発生している問題・エラーメッセージ
6
6
 
7
- markov_chain.pyの方はエラーメッセージが一応出ておらず、text_2に形態素解析の結果が生成されました。もし直したほうが良い場所などがあれば、ご助言よろしくお願いします。
8
-
9
7
  make_sentence.pyの方は
10
8
 
11
9
  w1 = list1[0][0]
12
10
  IndexError: list index out of range
13
11
  >>>
14
12
 
13
+ と出ます......
14
+ 二次元配列を空にした状態にして入れても同じようなエラーが出ました。
15
- と出ます......調べてもいまいち解決の糸口がつかめませんでした。
15
+ 調べてもいまいち解決の糸口がつかめませんでした。
16
16
 
17
17
 
18
18
 
@@ -20,116 +20,22 @@
20
20
 
21
21
  ###該当のソースコード
22
22
 
23
- ・markov_chain.py
24
23
 
25
- import re
26
-
27
- import sqlite3
28
-
29
- from janome.tokenizer import Tokenizer
30
-
31
- #txtファイル読み込み
32
- bindata = open("text_1.txt").read()
33
- text = bindata
34
-
35
- #形態素解析
36
- t = Tokenizer()
37
- results = []
38
-
39
- #一行毎に処理
40
- lines = text.split("\r\n")
41
- for line in lines:
42
- s = line
43
- s = s.replace("|","")
44
- s = re.sub(r"《#.+?》","",s)
45
- s = re.sub(r"[#.+?]","",s)
46
- tokens = t.tokenize(s)
47
-
48
- #語句を排除して抽出
49
- r = []
50
- for tok in tokens:
51
- if tok.base_form == "*":
52
- w = tok.surface
53
- else:
54
- w = tok.base_form
55
- ps = tok.part_of_speech
56
- hinsi = ps.split(",")[0]
57
- if hinsi in ["名詞","形容詞","動詞","記号"]:
58
- r.append(w)
59
- rl = (" ".join(r)).strip()
60
- results.append(rl)
61
-
62
- #txtファイルに書き込む
63
- text_file = "text_2.txt"
64
- with open(text_file,"w",encoding="utf-8") as fp:
65
- fp.write("\n".join(results))
66
-
67
-
68
- #split word
69
- word_split = '''
70
- '''
71
-
72
- #データベースに接続
73
-
74
- conn = sqlite3.connect('markov.db')
75
- c = conn.cursor()
76
-
77
- #マルコフ連鎖作成
78
- def make_markov():
79
- #テキスト読み込み
80
- filename = 'text.txt'
81
- src = open(filename, 'r').read()
82
-
83
- src_list = src.split(word_split)
84
-
85
- for sentence in src_list:
86
- result = "text.txt"
87
- word_list = result.split(' ')
88
-
89
- w1 = ''
90
- w2 = ''
91
- for word in word_list:
92
- if w1 and w2:
93
- c.execute("insert into stocks values(?,?,?)",(w1,w2,word))
94
- w1,w2 = w2,word
95
-
96
- #データベースにセーブ
97
- conn.commit()
98
-
99
- #データべステーブル作成
100
- def create_table():
101
- c.execute("create table stocks(word1,word2,word3)")
102
-
103
- #メイン
104
-
105
- if __name__ == "__main__":
106
- make_markov()
107
- conn.close()
108
-
109
-
110
-
111
-
112
-
113
-
114
-
115
24
  ・make_sentence.py
116
25
 
117
26
  import sqlite3
118
27
 
119
- #データベース接続
120
28
  conn = sqlite3.connect('markov.db')
121
29
  c = conn.cursor()
122
30
 
123
- w1 = None
124
- w2 = None
125
-
126
- #文章作成
127
31
  def create_sentence():
128
32
  sentence = ""
129
33
  c.execute("select * from stocks order by random() limit 1")
130
34
  list1 = c.fetchall()
35
+ ```ここに言語を入力
131
- w1 = list1[0][0]
36
+ w1 = list1[0][0]
132
37
  w2 = list1[0][1]
38
+ ```
133
39
  sentence += w1 + w2
134
40
 
135
41
  for i in range(20):
@@ -146,9 +52,8 @@
146
52
  break
147
53
  return sentence
148
54
 
149
- #メイン
150
55
  if __name__ == "__main__":
151
- #csv読み込み
56
+
152
57
  result = create_sentence()
153
58
  print(result)
154
59
  conn.close()