Как видите, ваша переменная text_clf
создается в функции upload()
, поэтому область действия предназначена только для этой функции. В функции predict()
доступ к переменной text_clf
невозможен.
Попробуйте импортировать flask, задав для переменной text_clf значение flask.g
, а затем получить ее, используя flask.g.get()
:
from flask import *
@app.route('/upload', methods=['GET','POST'])
def upload():
if request.method == 'POST':
file = request.files['file']
df = pd.read_csv(file)
df['label'] = df['label'].map({'HS': 0, 'Non_HS': 1})
X = df['clean']
y = df['label']
from sklearn.model_selection import train_test_split
X = X.replace([np.inf, -np.inf], np.nan)
y = y.replace([np.inf, -np.inf], np.nan)
X = X.dropna()
y = y.dropna()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import LinearSVC
from sklearn.pipeline import Pipeline
text_clf = Pipeline([('tfidf',TfidfVectorizer()),('clf',LinearSVC())])
text_clf.fit(X_train,y_train)
g.x = text_clf
return redirect(url_for('upload', file=file))
return render_template('upload_data.html')
@app.route('/predict',methods=['POST'])
def predict():
#df = pd.read_csv('Dataset/preprocess1109v2.csv', encoding="latin-1")
# Features and Labels
if request.method == 'POST':
message = request.form['message']
data = [message]
#vect = count_vect.transform(data).toarray()
text_clf = g.get('x', None)
my_prediction = text_clf.predict(data)
return render_template('classification.html',prediction = my_prediction)
РЕДАКТИРОВАТЬ: также сказать, что пользователь @Jorge Luís Melgarejo ответ является лучшим способом go, я просто даю «обходное» решение для этой конкретной c проблемы.