我的用于文本数据预测的Pipeline模型是
pipe1=Pipeline([ ('tfidf',TfidfVectorizer(analyzer=split_into_lemmas,min_df=20,max_df=3000)), ('classfier',MultinomialNB())])
API应用是
from flask import Flask, jsonify,requestfrom sklearn.externals import joblibimport pandas as pdfrom nltk.tokenize import word_tokenizefrom nltk.corpus import stopwordsstop = set(stopwords.words('english'))from nltk.stem.wordnet import WordNetLemmatizerlemma = WordNetLemmatizer()def split_into_lemmas(message): message=message.lower() words = word_tokenize(message) words_sans_stop=[] for word in words : if word in stop:continue words_sans_stop.append(word) return [lemma.lemmatize(word) for word in words_sans_stop]app = Flask(__name__)@app.route('/',methods=['POST'])def home(): return 'Hello Jaison'@app.route('/predict', methods=['POST'])def predict(): json_ = request.get_json(silent=True) message=json_.get('message') mydf = pd.DataFrame({'message':message}) print(mydf) prediction = clf.predict_proba(mydf['message']) return jsonify({'prediction': prediction.tolist()})if __name__ == '__main__': clf = joblib.load('/Users/JaisoN/my_model_pipeline.pkl') app.run(port=5000)
当我访问URL时
得到了正确的响应,但是当我使用JSON格式的文本数据访问预测URL时
curl -H "Content-Type: application/json" -X POST -d '{"message":["I‘m going to try for 2 months ha ha only joking"]}' http://127.0.0.1:5000/predict
我得到了以下错误
File "C:/Users/JaisoN/.spyder-py3/temp.py", line 30, in predict message=json_.get('message')AttributeError: 'NoneType' object has no attribute 'get'
回答:
Curl请求不正确。
将其更改为:
curl localhost:5000/predict -d '{"foo": "bar"}' -H 'Content-Type: application/json'