class Texto: """ A classe Texto é responsável por criar, tratar, interpretar e separar os textos a respeito do tema central. """ def __init__(self): """ Inicializa a classe Texto """ sequence = [ self.load, self.cria_watson, self.pesquisa_no_wikipedia, self.limpa_conteudo, self.quebra_em_sentences, self.cria_keywords, self.traduzir_sentences, self.save ] for function in tqdm(sequence, desc="Robô de Texto: "): function() def cria_watson(self): self.watson = Watson() def pesquisa_no_wikipedia(self): """ Pesquisa o tema principal no wikipedia """ nome_artigo = self.consulta_o_algoritmia() termos = {"articleName": nome_artigo, "lang": "en"} # url = "https://en.wikipedia.org/wiki/" \ # f"{nome_artigo.replace(' ', '_')}" # self.keywords = self.watson.analyze_url(url)["keywords"] client = Algorithmia.client(API_KEY_ALGORITHMIA) algo = client.algo('web/WikipediaParser/0.1.2') algo.set_options(timeout=300) result = algo.pipe(termos).result self.conteudo = result["content"] def consulta_o_algoritmia(self): """ Verifica qual o artigo que melhor se encaixa ao tema central """ m_input = {"search": self.dados["input"]["temaCentral"], "lang": "en"} client = Algorithmia.client(API_KEY_ALGORITHMIA) algo = client.algo('web/WikipediaParser/0.1.2') algo.set_options(timeout=300) return algo.pipe(m_input).result[0] def limpa_conteudo(self): """ Sanitiza o conteudo do wikipedia, retirando marcações, linhas em branco e as tags de MarkDown """ without_blank_lines = [ line.strip() for line in self.conteudo.split("\n") if line.strip() != "" and (not line.startswith("=")) ] texto_limpo = ' '.join(without_blank_lines) self.conteudo_limpo = texto_limpo def quebra_em_sentences(self): """ Divide o conteudo limpo, em uma lista de sentenças lógicas. """ seg = pysbd.Segmenter(language="en", clean=False) quebrado = seg.segment(self.conteudo_limpo) self.sentences = quebrado[:self.dados["input"]["tamanhoSlide"]] def cria_keywords(self): """ A partir de uma frase, são definidas as keywords dela. """ n_senteces = [] for sentence in self.sentences: analise = self.watson.analyze_str(sentence) keywords = [keyword["text"] for keyword in analise["keywords"]] model_sentence = { "text": sentence, "keywords": keywords, "images": [] } n_senteces.append(model_sentence) self.sentences = n_senteces def traduzir_sentences(self): """ Traduz as sentenças para português. """ n_sentences = [] for sentence in self.sentences: sentence["text"] = traduz(sentence["text"], 'pt') n_sentences.append(sentence) self.sentences = n_sentences def save(self): """ Salva o conteudo tratado no documento, dadosSentences.json """ geral = {"sentences": self.sentences, "input": self.dados["input"]} with open('Documents\\dados.json', 'w', encoding='utf-8') as outfile: json.dump(geral, outfile, indent=2, ensure_ascii=False) def load(self): """ Importa os dados de input do usuário """ with open('Documents\\dados.json', 'r', encoding='utf-8') as j: json_data = json.load(j) self.dados = json_data