import requests import re, random import nltk from util import logging, config key = config.settings["api_keys"]["thesaurus"] url = f"http://thesaurus.altervista.org/thesaurus/v1?key={key}&language=en_US&output=json&word=" def thesaurufy_sentence(sentence): symbols = nltk.word_tokenize(sentence) tags = nltk.pos_tag(symbols) if len(symbols) == 0: return "" for i in range(0, len(symbols)): if not symbols[i].isalpha(): continue if tags[i][1] != "NN" and tags[i][1] != "VB" and tags[i][1] != "VBG" and tags[i][1] != "VBP" and tags[i][1] != "JJ" and tags[i][1] != "RB": symbols[i] = " " + symbols[i] continue response = requests.get(url + symbols[i]) if not response.ok: # logging.warning(f"Thesaurus API returned {response.status_code} ({url + symbols[i]})") symbols[i] = " " + symbols[i] continue responses = response.json()["response"] condition = "" if tags[i][1] == "JJ": condition = "(adj)" elif tags[i][1] == "RB": condition = "(adv)" elif tags[i][1] == "NN": condition = "(noun)" else: condition = "(verb)" try: words = random.choice([a for a in responses if a["list"]["category"] == condition])["list"]["synonyms"].split("|") except: symbols[i] = " " + symbols[i] continue # print(words) word = words[random.randint(0, len(words) - 1)] if "(" in word: if "antonym" in word.split("(")[1].lower(): symbols[i] = " " + symbols[i] continue word = word.split("(")[0][:-1] symbols[i] = " " + word return "".join(symbols)