def fixTxtIfNeed(txt): arr = utils.str2arr(txt) for w in arr: if (not utils.getStartForm(w) in utils.dictionw): logD("Ask Ya.Speller...") return utils.checkText(txt) return txt
def getAnswerByDial(self, arr): #Нет ничего более постоянного, чем временное... txt = arr[-1].lower() txt = txt.replace("курису", "").replace("макисе", "").replace( "макисэ", "").replace("амадей", "").replace("amadeus", "").replace("амадеус", "") txtarr = utils.str2arr(txt) if (("что лучше" in txt) or ("лучше" in txtarr and "или" in txtarr)): t1, t2 = getVibor(txt) if (t1 > 0.2): return t1, t2 if ((("го" in txtarr) or ("кинь" in txtarr) or ("пришли" in txtarr) or ("отправь" in txtarr)) and ("цитату" in txtarr) and ("баш" in txt or "bash" in txt)): return 0.9, getBashorg() if ((("го" in txtarr) or ("кинь" in txtarr) or ("пришли" in txtarr) or ("отправь" in txtarr)) and ("цитату" in txtarr)): return 0.9, getRandquote() if (txt == "цитату"): return 0.7, getRandquote() if (("посоветуй" in txt or "порекомендуй" in txt or "подскажи" in txt or "кинь" in txt) and ("аниме" in txtarr or "анимцо" in txtarr or "анимэ" in txtarr or "anime" in txtarr)): return 0.9, getRandAnime() if ("какое" in txtarr and "аниме" in txtarr and ("посмотреть" in txtarr or "глянуть" in txtarr)): return 0.9, getRandAnime() if (("кинь" in txt or "отправь" in txt or "пришли" in txt or "го" in txtarr) and ("кошкодев" in txt or "некочан" in txt or "некотян" in txt or "с кошачьеми уш" in txt or "с кошачьими уш" in txt)): return 0.9, getNekochan() try: if ("arxiv.org" in txt): return 0.8, getArxivArticle(txt) if (" стать" in txt and "arxiv" in txt): return 0.85, getArxivArticle(txt) if (" стать" in txt and (" архива" in txt or " архиве" in txt)): return 0.85, getArxivArticle(txt) if ("най" in txt and "arxiv" in txt): return 0.85, getArxivArticle(txt) if ("най" in txt and "архиве" in txt): return 0.85, getArxivArticle(txt) except Exception as e: logD(e) if (("кинь" in txtarr or "отправь" in txtarr or "пришли" in txtarr or "покажи" in txtarr or "го" in txtarr) and ("себя" in txtarr or "свою фот" in txt or "селфи" in txtarr or "сэлфи" in txtarr or "себяшку" in txtarr or "с собой" in txt)): return 0.7, getKurisuArt() # if():return 0.85,getMedicalArticle(txt) try: return getAnswerFromKnowledger( txt.replace("что ты думаешь о", "что такое"), utils.getMainTheme(" ".join(arr)), arr[-2]) except Exception as e: logD(e) return 0, ""
def getArxivArticle(txt): #Статья с arxiv.org по поисковому запросу txtarr = utils.str2arr(txt) q = "" for i in txtarr: if (i.count("arxiv") + i.count("кинь") + i.count("най") + i.count("пожалуйста") + i.count("плиз") + i.count("мне") + i.count("го") + i.count("стат") + i.count("архив") + i.count("ишли") + i.count("отправь") == 0): q += i + " " return getArxiv0(q[:-1]) #TODO: fix it
def getVibor(txt): #Выбрать один вариант из нескольких, TODO: доработать txt = txt.replace("Тру, ", "").replace("Амадей", "").replace( "Кристина", "").replace("Курису", "").replace("Тру,", "") #Если вопрос к Тру, то тоже отвечаем txt = txt.replace("как думаешь", "").replace("что лучше", "").replace("Как думаешь", "").replace("Что лучше", "") if (len(txt) < 3 or txt.lower().count(" или ") == 0): return 0.1, "" txtarr = utils.str2arr( txt[:2] + txt[2:].replace(", ", " или ").replace(",", " или ")) if (txtarr.count("или") == 0): return 0.1, "" txtarrarr = [""] for i in txtarr: if (i == "или"): txtarrarr.append("") else: txtarrarr[-1] += i + " " semloads = [] for i in txtarrarr: semloads.append(utils.getSemanticLoad(i)) minn = min(semloads) mini = semloads.index(minn) semloads[mini] = 10 minn2 = min(semloads) ans = txtarrarr[mini][:-1] cov = abs(minn - minn2) / (minn + minn2 + 1e-6) if (cov > 0.9): ans = random.choice([ "Очень сложно, но думаю, что ", "Очень сложно, но мне кажется, что ", "Сложно/pauseМне кажется, что " ]) + ans elif (cov > 0.6): ans = random.choice( ["Сложно, но думаю, что ", "Сложно, но мне кажется, что "]) + ans elif (cov > 0.3): ans = random.choice(["Мне кажется, что ", "Думаю, что "]) + ans elif (cov > 0.2): ans = random.choice(["Я считаю, что ", "Моё мнение: ", ""]) + ans else: ans = random.choice([ "Очевидно, что ", "Очевидно же, что ", "Ясно, что ", "Это же очевидно!/pause", "А что думать?/pause" ]) + ans return 1 - cov / 9, ans
def __init__(self, s): #Из строки с нуля global reglink if (type(s) == str): self.orig = s if (len(self.orig) > 0 and self.orig[-1] == '\n'): self.orig = self.orig[:-1] self.words = [].copy() self.tokenizedwords = [].copy() arr = utils.str2arr(s) links = re.findall(reglink, s) for i in arr: d = {} tmpl = "" for link in links: if (link.count(i) > 0): tmpl = link break if (tmpl != ""): #Для ссылок несколько иная обработка d['word'] = tmpl d['startform'] = tmpl d['root'] = tmpl d['semload'] = utils.getSemanticLoad_low(tmpl) d['syns'] = "" self.words.append(d) continue d['word'] = i d['startform'] = utils.getStartForm(i) inf = utils.wordInfo(i) d['root'] = inf['root'] d['semload'] = utils.getSemanticLoad_low(i) if (inf['parts'].count('|гл|') > 0): d['semload'] *= 1.1 if (inf['parts'].count('|мест|') + inf['parts'].count('|числ|') > 0): d['semload'] *= 0.9 d['syns'] = inf['syns'] self.words.append(d) elif (type(s) == dict): #Из сохранённого self.orig = s['orig'] if (len(self.orig) > 0 and self.orig[-1] == '\n'): self.orig = self.orig[:-1] self.words = s['words'] else: print("Invalid constructor object")
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 getAnswerFromKnowledger( txt, context, lastmsg): #Получить ответ из Интернета (Лурк и Вики вместе) ismat = False ######## АХТУНГ! МНОГО МАТА И ИНДУССКОГО КОДА! ПЕРЕД ИЗУЧЕНИЕМ СЕСТЬ И ВЫПИТЬ УСПОКОИТЕЛЬНОГО txt = txt.replace("Тру, ", "").replace( "Тру,", "" ) #Вот сейчас серьёзно. Не стоит вскрывать эту функцию, вы молодые, шутливые... if (len(txt) < 3): return 0.1, "" txtarr = utils.str2arr(txt) lastmsgarr = [] try: lastmsgarr = utils.str2arr(lastmsg) except: pass for i in [ 'хуй', 'залупа', 'пенис', 'пепка', 'пеп', 'пизда', 'пиздец', 'бля', 'блять', 'блядь', 'заебись', 'ебу', 'хуя', 'кек' ]: if (i in lastmsgarr or i in txtarr or i in context): ismat = True break res = "" if ("что" in txtarr and "это" in txtarr and len(txtarr) == 2): try: inp = context[-1] if (len(inp) < 5): inp = context[-2] if (utils.getSemanticLoad(inp) < 0.2): lastmsgsems = [] for i in lastmsgarr: lastmsgsems.append(utils.getSemanticLoad(i)) inp = lastmsgarr[lastmsgsems.index(max(lastmsgsems))] if (ismat): res = getLurkAnswer(inp) if (len(res) < 3): res = getWikipediaAnswer(inp) else: res = getWikipediaAnswer(inp) if (len(res) < 3): res = getLurkAnswer(inp) except Exception as e: logD(e) if (len(res) > 3): return 0.9, res if ("что" in txtarr and "такое" in txtarr): inp = "" for i in txtarr: if (i != "что" and i != "такое"): inp += i + " " if (ismat): res = getLurkAnswer(inp) if (len(res) < 3): res = getWikipediaAnswer(inp) else: res = getWikipediaAnswer(inp) if (len(res) < 3): res = getLurkAnswer(inp) if (len(res) > 3): return 0.9, res if ("что" in txtarr and "значит" in txtarr): inp = "" for i in txtarr: if (i != "что" and i != "значит"): inp += i + " " if (ismat): res = getLurkAnswer(inp) if (len(res) < 3): res = getWikipediaAnswer(inp) else: res = getWikipediaAnswer(inp) if (len(res) < 3): res = getLurkAnswer(inp) if (len(res) > 3): return 0.9, res if ("что" in txtarr and "есть" in txtarr): inp = "" for i in txtarr: if (i != "что" and i != "есть"): inp += i + " " if (ismat): res = getLurkAnswer(inp) if (len(res) < 3): res = getWikipediaAnswer(inp) else: res = getWikipediaAnswer(inp) if (len(res) < 3): res = getLurkAnswer(inp) if (len(res) > 3): return 0.9, res if ("поясни" in txtarr and "за" in txtarr): inp = "" for i in txtarr: if (i != "поясни" and i != "за"): inp += i + " " if (ismat): res = getLurkAnswer(inp) if (len(res) < 3): res = getWikipediaAnswer(inp) else: res = getWikipediaAnswer(inp) if (len(res) < 3): res = getLurkAnswer(inp) if (len(res) > 3): return 0.9, res if ("кто" in txtarr and "такой" in txtarr): inp = "" for i in txtarr: if (i != "кто" and i != "такой"): inp += i + " " if (ismat): res = getLurkAnswer(inp) if (len(res) < 3): res = getWikipediaAnswer(inp) else: res = getWikipediaAnswer(inp) if (len(res) < 3): res = getLurkAnswer(inp) if (len(res) > 3): return 0.9, res if ("что" in txtarr and "будет" in txtarr and "если" in txtarr): res = thequest(txt) if (res.count("<theq-answer") > 0): res = res[:res.index("<theq-answer")] if (len(res) < 3): res = otvetMailRu(inp) res = res.replace("<strong>", "").replace("</strong>", "").replace( "<i>", "").replace("</i>", "").replace("</span>", "").replace( "<a href=\"", "").replace("target=\"_blank\"", "").replace("</a>", "") if (len(res) > 3): return 0.6, res if (int("кто" in txtarr) + int("что" in txtarr) + 2 * (txt.count("проинтегрир") + txt.count("продифференц")) + txt.count("зна") + txt[-2:].count("?") > 1): try: res = getWolframRU(txt) except Exception as e: logD(e) if (len(res) > 3): return 0.4, res return 0.1, "Я не знаю"