web.py 3.7 KB

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