質問編集履歴

1

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

2017/12/04 23:39

投稿

raintrain
raintrain

スコア7

test CHANGED
@@ -1 +1 @@
1
- マルコフ連鎖を実装したです
1
+ list index out of rangeのエラーにつ
test CHANGED
@@ -2,15 +2,11 @@
2
2
 
3
3
 
4
4
 
5
- janomeで形態素解析をして、マルコフ連鎖で文章を作成したい。
5
+ janomeで形態素解析をして、マルコフ連鎖で文章を作成したいです
6
6
 
7
7
 
8
8
 
9
9
  ###発生している問題・エラーメッセージ
10
-
11
-
12
-
13
- markov_chain.pyの方はエラーメッセージが一応出ておらず、text_2に形態素解析の結果が生成されました。もし直したほうが良い場所などがあれば、ご助言よろしくお願いします。
14
10
 
15
11
 
16
12
 
@@ -26,7 +22,11 @@
26
22
 
27
23
 
28
24
 
25
+ と出ます......
26
+
27
+ 二次元配列を空にした状態にして入れても同じようなエラーが出ました。
28
+
29
- と出ます......調べてもいまいち解決の糸口がつかめませんでした。
29
+ 調べてもいまいち解決の糸口がつかめませんでした。
30
30
 
31
31
 
32
32
 
@@ -42,188 +42,6 @@
42
42
 
43
43
 
44
44
 
45
- ・markov_chain.py
46
-
47
-
48
-
49
- import re
50
-
51
-
52
-
53
- import sqlite3
54
-
55
-
56
-
57
- from janome.tokenizer import Tokenizer
58
-
59
-
60
-
61
- #txtファイル読み込み
62
-
63
- bindata = open("text_1.txt").read()
64
-
65
- text = bindata
66
-
67
-
68
-
69
- #形態素解析
70
-
71
- t = Tokenizer()
72
-
73
- results = []
74
-
75
-
76
-
77
- #一行毎に処理
78
-
79
- lines = text.split("\r\n")
80
-
81
- for line in lines:
82
-
83
- s = line
84
-
85
- s = s.replace("|","")
86
-
87
- s = re.sub(r"《#.+?》","",s)
88
-
89
- s = re.sub(r"[#.+?]","",s)
90
-
91
- tokens = t.tokenize(s)
92
-
93
-
94
-
95
- #語句を排除して抽出
96
-
97
- r = []
98
-
99
- for tok in tokens:
100
-
101
- if tok.base_form == "*":
102
-
103
- w = tok.surface
104
-
105
- else:
106
-
107
- w = tok.base_form
108
-
109
- ps = tok.part_of_speech
110
-
111
- hinsi = ps.split(",")[0]
112
-
113
- if hinsi in ["名詞","形容詞","動詞","記号"]:
114
-
115
- r.append(w)
116
-
117
- rl = (" ".join(r)).strip()
118
-
119
- results.append(rl)
120
-
121
-
122
-
123
- #txtファイルに書き込む
124
-
125
- text_file = "text_2.txt"
126
-
127
- with open(text_file,"w",encoding="utf-8") as fp:
128
-
129
- fp.write("\n".join(results))
130
-
131
-
132
-
133
-
134
-
135
- #split word
136
-
137
- word_split = '''
138
-
139
- '''
140
-
141
-
142
-
143
- #データベースに接続
144
-
145
-
146
-
147
- conn = sqlite3.connect('markov.db')
148
-
149
- c = conn.cursor()
150
-
151
-
152
-
153
- #マルコフ連鎖作成
154
-
155
- def make_markov():
156
-
157
- #テキスト読み込み
158
-
159
- filename = 'text.txt'
160
-
161
- src = open(filename, 'r').read()
162
-
163
-
164
-
165
- src_list = src.split(word_split)
166
-
167
-
168
-
169
- for sentence in src_list:
170
-
171
- result = "text.txt"
172
-
173
- word_list = result.split(' ')
174
-
175
-
176
-
177
- w1 = ''
178
-
179
- w2 = ''
180
-
181
- for word in word_list:
182
-
183
- if w1 and w2:
184
-
185
- c.execute("insert into stocks values(?,?,?)",(w1,w2,word))
186
-
187
- w1,w2 = w2,word
188
-
189
-
190
-
191
- #データベースにセーブ
192
-
193
- conn.commit()
194
-
195
-
196
-
197
- #データべステーブル作成
198
-
199
- def create_table():
200
-
201
- c.execute("create table stocks(word1,word2,word3)")
202
-
203
-
204
-
205
- #メイン
206
-
207
-
208
-
209
- if __name__ == "__main__":
210
-
211
- make_markov()
212
-
213
- conn.close()
214
-
215
-
216
-
217
-
218
-
219
-
220
-
221
-
222
-
223
-
224
-
225
-
226
-
227
45
 
228
46
 
229
47
  ・make_sentence.py
@@ -234,21 +52,11 @@
234
52
 
235
53
 
236
54
 
237
- #データベース接続
238
-
239
55
  conn = sqlite3.connect('markov.db')
240
56
 
241
57
  c = conn.cursor()
242
58
 
243
59
 
244
-
245
- w1 = None
246
-
247
- w2 = None
248
-
249
-
250
-
251
- #文章作成
252
60
 
253
61
  def create_sentence():
254
62
 
@@ -258,9 +66,13 @@
258
66
 
259
67
  list1 = c.fetchall()
260
68
 
69
+ ```ここに言語を入力
70
+
261
- w1 = list1[0][0]
71
+ w1 = list1[0][0]
262
72
 
263
73
  w2 = list1[0][1]
74
+
75
+ ```
264
76
 
265
77
  sentence += w1 + w2
266
78
 
@@ -294,11 +106,9 @@
294
106
 
295
107
 
296
108
 
297
- #メイン
298
-
299
109
  if __name__ == "__main__":
300
110
 
301
- #csv読み込み
111
+
302
112
 
303
113
  result = create_sentence()
304
114