import os import shutil import re import json import numpy as np from wordcloud import WordCloud import matplotlib.pyplot as plt from sklearn.pipeline import Pipeline from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.naive_bayes import MultinomialNB from sklearn.linear_model import LogisticRegression, SGDClassifier from sklearn.calibration import CalibratedClassifierCV from sklearn.metrics import classification_report, confusion_matrix from const import category_labels from load_data import preprocess, load_datasets from sklearn.externals import joblib import heapq from flask import Flask,request,jsonify a = open(r"x_tr_list.json", "r",encoding='UTF-8') X_train_data =json.loads(a.read()) a.close() b = open(r"y_tr_list.json", "r",encoding='UTF-8') y_train =json.loads(b.read()) b.close() new_li=[] for i in y_train: if i not in new_li: new_li.append(i) stopwords = open('dict/stop_words.txt', encoding='utf-8').read().split() tfidf_vectorizer = TfidfVectorizer(stop_words=stopwords) X_train_tfidf = tfidf_vectorizer.fit_transform(X_train_data) classifier=joblib.load('naiveBayesrClassifier.model') text_clf_svm=joblib.load('SvmClassifier.model') def getKnowledgeIds(req): new_data = preprocess(req['text']) get = tfidf_vectorizer.transform([new_data])[0] predicted = classifier.predict_proba(get) arr_aa = np.array(predicted)[0] arr_aa = arr_aa.tolist() predicted_svm = text_clf_svm.predict([new_data]) res=predicted_svm.tolist() re2 = map(arr_aa.index, heapq.nlargest(5, arr_aa)) l =list(re2) for f in l: if new_li[f]!=res[0]: res.append(new_li[f]) return res news_lastest = ["stem = 在支持多线程的操作系统中,假设进程 P 创建了若干个线程,那么( ) 是不能被这些线程共享的。, options = {A=该进程的代码段, B=该进程中打开的文件, C=该进程的全局变量, D=该进程中某线程的栈指针}, answer = D, analysis = 在同一进程中的各个线程都可以共享该进程所拥有的资源,如访问进程地址空间中的每一个虚地址;访问进程拥有已打开文件、定时器、信号量机构等,但是不能共享进程中某线程的栈指针。", "stem = 某开发小组欲为一公司开发一个产品控制软件,监控产品的生产和销售过程,从购买各种材料开始,到产品的加工和销售进行全程跟踪。购买材料的流程、产品的加工过程以及销售过程可能会发生变化。该软件的开发最不适宜采用()模型,主要是因 为这种模型()。, options = {A=瀑布,难以适应变化的需求, B=原型,不能理解用户的需求, C=增量,不能解决风, D=喷泉,不能快速提交软件}, answer = A, analysis = 对于较大型软件系统的需求往往难以在前期确定,所以瀑布模型最不适合。对于较大型软件系统的需求往往难以在前期确定,所以瀑布模型最不适合", "stem = 网络安全体系设计可从物理线路安全、网络安全、系统安全、应用安全等方面来进行,其中,数据库容灾属于()。, options = {A=物理线路安全和网络安全, B=应用安全和网络安全, C=系统安全和网络安全, D=系统安全和应用安全}, answer = D, analysis = 网络安全体系设计是逻辑设计工作的重要内容之一,数据库容灾属于系统安全和应用安全考虑范畴。"] req={'text':news_lastest[0]} res=getKnowledgeIds(req) print(res) app = Flask(__name__) @app.route('/predict',methods=['POST']) def index(): body=request.get_json() # print(body) return jsonify(getKnowledgeIds(body)) if __name__ == '__main__': # app.debug = True # 设置调试模式,生产模式的时候要关掉debug app.run()