質問編集履歴
1
コードの追加
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
|
|