質問編集履歴

1

コードの追加

2018/09/28 15:26

投稿

1976kaca
1976kaca

スコア15

test CHANGED
File without changes
test CHANGED
@@ -24,6 +24,158 @@
24
24
 
25
25
 
26
26
 
27
+ コードは以下になります。
28
+
29
+ ```python
30
+
31
+ from flask import Flask, render_template, request
32
+
33
+ from wtforms import Form, TextAreaField, validators
34
+
35
+ import pickle
36
+
37
+ import sqlite3
38
+
39
+ import os
40
+
41
+ import numpy as np
42
+
43
+
44
+
45
+ from vectorizer import vect
46
+
47
+
48
+
49
+ app = Flask(__name__)
50
+
51
+
52
+
53
+ cur_dir = os.path.dirname(__file__)
54
+
55
+ clf = pickle.load(open(os.path.join(cur_dir, 'pkl_objects', 'classifier.pkl'),
56
+
57
+ 'rb'))
58
+
59
+ db = os.path.join(cur_dir, 'reviews.sqlite')
60
+
61
+
62
+
63
+ def classify(document):
64
+
65
+ label = {0: 'negative', 1: 'positive'}
66
+
67
+ X = vect.transform([document])
68
+
69
+ y = clf.predict(X)[0]
70
+
71
+ proba = clf.predict_proba(X).max()
72
+
73
+ return label[y], proba
74
+
75
+
76
+
77
+ def train(document, y):
78
+
79
+ X = vect.transform([document])
80
+
81
+ clf.partial_fit(X, [y])
82
+
83
+
84
+
85
+ def sqlite_entry(path, document, y):
86
+
87
+ conn = sqlite3.connect(path)
88
+
89
+ c = conn.cursor()
90
+
91
+ c.execute("INSERT INTO review_db (review, sentiment, date)"\
92
+
93
+ " VALUES (?, ?, DATETIME('now'))", (document, y))
94
+
95
+ conn.commit()
96
+
97
+ conn.close()
98
+
99
+
100
+
101
+ class ReviewForm(Form):
102
+
103
+ moviereview = TextAreaField('',
104
+
105
+ [validators.DataRequired(),
106
+
107
+ validators.length(min=15)])
108
+
109
+ @app.route('/')
110
+
111
+ def index():
112
+
113
+ form = ReviewForm(request.form)
114
+
115
+ return render_template('reviewform.html', form=form)
116
+
117
+
118
+
119
+ @app.route('/results', methods=['POST'])
120
+
121
+ def results():
122
+
123
+ form = ReviewForm(request.form)
124
+
125
+ if request.method == 'POST' and form.validate():
126
+
127
+ review = request.form['moviereview']
128
+
129
+ y, proba = classify(review)
130
+
131
+ return render_template('results.html',
132
+
133
+ content=review,
134
+
135
+ prediction=y,
136
+
137
+ probability=round(proba*100, 2))
138
+
139
+ return render_template('reviewform.html', form=form)
140
+
141
+
142
+
143
+ @app.route('/thanks', methods=['POST'])
144
+
145
+ def feedback():
146
+
147
+ feedback = request.form['feedback_button']
148
+
149
+ review = request.form['review']
150
+
151
+ prediction = request.form['prediction']
152
+
153
+
154
+
155
+ inv_label = {'negative': 0, 'positive': 1}
156
+
157
+ y = inv_label[prediction]
158
+
159
+ if feedback == 'Incorrect':
160
+
161
+ y = int(not(y))
162
+
163
+ train(review, y)
164
+
165
+ sqlite_entry(db, review, y)
166
+
167
+ return render_template('thanks.html')
168
+
169
+
170
+
171
+ if __name__ == '__main__':
172
+
173
+ app.run()
174
+
175
+ ```
176
+
177
+
178
+
27
179
  エラーログは以下です。
28
180
 
29
181
  2018-09-28 14:56:46,612: Exception on /thanks [POST]#012Traceback (most recent call last):#012 File "/usr/lib/python3.5/site-packages/flask/app.py", line 2292, in wsgi_app#012 response = self.full_dispatch_request()#012 File "/usr/lib/python3.5/site-packages/flask/app.py", line 1815, in full_dispatch_request#012 rv = self.handle_user_exception(e)#012 File "/usr/lib/python3.5/site-packages/flask/app.py", line 1718, in handle_user_exception#012 reraise(exc_type, exc_value, tb)#012 File "/usr/lib/python3.5/site-packages/flask/_compat.py", line 35, in reraise#012 raise value#012 File "/usr/lib/python3.5/site-packages/flask/app.py", line 1813, in full_dispatch_request#012 rv = self.dispatch_request()#012 File "/usr/lib/python3.5/site-packages/flask/app.py", line 1799, in dispatch_request#012 return self.view_functions[rule.endpoint](**req.view_args)#012 File "/home/1976kaca/movieclassifier/app.py", line 67, in feedback#012 train(review, y)#012 File "/home/1976kaca/movieclassifier/app.py", line 26, in train#012 clf.partial_fit(X, [y])#012 File "/usr/lib/python3.5/site-packages/sklearn/linear_model/stochastic_gradient.py", line 540, in partial_fit#012 self._validate_params()#012 File "/usr/lib/python3.5/site-packages/sklearn/linear_model/stochastic_gradient.py", line 89, in _validate_params#012 if self.max_iter is not None and self.max_iter <= 0:#012AttributeError: 'SGDClassifier' object has no attribute 'max_iter'