keys = ['New cases', 'New deaths'] W = DB('Poland') last_day_db = W.get_last_record_date() message = 'Wait for a next scrap...' while (True): print(message) hour_now = datetime.datetime.now().hour min_now = datetime.datetime.now().minute time_now = str(hour_now) + ':' + str(min_now) try: if time_now >= scrap_time and W.get_last_record_date() != today_: os.system('cls') D = DR('Poland') D.show_raport() W.insert(D) Pl = P(W) Pl.RBF_prediction(keys) pickle_file = open(Pl.path + '\Process_Object.pickle', 'wb') pickle.dump(Pl, pickle_file) pickle_file.close() Pl.send_mail(Pl.path + '\passwords') tomorrow_date = datetime.date.today() + (datetime.timedelta( days=1)) Pl.save_predicion_to_txt(tomorrow_date, Pl.path + '\predykcje.txt') message = 'Data was already downloaded.' else: message = 'Data is in a database.'
def reason(form): msymptom = [form.biti.data*1, form.bisai.data*2, form.fashao.data*3 , form.toutong.data*4 , form.jirousuantong.data*5 , form.kesou.data*6 ] mallegy = [form.wmhjgm.data*1 , form.dyxajfgm.data*2 , form.ymsfgm.data*3] while 0 in msymptom: msymptom.remove(0) while 0 in mallegy: mallegy.remove(0) print msymptom print mallegy DataBase.clear() CnclsBase.clear() DataBase.ask(msymptom,mallegy) DataBase.insert() # 推理 while DataBase.newdatanum()>0: print "newdata还有数据条数:" + str(DataBase.newdatanum()) fact = DataBase.pickone(); #取出一个事实,进行推理 for i in range(KnowledgeBase.num()): rule = KnowledgeBase.pickone(i); if rule[0]==fact[0]: print "get conclusion:"+rule[1] #可信度计算 fea_fact = float(fact[1]) fea_rule = float(rule[2]) fea_concl = fea_rule*max(0,fea_fact) #结论归纳 if rule[1].encode('UTF-8') in ConclusionBase.param: # 如果是一个结论 # print "put into conclusion" CnclsBase.putone((rule[1],fea_concl))#放入结论库 else: #如果是一个推论 # print "put into newdata" DataBase.nputone((rule[1],fea_concl))#放入一个推论 #删除已使用的事实 DataBase.ndeleteone(fact) #把结论总结一下(之前的推理对同一个结论得出不同的可信度) for j in ConclusionBase.param: kind = CnclsBase.pickkind(j) if len(kind)==0: break; else: tmp = float(kind[0][2]) for i in range(len(kind)-1): nex = float(kind[i+1][2]) if tmp*nex<0: tmp = (tmp+nex)/(1-min(abs(tmp),abs(nex))) elif (tmp<0 and nex<0): tmp = tmp+nex+tmp*nex else: tmp = tmp+nex-tmp*nex CnclsBase.deletekind(kind[0][1]) CnclsBase.putone((kind[0][1],tmp)) # 打印结论,并解释 for i in range(CnclsBase.num()): #对所有结论检查一遍 clu = CnclsBase.pickone(i); for j in CnclsBase.interpretor: #对每个结论,检查所有解释字段,以找到匹配的字段 if j[0].decode('UTF-8')==clu: #结论匹配 print 'conclusion matched' print clu symptoms = [] for symptom in j[1:len(j)]: if DataBase.checksymptom(symptom): symptoms.append(symptom) CnclsBase.update((clu,symptoms)) string = CnclsBase.show() return string