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 "Ошибка запроса ("
Example #4
0
    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, ""
Example #5
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)