def getWikipediaAnswer(inp): #Запрос к Вики в любом виде if (utils.isEnglish(inp) > 0.8): res = strongWikiEN(inp) else: res = strongWiki(inp) if (len(res) < 1): res = strongWikiEN(utils.rutoen(inp)) if (len(res) > 5): res = utils.entoru(res) return res
def getMedicalArticle( q ): #Реализовать в классе ниже, https://www.ncbi.nlm.nih.gov/books/NBK25498/#chapter3.Introduction -- документация if (utils.isEnglish(q) < 0.8): q = utils.rutoen(q) url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term" + urllib.parse.urlencode( [("", q)]) + "&usehistory=y" logD("Original query: " + q) bts = urllib.request.urlopen(url, timeout=40) s = bts.read().decode('UTF-8') bts.close() res = "https://www.ncbi.nlm.nih.gov/pubmed/" + getXMLfield(s, "Id") bts = urllib.request.urlopen(res, timeout=40) s = bts.read().decode('UTF-8') bts.close() tit = getXMLfield(s, "title") # tit=tit[:tit.rindex(" res += " -- " + utils.entoru(tit) return res
def getArxiv0(q): #Arxiv.org low if (utils.isEnglish(q) < 0.8): q = utils.rutoen(q) q = q.replace("\n", "") #В отличии от Баша, у Архива есть документированный API: url = "http://export.arxiv.org/api/query?search_query" + urllib.parse.urlencode( [("", q)]) + "&start=0&max_results=1" logD("Original query: " + q) bts = urllib.request.urlopen(url, timeout=40) s = bts.read().decode('UTF-8') bts.close() try: s = s[s.index("<entry>"):s.index("</summary>")] link = s[s.index("<id>") + 4:s.index("</id>")].replace( "/abs/", "/pdf/") desc = utils.entoru(s[s.index("<title>") + 7:s.index("</title>")]) return link + " - " + desc except Exception as e: logD(e) return "Ошибка запроса ("
def getAnswerByDial(self, arr): #Для совместимости с адаптерами cmd = arr[-1].lower() if (cmd.count("/pause") > 0): cmd = cmd.split("/pause")[-1].replace("/pause", "") # print("Assist:",cmd) score = 0 warr = utils.str2arr(cmd) if (warr[0] in [ "курису", "амадей", "amadeus", "амадеус", "ассистент", "кристина" ]): warr.pop(0) if (warr[0].count("включи") + warr[1].count("музык") > 1): try: pth = os.path.expanduser("~/Музыка") + "/" #TODO: English fls = os.listdir(pth) priors = [] for i in fls: tmpi = i.lower() if (tmpi.count("stein") + tmpi.count("takeshi") + tmpi.count("s;g") + tmpi.count("штейн") > 0): priors.append(i) #Штайнера и Штайна игнорим. Не канон. cmd = "vlc --open" # --random" for i in priors: #Сначала воспроизводим относящееся к тематике Калитки cmd += " \"" + pth + i + "\"" for i in fls: cmd += " \"" + pth + i + "\"" os.system(cmd + " 2>&1 &") return 0.9, "Выполнено!" except Exception as e: print(e) if ("определител" in cmd and "матриц" in cmd): try: m = utils.bashExec("xclip -o") m = m.replace("{", "[").replace("}", "]").replace("\n", "") D = np.linalg.det(eval(m)) return 0.9, "Определитель равен " + str(fractions.Fraction(D)) except Exception as e: print(e) return 0.7, "Произошла ошибка " + utils.entoru(str(e)) if ("собствен" in cmd and "значения" in cmd and "матриц" in cmd): try: m = utils.bashExec("xclip -o") m = m.replace("{", "[").replace("}", "]").replace("\n", "") eigvals = np.linalg.eig(eval(m))[0] print(eigvals) res = "" for i in range(len(eigvals)): res += str(fractions.Fraction(eigvals[i])) + ", " return 0.9, "Собственные значения " + res[:-2] except Exception as e: print(e) return 0.7, "Произошла ошибка " + utils.entoru(str(e)) if ("собствен" in cmd and "вектор" in cmd and "матриц" in cmd): try: m = utils.bashExec("xclip -o") m = m.replace("{", "[").replace("}", "]").replace("\n", "") m = Matrix(eval(m)) vects = m.eigenvects() res = "" for v in vects: val = str(v[0]) vv = str(v[2]).replace("[", "").replace("]", "").replace("\n", "")[6:] res += "/pause Значение " + val + " - " + vv '''eigvals,eigvect=np.linalg.eig(eval(m)) print(eigvals,eigvect) res="" zeros=[0 for x in range(len(eigvals))] for i in range(len(eigvals)): res+="Значение "+str(fractions.Fraction(eigvals[i]))+" - [" curvect=zeros.copy() curvect[i]=1 curvect=eigvect.dot(curvect) curvect/=min(curvect) for j in range(len(curvect)):res+=str(fractions.Fraction(curvect[j]))+", " res=res[:-2]+'],''' return 0.9, "Собственные вектора " + res except Exception as e: print(e) return 0.7, "Произошла ошибка " + utils.entoru(str(e)) return 0, ""
def getAnswer(self, txt, pictxt="", isPrivate=True ): #isPrivate решает, молчать в случае сомнений или отвечать self.t1 = time.time() if (len(txt) == 0): return if (txt[:6] == '/start'): self.sendAnswer("Я " + random.choice(["Курису Макисэ", "Макисэ Курису"]) + ". Рада познакомиться" + random.choice([".", " )", " ^-^", " ^-^"])) return if (txt[:6] == '/debug'): self.sendAnswer("**Отладочная информация**:\n" + self.__debuginfo, isClear=True) #Отправка отладочной информации return if (self.lastCall > 0 and time.time() - self.lastCall > 1000): logD("Clear dial situation (a lot time)") self.dialsit = ['\n', '\n'].copy() if (not self.isWasNotPrivate): self.isWasNotPrivate = not isPrivate self.lastCall = time.time() txt = txt.replace("/pause", "pause") #Давно надо было этот баг убрать... txt = fixTxtIfNeed( txt) #Позря старается не обращаться к Яндекс.Спеллеру self.__debuginfo = "" self.__debuginfo += "\nТекст: \"" + txt + "\"" self.__debuginfo += "\nТекст с картинки: \"" + pictxt + "\"" if (isEnglish(txt) > 0.5): txt = utils.entoru(txt) #Перевод на русский self.__debuginfo += "\nОригинал на английском, перевод: \"" + txt + "\"" if (isEnglish(pictxt) > 0.5): pictxt = utils.entoru( pictxt) #Перевод на русский текста с картинки self.__debuginfo += "\nОригинал картинки на английском, перевод: \"" + txt + "\"" self.__context += utils.getMainTheme(txt) if (len(self.__context) > 10): self.__context = self.__context[-10:] self.__debuginfo += "\nТекущий контекст: " + str(self.__context) #Тело if (self.isAnswered or not isPrivate): self.dialsit.append(txt) else: self.dialsit[-1] += "/pause " + txt if (len(self.dialsit) > 4): self.dialsit = self.dialsit[ -4:] #Рассматриваются 4 последних фразы диалога if (ifAllEq(self.dialsit)): return self.__debuginfo += "\nТекущий dialsit: " + str(self.dialsit) msc, ans, dbg = getAnsswerByDialsit( self.__context, self.dialsit, self.localdial) #Непосредственно получение ответа self.__debuginfo += dbg if (self.isWasNotPrivate): #Добавить текущую строку self.localdial.diallines.append(pa.dialline(txt)) if (len(self.localdial.diallines) > 5000): self.localdial.diallines = self.localdial.diallines[-5000:] if (msc > self.pubScore): #Типа дропаут tmpdl = pa.dialline(ans) self.localdial.diallines.append(tmpdl) self.localdial.diallines.append(tmpdl) if (msc > self.pubScore or (msc > self.privScore and isPrivate)): self.sendAnswer(ans) return self.isAnswered = False
def entoru(q): #TODO: Delete this stub if (debug): logD("Обращение к переводу на русский") return utils.entoru(q)