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

質問編集履歴

1

コードの追加

2018/09/28 15:26

投稿

1976kaca
1976kaca

スコア15

title CHANGED
File without changes
body CHANGED
@@ -11,6 +11,82 @@
11
11
  Internal Server Error
12
12
  The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
13
13
 
14
+ コードは以下になります。
15
+ ```python
16
+ from flask import Flask, render_template, request
17
+ from wtforms import Form, TextAreaField, validators
18
+ import pickle
19
+ import sqlite3
20
+ import os
21
+ import numpy as np
22
+
23
+ from vectorizer import vect
24
+
25
+ app = Flask(__name__)
26
+
27
+ cur_dir = os.path.dirname(__file__)
28
+ clf = pickle.load(open(os.path.join(cur_dir, 'pkl_objects', 'classifier.pkl'),
29
+ 'rb'))
30
+ db = os.path.join(cur_dir, 'reviews.sqlite')
31
+
32
+ def classify(document):
33
+ label = {0: 'negative', 1: 'positive'}
34
+ X = vect.transform([document])
35
+ y = clf.predict(X)[0]
36
+ proba = clf.predict_proba(X).max()
37
+ return label[y], proba
38
+
39
+ def train(document, y):
40
+ X = vect.transform([document])
41
+ clf.partial_fit(X, [y])
42
+
43
+ def sqlite_entry(path, document, y):
44
+ conn = sqlite3.connect(path)
45
+ c = conn.cursor()
46
+ c.execute("INSERT INTO review_db (review, sentiment, date)"\
47
+ " VALUES (?, ?, DATETIME('now'))", (document, y))
48
+ conn.commit()
49
+ conn.close()
50
+
51
+ class ReviewForm(Form):
52
+ moviereview = TextAreaField('',
53
+ [validators.DataRequired(),
54
+ validators.length(min=15)])
55
+ @app.route('/')
56
+ def index():
57
+ form = ReviewForm(request.form)
58
+ return render_template('reviewform.html', form=form)
59
+
60
+ @app.route('/results', methods=['POST'])
61
+ def results():
62
+ form = ReviewForm(request.form)
63
+ if request.method == 'POST' and form.validate():
64
+ review = request.form['moviereview']
65
+ y, proba = classify(review)
66
+ return render_template('results.html',
67
+ content=review,
68
+ prediction=y,
69
+ probability=round(proba*100, 2))
70
+ return render_template('reviewform.html', form=form)
71
+
72
+ @app.route('/thanks', methods=['POST'])
73
+ def feedback():
74
+ feedback = request.form['feedback_button']
75
+ review = request.form['review']
76
+ prediction = request.form['prediction']
77
+
78
+ inv_label = {'negative': 0, 'positive': 1}
79
+ y = inv_label[prediction]
80
+ if feedback == 'Incorrect':
81
+ y = int(not(y))
82
+ train(review, y)
83
+ sqlite_entry(db, review, y)
84
+ return render_template('thanks.html')
85
+
86
+ if __name__ == '__main__':
87
+ app.run()
88
+ ```
89
+
14
90
  エラーログは以下です。
15
91
  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'
16
92