import urllib.request
import re
import unicodedata
import sys
import string
import nltk
from bs4 import BeautifulSoup

#Lista de palavras-chave da operação 'Lava Jato', cada uma contendo uma pontuação baseada na especificidade da palavra com o assunto eem questão (a palavras mais genéricas é atribuída uma nota menor)
keywordScoreList = {
    "operação": 3, "operações": 2,
    "empreiteira": 2, "empreiteiras": 2, "empreiteiro": 2, "empreiteiros": 2,
    "petrobrás": 4, "petróleo": 3,
    "investigação": 1, "investigações": 1, "investigar": 1,
    "réu": 1, "réus": 1,
    "cartel": 5, "cartéis": 5,
    "doleiro": 2, "doleiros": 2,
    "corrupção": 5, "corrupções": 5,
    "licitação": 2, "licitações": 2,
    "crime": 1, "crimes": 1, "criminal": 1, "criminoso": 1, "criminosos": 1, "criminosa": 1, "criminosas": 1,
    "condenar": 2, "condenou": 2, "condenaram": 2, "condenado": 2, "condenados": 2, "condenada": 2, "condenadas": 2,
    "julgar": 2, "julgado": 2, "julgados": 2, "julgada": 2, "julgadas": 2,
    "prisão": 2, "prisões": 2,
    "propina": 3, "propinas": 3,
    "desvio": 2, "desvios": 2, "desviar": 2, "desvia": 2, "desviam": 2, "desviava": 2, "desviavam": 2,
    "intermediar": 1, "intermediário": 1, "intermediários": 1,
    "tribunal": 2, "tribunais": 2,
    "lavagem": 2, "lavagens": 2,
    "ilegal": 2, "ilegais": 2,
    "delegacia": 2, "delegacias": 2,
    "intimação": 2, "intimações": 2,
    "acusado": 2, "acusados": 2, "acusada": 2, "acusadas": 2, "acusação": 2, "acusações": 2,
    "delação": 3, "delações": 3, "delatado": 3, "delatados": 3, "delatada": 3, "delatadas": 3,
    "leniência": 3, "leniências": 3,
    "jurídico": 2, "jurídicos": 2, "juiz": 2,
    "executivo": 2, "executivos": 2,
    "legislativo": 2, "legislação": 2,
    "político": 2, "políticos": 2, "política": 2, "políticas": 2,
    "fiscal": 2, "fiscais": 2,
    "usufrutuário": 5, "usufrutuários": 5,
    "repatriado": 4, "repatriados": 4, "repatriação": 4,
    "deflagrado": 3, "deflagrados": 3, "deflagrada": 3, "deflagradas": 3,
    "catilinária": 5, "catilinárias": 5,
    "peculato": 5, "peculatos": 5,
    "fraudar": 3, "fraudatório": 3, "fraudatória": 3, "fraude": 3, "fraudes": 3,
    "foro": 3,
    "stf": 3, "tribunal": 3, "tribunais": 3
}

#Lista de nomes envolvidos na Lava Jato, retirada de https://pt.wikipedia.org/wiki/Lista_de_pessoas_envolvidas_na_Opera%C3%A7%C3%A3o_Lava_Jato
mainNamesRegexAreaList = {
    "<NAME>": (r"Adir.*Assad", "empresarial"),
    "<NAME>": (r"A[eé]cio.*Neves", "política"),
    "<NAME>": (r"Afonso.*Hamm", "política"),
    "<NAME>": (r"Agenor.*(?:Franklin|Magalh[aã]es|Medeiros)", "empresarial"),
    "<NAME>": (r"Aguinaldo.*Ribeiro", "política"),
    "<NAME>": (r"Alexandre.*(?:Portela|Barbosa)", "judicial"),
    "<NAME>": (r"Alberto.*(?:El[ií]sio|Vila[cç]a|Gomes)", "empresarial"),
    "<NAME>": (r"Aldemir.*Bendine", "política"),
    "<NAME>": (r"Alexandrino.*(?:de Salles|Ramos|de Alencar)", "empresarial"),
    "<NAME>": (r"Aline.*Corr[eê]a", "política"),
    "<NAME>": (r"Andr[eé].*(?:Cat[aã]o|de Miranda)", "empresarial"),
    "<NAME>": (r"Andr[eé].*Vargas", "política"),
    "<NAME>": (r"Angelo.*(?:Alves|Mendes)", "empresarial"),
    "<NAME>": (r"[AÂ]ngela.*(?:Palmeira|Ferreira)", "política"),
    "<NAME>": (r"An[ií]bal.*Gomes", "política"),
    "<NAME>": (r"Antonio.*(?:Almeida|da Silva)", "empresarial"),
    "<NAME>": (r"Antonio.*Anastasia", "política"),
    "<NAME>": (r"Antonio.*(?:Carlos|Pieruccini)", "judicial"),
    "<NAME>": (r"Ant[oô]nio.*(?:Campello|de Souza|Dias)", "empresarial"),
    "<NAME>": (r"Armando.*(?:Furlan|J[uú]nior)", "empresarial"),
    "<NAME>": (r"Antonio.*Palocci", "política"),
    "<NAME>": (r"Arthur.*Lira", "política"),
    "<NAME>": (r"Benedito.*de Lira", "política"),
    "<NAME>": (r"Carlos.*(?:Magno|Ramos)", "política"),
    "<NAME>": (r"C[aâ]ndido.*Vaccarezza", "política"),
    "<NAME>": (r"Cesar.*(?:Ramos|Rocha)", "empresarial"),
    "<NAME>": (r"Ciro.*Nogueira", "política"),
    "<NAME>": (r"Cristiano.*Kok", "empresarial"),
    "<NAME>": (r"Dalton.*(?:dos Santos|Avancini)", "empresarial"),
    "<NAME> e <NAME>": (r"Daniela.*(?:Leopoldo e Silva|Facchini)", "empresarial"),
    "<NAME>": (r"Dario.*(?:de Queiroz|Galv[aã]o)", "empresarial"),
    "<NAME>": (r"Delc[ií]dio.*do Amaral", "política"),
    "<NAME>": (r"Dilceu.*Sperafico", "política"),
    "<NAME>": (r"Dilma.*Rousseff", "política"),
    "<NAME>": (r"Edison.*Lob[aã]o", "política"),
    "<NAME>": (r"Ednaldo.*(?:Alves|da Silva)", "empresarial"),
    "<NAME>": (r"Eduardo.*Cunha", "política"),
    "<NAME>": (r"Eduardo.*da Fonte", "política"),
    "<NAME>": (r"Eduardo.*(?:de Oliveira|Freitas|Filho)", "empresarial"),
    "<NAME>": (r"Eduardo.*(?:Vaz|da Costa|Musa)", "empresarial"),
    "<NAME>": (r"Erton.*(?:Medeiros|Fonseca)", "empresarial"),
    "<NAME>": (r"Elton.*(?:Negr[aã]o|de Azevedo|J[uú]nior)", "empresarial"),
    "<NAME>": (r"Fl[aá]vio.*(?:Gomes|Machado|Filho)", "empresarial"),
    "<NAME> Pinheiro": (r"Fl[aá]vio.*(?:S[aá]|Motta|Pinheiro)", "empresarial"),
    "<NAME>": (r"Fernando.*(?:Antonio|Guimar[aã]es|Horneaux|de Moura)", "política"),
    "<NAME>": (r"Fernando.*(?:Bezerra|Coelho)", "política"),
    "<NAME>": (r"Fernando.*(?:Collor|de Mello)", "política"),
    "<NAME>": (r"Fernando.*Pimentel", "política"),
    "<NAME>": (r"Fl[aá]vio.*(?:David|Barra)", "empresarial"),
    "<NAME>": (r"Gerson.*Almada", "empresarial"),
    "<NAME>": (r"Gladson.*Cameli", "política"),
    "<NAME>": (r"Gleisi.*Hoffmann", "política"),
    "<NAME>": (r"Guido.*Mantega", "política"),
    "<NAME>": (r"Humberto.*Costa", "política"),
    "<NAME>": (r"Ildefonso.*(?:Colares|Filho)", "empresarial"),
    "<NAME>": (r"Ivan.*(?:Vernon|Gomes|Torres|J[uú]nior)", "política"),
    "<NAME>": (r"Jaques.*Wagner", "política"),
    "<NAME>": (r"Jean.*(?:Alberto|Luscher|Castro)", "empresarial"),
    "<NAME>": (r"Jer[oô]nimo.*Goergen", "política"),
    "<NAME>": (r"Jo[aã]o.*Le[aã]o", "política"),
    "<NAME>": (r"Jo[aã]o.*(?:Alberto|Pizzolati)", "política"),
    "<NAME>": (r"Joesley.*Batista", "empresarial"),
    "<NAME>": (r"Jos[eé].*(?:Adolfo|Pascowitch)", "empresarial"),
    "<NAME>": (r"Jo[aã]o.*(?:Proc[oó]pio|de Almeida|Prado)", "empresarial"),
    "<NAME>": (r"Jos[eé].*(?:Antunes|Sobrinho)", "empresarial"),
    "<NAME>": (r"Jos[eé].*(?:Dirceu|de Oliveira e Silva)", "política"),
    "<NAME>": (r"Jos[eé].*(?:Humberto|Cruvinel|Resende)", "empresarial"),
    "<NAME>": (r"Jos[eé].*Linhares", "política"),
    "<NAME>": (r"Jos[eé].*Mentor", "política"),
    "<NAME>": (r"Jos[eé].*(?:Ot[aá]vio|Germano)", "política"),
    "<NAME>": (r"Jo[aã]o.*(?:Vaccari|Neto)", "política"),
    "<NAME>": (r"J[uú]lio.*(?:C[eé]sar|dos Santos)", "empresarial"),
    "<NAME>": (r"L[aá]zaro.*Botelho", "política"),
    "<NAME>": (r"Roberto.*Britto", "política"),
    "<NAME>": (r"Lindberg.*Farias", "política"),
    "<NAME>": (r"Luc[eé]lio.*(?:Roberto|von Lechten|G[oó]es)", "empresarial"),
    "<NAME>": (r"Luis.*(?:Carlos|Heinze)", "política"),
    "<NAME>": (r"Luiz.*Arg[oô]lo", "política"),
    "<NAME>": (r"Luiz.*(?:Eduardo|de Oliveira e Silva)", "empresarial"),
    "<NAME>": (r"Luiz.*(?:Fernando|Faria)", "política"),
    "<NAME>": (r"Luiz.*(?:In[aá]cio|Lula|da Silva)", "política"),
    "<NAME>": (r"Luiz.*(?:Fernando|Pez[aã]o)", "política"),
    "<NAME>": (r"Marcelo.*(?:Bahia|Odebrecht)", "empresarial"),
    "<NAME>": (r"M[aá]rcio.*(?:Farias|da Silva)", "empresarial"),
    "<NAME>": (r"M[aá]rio.*Negromonte", "política"),
    "<NAME>": (r"M[aá]rio.*(?:Negromonte|J[uú]nior)", "política"),
    "<NAME>": (r"Michel.*Temer", "política"),
    "<NAME>": (r"Milton.*Pascowitch", "empresarial"),
    "<NAME>": (r"Mission[aá]rio.*(?:Jos[eé]|Ol[ií]mpio)", "política"),
    "<NAME>": (r"Nelson.*Meurer", "política"),
    "<NAME>": (r"Olavo.*(?:Horneaux|de Moura|Filho)", "política"),
    "<NAME>": (r"Ot[aá]vio.*(?:Marques|de Azevedo)", "empresarial"),
    "<NAME>": (r"Othon.*(?:Zanoide|de Moraes|Filho)", "empresarial"),
    "<NAME>": (r"Otto.*Garrido", "empresarial"),
    "<NAME>": (r"Paulo.*Bernardo", "política"),
    "<NAME>": (r"Paulo.*(?:S[eé]rgio|Boghossian)", "empresarial"),
    "<NAME>": (r"Pedro.*Corr[eê]a", "política"),
    "<NAME>": (r"Pedro.*(?:Barusco|Filho)", "empresarial"),
    "<NAME>": (r"Pedro.*Henry", "política"),
    "<NAME>": (r"Renan.*Calheiros", "política"),
    "<NAME>": (r"Renato.*Molling", "política"),
    "<NAME>": (r"Renato.*(?:de Souza|Duque)", "empresarial"),
    "<NAME>": (r"Ricardo.*(?:Ribeiro|Pessoa)", "empresarial"),
    "<NAME>": (r"Roberto.*Balestra", "política"),
    "<NAME>": (r"Roberto.*Marques", "política"),
    "<NAME>": (r"Roberto.*Teixeira", "política"),
    "<NAME>": (r"Rog[eé]rio.*(?:Cunha|de Oliveira)", "empresarial"),
    "<NAME>": (r"Rog[eé]rio.*(?:Santos|de Araújo)", "empresarial"),
    "<NAME>": (r"Romero.*Juc[aá]", "política"),
    "<NAME>": (r"Roseana.*Sarney", "política"),
    "<NAME>": (r"Sandes.*J[uú]nior", "política"),
    "<NAME>": (r"S[eé]rgio.*(?:Cunha|Mendes)", "empresarial"),
    "<NAME>": (r"Sim[aã]o.*Sessim", "política"),
    "<NAME>": (r"Valdir.*(?:Lima|Carreiro)", "política"),
    "<NAME>": (r"Valdir.*Raupp", "política"),
    "<NAME>": (r"Vander.*Loubet", "política"),
    "<NAME>": (r"Vilson.*Covatti", "política"),
    "<NAME>": (r"Waldir.*Maranh[aã]o", "política"),
    "<NAME>": (r"Walmir.*(?:Pinheiro|Santana)", "empresarial"),
    "<NAME>": (r"Jorge.*(?:Luiz|Zelada)", "empresarial"),
    "<NAME>": (r"Hamylton.*(?:Pinheiro|Padilha)", "empresarial"),
    "<NAME>": (r"Raul.*(?:Schmidt|Felippe|Junior)", "empresarial"),
    "<NAME>": (r"Jo[aã]o.*(?:Augusto|Rezende|Henriques)", "empresarial"),
    "<NAME> (Nobu Su)": (r"(?:Hsin.*(?:Chi|Su)|Nobu.*Su)", "empresarial"),
    "<NAME>": (r"Othon.*(?:Pinheiro|da Silva)", "empresarial"),
    "<NAME>": (r"Ana.*(?:da Silva|Toniolo)", "empresarial"),
    "<NAME>": (r"Rog[eé]rio.*Nora", "empresarial"),
    "<NAME>": (r"Cl[oó]vis.*Renato", "empresarial"),
    "<NAME>": (r"Olavinho.*(?:Ferreira|Mendes)", "empresarial"),
    "<NAME>": (r"Jos[eé].*(?:Antunes|Sobrinho)", "empresarial"),
    "<NAME>": (r"Carlos.*(?:Strauch|Albero)", "empresarial"),
    "<NAME>": (r"Enivaldo.*Quadrado", "empresarial"),
    "<NAME>": (r"Luiz.*Pereira", "empresarial"),
    "<NAME>": (r"Newton.*(?:Prado|J[uú]nior)", "empresarial"),
    "<NAME>": (r"Paulo.*(?:Roberto|Costa)", "empresarial"),
    "<NAME>": (r"Waldomiro.*de Oliveira", "empresarial"),
    "<NAME>": (r"Alberto.*Youssef", "empresarial"),
    "<NAME>": (r"Nestor.*Cerver[oó]", "empresarial"),
    "<NAME>": (r"Carlos.*(?:Pereira|da Costa)", "empresarial"),
    "<NAME>": (r"Carlos.*(?:Habib|Chater)", "empresarial"),
    "<NAME>": (r"Cleverson.*(?:Coelho|de Oliveira)", "empresarial"),
    "<NAME>": (r"Ediel.*(?:Viana|da Silva)", "empresarial"),
    "<NAME>": (r"Eduardo.*(?:Hermelino|Leite)", "empresarial"),
    "<NAME>": (r"Esdra.*(?:de Arantes|Ferreira)", "empresarial"),
    "<NAME>": (r"Faiçal.*(?:Mohamed|Nacirdine)", "empresarial"),
    "<NAME>' <NAME>": (r"Fernando.*(?:Falc[aã]o|Soares)", "empresarial"),
    "<NAME>": (r"Fernando.*(?:Stremel|Andrade)", "empresarial"),
    "<NAME>": (r"Iara.*(?:Galdino|da Silva)", "empresarial"),
    "<NAME>": (r"Jayme.*(?:Alves|de Oliveira|Filho)", "empresarial"),
    "<NAME>": (r"Jo[aã]o.*(?:Ricardo|Auler)", "empresarial"),
    "<NAME>": (r"Jos[eé].*(?:Aldem[aá]rio|Pinheiro|Filho)", "empresarial"),
    "<NAME>": (r"Jos[eé].*(?:Nogueira|Breghirolli)", "empresarial"),
    "<NAME>": (r"Juliana.*(?:Cordeiro|de Moura)", "empresarial"),
    "<NAME>": (r"Julio.*(?:Gerin|de Almeida|Camargo)", "empresarial"),
    "<NAME>": (r"Leonardo.*Meirelles", "empresarial"),
    "<NAME>": (r"Luccas.*(?:Pace|J[uú]nior)", "empresarial"),
    "<NAME>": (r"M[aá]rcia.*(?:Danzi|Russo|Corr[eê]a|de Oliveira)", "empresarial"),
    "<NAME>": (r"Marcio.*(?:Andrade|Bonilho)", "empresarial"),
    "<NAME>": (r"Maria.*(?:Dirce|Penasso)", "empresarial"),
    "<NAME>": (r"M[aá]rio.*de Oliveira", "empresarial"),
    "<NAME>": (r"Matheus.*(?:Coutinho|de S[aá]|Oliveira)", "empresarial"),
    "<NAME>": (r"Nelma.*(?:Mitsue|Penasso|Kodama)", "empresarial"),
    "<NAME>": (r"Pedro.*(?:Argese|Junior)", "empresarial"),
    "<NAME>": (r"Rafael.*(?:[AÂ]ngulo|Lopez)", "empresarial"),
    "<NAME>": (r"Ren[eê].*(?:Luiz|Pereira)", "empresarial"),
    "<NAME>": (r"Rinaldo.*(?:Gon[cç]alves|de Carvalho)", "empresarial"),
    "<NAME>": (r"Augusto.*(?:Ribeiro|de Mendon[cç]a|Neto)", "empresarial"),
    "<NAME>": (r"Dario.*(?:Teixeira|Alves|J[uú]nior)", "empresarial"),
    "<NAME>": (r"Mario.*(?:Frederico|Mendon[cç]a|G[oó]es)", "empresarial"),
    "<NAME>": (r"S[oô]nia.*(?:Mariza|Branco)", "empresarial"),
    "<NAME>": (r"Leon.*(?:Denis|Vargas|Il[aá]rio)", "empresarial"),
    "<NAME>": (r"Ricardo.*Hoffmann", "empresarial"),
    "<NAME>": (r"Murilo.*(?:Tena|Barros)", "empresarial"),
    "<NAME>": (r"S[eé]rgio.*Cabral", "política")
}

baseScore = 0.0005

#Função que remove acentos de textos
def strip_accents(s):
   return ''.join(c for c in unicodedata.normalize('NFD', s)
                  if unicodedata.category(c) != 'Mn')

def main():
    url = input("Por favor digite a url para o website: ")

    pageContent = ""
    try:
        print("Recuperando o arquivo html, por favor aguarde...")

        #urllib: usada para recuperar a página web para a url dada
        req = urllib.request.Request(url)
        resp = urllib.request.urlopen(req)
        pageContent = str(resp.read().decode('utf-8').strip())
    except (urllib.error.URLError, urllib.error.HTTPError):
        print("Error with given URL, quitting...")
        return

    print("Analisando html")

    #BeautifulSoup: usada para parsear o arquivo web e retornar os conteúdos do mesmo em formato texto
    soup = BeautifulSoup(pageContent, 'html.parser')
    print("Recuperando conteúdo dentro do html\n")
    pageText = soup.get_text()
    pageTextCharacterCount = len(pageText)

    #re: usada para diversas validações usando expressões regulares, dentre elas, dividir o conteúdo da página em uma lista de palavras em letra minúscula e sem acento
    allPageWords = re.findall(r"[\w']+", pageText)
    allPageWordsInLowerCase = [strip_accents(x.lower()) for x in allPageWords]
    
    score = 0
    for keyword in keywordScoreList.keys():
        occurrences = allPageWordsInLowerCase.count(strip_accents(keyword.lower()))
        if occurrences > 0:
            score += (keywordScoreList[keyword] * occurrences)

    normalizedScore = score / pageTextCharacterCount
    if normalizedScore > baseScore:
        print("Status: url válida - o website dado possui assunto 'Lava Jato'!")
        print("Procurar-se-á agora pelas pessoas envolvidas mencionadas:")

        #Regex usada para tentar encontrar nomes completos
        allPossibleBRFullnames = re.findall(r"[A-ZÀÁÂĖÈÉÊÌÍÒÓÔÕÙÚÛÇ][a-zàáâãèéêìíóôõùúç]+(?:[ ](?:das?|dos?|de|da|do|e|[A-Z][a-zàáâãèéêìíóôõùúç]+(?:'[A-ZÀÁÂĖÈÉÊÌÍÒÓÔÕÙÚÛÇ]?[a-zàáâãèéêìíóôõùúç]+)?))+", pageText)
        for mainName in mainNamesRegexAreaList.keys():
            for fullname in allPossibleBRFullnames:
                reExp, area = mainNamesRegexAreaList[mainName]
                matches = re.findall(reExp, fullname)
                if len(matches) > 0:
                    print("- " + mainName + " - nome encontrado na página. Sua área é: " + area)
                    break
    else:
        print("Status: url inválida - o website dado não possui assunto 'Lava Jato'")

    return 

if __name__ == "__main__":
	main()
import urllib.request
import re
import unicodedata
import sys
import string
import nltk
from bs4 import BeautifulSoup

#Lista de palavras-chave da operação 'Lava Jato', cada uma contendo uma pontuação baseada na especificidade da palavra com o assunto eem questão (a palavras mais genéricas é atribuída uma nota menor)
keywordScoreList = {
    "operação": 3, "operações": 2,
    "empreiteira": 2, "empreiteiras": 2, "empreiteiro": 2, "empreiteiros": 2,
    "petrobrás": 4, "petróleo": 3,
    "investigação": 1, "investigações": 1, "investigar": 1,
    "réu": 1, "réus": 1,
    "cartel": 5, "cartéis": 5,
    "doleiro": 2, "doleiros": 2,
    "corrupção": 5, "corrupções": 5,
    "licitação": 2, "licitações": 2,
    "crime": 1, "crimes": 1, "criminal": 1, "criminoso": 1, "criminosos": 1, "criminosa": 1, "criminosas": 1,
    "condenar": 2, "condenou": 2, "condenaram": 2, "condenado": 2, "condenados": 2, "condenada": 2, "condenadas": 2,
    "julgar": 2, "julgado": 2, "julgados": 2, "julgada": 2, "julgadas": 2,
    "prisão": 2, "prisões": 2,
    "propina": 3, "propinas": 3,
    "desvio": 2, "desvios": 2, "desviar": 2, "desvia": 2, "desviam": 2, "desviava": 2, "desviavam": 2,
    "intermediar": 1, "intermediário": 1, "intermediários": 1,
    "tribunal": 2, "tribunais": 2,
    "lavagem": 2, "lavagens": 2,
    "ilegal": 2, "ilegais": 2,
    "delegacia": 2, "delegacias": 2,
    "intimação": 2, "intimações": 2,
    "acusado": 2, "acusados": 2, "acusada": 2, "acusadas": 2, "acusação": 2, "acusações": 2,
    "delação": 3, "delações": 3, "delatado": 3, "delatados": 3, "delatada": 3, "delatadas": 3,
    "leniência": 3, "leniências": 3,
    "jurídico": 2, "jurídicos": 2, "juiz": 2,
    "executivo": 2, "executivos": 2,
    "legislativo": 2, "legislação": 2,
    "político": 2, "políticos": 2, "política": 2, "políticas": 2,
    "fiscal": 2, "fiscais": 2,
    "usufrutuário": 5, "usufrutuários": 5,
    "repatriado": 4, "repatriados": 4, "repatriação": 4,
    "deflagrado": 3, "deflagrados": 3, "deflagrada": 3, "deflagradas": 3,
    "catilinária": 5, "catilinárias": 5,
    "peculato": 5, "peculatos": 5,
    "fraudar": 3, "fraudatório": 3, "fraudatória": 3, "fraude": 3, "fraudes": 3,
    "foro": 3,
    "stf": 3, "tribunal": 3, "tribunais": 3
}

#Lista de nomes envolvidos na Lava Jato, retirada de https://pt.wikipedia.org/wiki/Lista_de_pessoas_envolvidas_na_Opera%C3%A7%C3%A3o_Lava_Jato
mainNamesRegexAreaList = {
    "<NAME>": (r"Adir.*Assad", "empresarial"),
    "<NAME>": (r"A[eé]cio.*Neves", "política"),
    "<NAME>": (r"Afonso.*Hamm", "política"),
    "<NAME>": (r"Agenor.*(?:Franklin|Magalh[aã]es|Medeiros)", "empresarial"),
    "<NAME>": (r"Aguinaldo.*Ribeiro", "política"),
    "<NAME>": (r"Alexandre.*(?:Portela|Barbosa)", "judicial"),
    "<NAME>": (r"Alberto.*(?:El[ií]sio|Vila[cç]a|Gomes)", "empresarial"),
    "<NAME>": (r"Aldemir.*Bendine", "política"),
    "<NAME>": (r"Alexandrino.*(?:de Salles|Ramos|de Alencar)", "empresarial"),
    "<NAME>": (r"Aline.*Corr[eê]a", "política"),
    "<NAME>": (r"Andr[eé].*(?:Cat[aã]o|de Miranda)", "empresarial"),
    "<NAME>": (r"Andr[eé].*Vargas", "política"),
    "<NAME>": (r"Angelo.*(?:Alves|Mendes)", "empresarial"),
    "<NAME>": (r"[AÂ]ngela.*(?:Palmeira|Ferreira)", "política"),
    "<NAME>": (r"An[ií]bal.*Gomes", "política"),
    "<NAME>": (r"Antonio.*(?:Almeida|da Silva)", "empresarial"),
    "<NAME>": (r"Antonio.*Anastasia", "política"),
    "<NAME>": (r"Antonio.*(?:Carlos|Pieruccini)", "judicial"),
    "<NAME>": (r"Ant[oô]nio.*(?:Campello|de Souza|Dias)", "empresarial"),
    "<NAME>": (r"Armando.*(?:Furlan|J[uú]nior)", "empresarial"),
    "<NAME>": (r"Antonio.*Palocci", "política"),
    "<NAME>": (r"Arthur.*Lira", "política"),
    "<NAME>": (r"Benedito.*de Lira", "política"),
    "<NAME>": (r"Carlos.*(?:Magno|Ramos)", "política"),
    "<NAME>": (r"C[aâ]ndido.*Vaccarezza", "política"),
    "<NAME>": (r"Cesar.*(?:Ramos|Rocha)", "empresarial"),
    "<NAME>": (r"Ciro.*Nogueira", "política"),
    "<NAME>": (r"Cristiano.*Kok", "empresarial"),
    "<NAME>": (r"Dalton.*(?:dos Santos|Avancini)", "empresarial"),
    "<NAME> e <NAME>": (r"Daniela.*(?:Leopoldo e Silva|Facchini)", "empresarial"),
    "<NAME>": (r"Dario.*(?:de Queiroz|Galv[aã]o)", "empresarial"),
    "<NAME>": (r"Delc[ií]dio.*do Amaral", "política"),
    "<NAME>": (r"Dilceu.*Sperafico", "política"),
    "<NAME>": (r"Dilma.*Rousseff", "política"),
    "<NAME>": (r"Edison.*Lob[aã]o", "política"),
    "<NAME>": (r"Ednaldo.*(?:Alves|da Silva)", "empresarial"),
    "<NAME>": (r"Eduardo.*Cunha", "política"),
    "<NAME>": (r"Eduardo.*da Fonte", "política"),
    "<NAME>": (r"Eduardo.*(?:de Oliveira|Freitas|Filho)", "empresarial"),
    "<NAME>": (r"Eduardo.*(?:Vaz|da Costa|Musa)", "empresarial"),
    "<NAME>": (r"Erton.*(?:Medeiros|Fonseca)", "empresarial"),
    "<NAME>": (r"Elton.*(?:Negr[aã]o|de Azevedo|J[uú]nior)", "empresarial"),
    "<NAME>": (r"Fl[aá]vio.*(?:Gomes|Machado|Filho)", "empresarial"),
    "<NAME> Pinheiro": (r"Fl[aá]vio.*(?:S[aá]|Motta|Pinheiro)", "empresarial"),
    "<NAME>": (r"Fernando.*(?:Antonio|Guimar[aã]es|Horneaux|de Moura)", "política"),
    "<NAME>": (r"Fernando.*(?:Bezerra|Coelho)", "política"),
    "<NAME>": (r"Fernando.*(?:Collor|de Mello)", "política"),
    "<NAME>": (r"Fernando.*Pimentel", "política"),
    "<NAME>": (r"Fl[aá]vio.*(?:David|Barra)", "empresarial"),
    "<NAME>": (r"Gerson.*Almada", "empresarial"),
    "<NAME>": (r"Gladson.*Cameli", "política"),
    "<NAME>": (r"Gleisi.*Hoffmann", "política"),
    "<NAME>": (r"Guido.*Mantega", "política"),
    "<NAME>": (r"Humberto.*Costa", "política"),
    "<NAME>": (r"Ildefonso.*(?:Colares|Filho)", "empresarial"),
    "<NAME>": (r"Ivan.*(?:Vernon|Gomes|Torres|J[uú]nior)", "política"),
    "<NAME>": (r"Jaques.*Wagner", "política"),
    "<NAME>": (r"Jean.*(?:Alberto|Luscher|Castro)", "empresarial"),
    "<NAME>": (r"Jer[oô]nimo.*Goergen", "política"),
    "<NAME>": (r"Jo[aã]o.*Le[aã]o", "política"),
    "<NAME>": (r"Jo[aã]o.*(?:Alberto|Pizzolati)", "política"),
    "<NAME>": (r"Joesley.*Batista", "empresarial"),
    "<NAME>": (r"Jos[eé].*(?:Adolfo|Pascowitch)", "empresarial"),
    "<NAME>": (r"Jo[aã]o.*(?:Proc[oó]pio|de Almeida|Prado)", "empresarial"),
    "<NAME>": (r"Jos[eé].*(?:Antunes|Sobrinho)", "empresarial"),
    "<NAME>": (r"Jos[eé].*(?:Dirceu|de Oliveira e Silva)", "política"),
    "<NAME>": (r"Jos[eé].*(?:Humberto|Cruvinel|Resende)", "empresarial"),
    "<NAME>": (r"Jos[eé].*Linhares", "política"),
    "<NAME>": (r"Jos[eé].*Mentor", "política"),
    "<NAME>": (r"Jos[eé].*(?:Ot[aá]vio|Germano)", "política"),
    "<NAME>": (r"Jo[aã]o.*(?:Vaccari|Neto)", "política"),
    "<NAME>": (r"J[uú]lio.*(?:C[eé]sar|dos Santos)", "empresarial"),
    "<NAME>": (r"L[aá]zaro.*Botelho", "política"),
    "<NAME>": (r"Roberto.*Britto", "política"),
    "<NAME>": (r"Lindberg.*Farias", "política"),
    "<NAME>": (r"Luc[eé]lio.*(?:Roberto|von Lechten|G[oó]es)", "empresarial"),
    "<NAME>": (r"Luis.*(?:Carlos|Heinze)", "política"),
    "<NAME>": (r"Luiz.*Arg[oô]lo", "política"),
    "<NAME>": (r"Luiz.*(?:Eduardo|de Oliveira e Silva)", "empresarial"),
    "<NAME>": (r"Luiz.*(?:Fernando|Faria)", "política"),
    "<NAME>": (r"Luiz.*(?:In[aá]cio|Lula|da Silva)", "política"),
    "<NAME>": (r"Luiz.*(?:Fernando|Pez[aã]o)", "política"),
    "<NAME>": (r"Marcelo.*(?:Bahia|Odebrecht)", "empresarial"),
    "<NAME>": (r"M[aá]rcio.*(?:Farias|da Silva)", "empresarial"),
    "<NAME>": (r"M[aá]rio.*Negromonte", "política"),
    "<NAME>": (r"M[aá]rio.*(?:Negromonte|J[uú]nior)", "política"),
    "<NAME>": (r"Michel.*Temer", "política"),
    "<NAME>": (r"Milton.*Pascowitch", "empresarial"),
    "<NAME>": (r"Mission[aá]rio.*(?:Jos[eé]|Ol[ií]mpio)", "política"),
    "<NAME>": (r"Nelson.*Meurer", "política"),
    "<NAME>": (r"Olavo.*(?:Horneaux|de Moura|Filho)", "política"),
    "<NAME>": (r"Ot[aá]vio.*(?:Marques|de Azevedo)", "empresarial"),
    "<NAME>": (r"Othon.*(?:Zanoide|de Moraes|Filho)", "empresarial"),
    "<NAME>": (r"Otto.*Garrido", "empresarial"),
    "<NAME>": (r"Paulo.*Bernardo", "política"),
    "<NAME>": (r"Paulo.*(?:S[eé]rgio|Boghossian)", "empresarial"),
    "<NAME>": (r"Pedro.*Corr[eê]a", "política"),
    "<NAME>": (r"Pedro.*(?:Barusco|Filho)", "empresarial"),
    "<NAME>": (r"Pedro.*Henry", "política"),
    "<NAME>": (r"Renan.*Calheiros", "política"),
    "<NAME>": (r"Renato.*Molling", "política"),
    "<NAME>": (r"Renato.*(?:de Souza|Duque)", "empresarial"),
    "<NAME>": (r"Ricardo.*(?:Ribeiro|Pessoa)", "empresarial"),
    "<NAME>": (r"Roberto.*Balestra", "política"),
    "<NAME>": (r"Roberto.*Marques", "política"),
    "<NAME>": (r"Roberto.*Teixeira", "política"),
    "<NAME>": (r"Rog[eé]rio.*(?:Cunha|de Oliveira)", "empresarial"),
    "<NAME>": (r"Rog[eé]rio.*(?:Santos|de Araújo)", "empresarial"),
    "<NAME>": (r"Romero.*Juc[aá]", "política"),
    "<NAME>": (r"Roseana.*Sarney", "política"),
    "<NAME>": (r"Sandes.*J[uú]nior", "política"),
    "<NAME>": (r"S[eé]rgio.*(?:Cunha|Mendes)", "empresarial"),
    "<NAME>": (r"Sim[aã]o.*Sessim", "política"),
    "<NAME>": (r"Valdir.*(?:Lima|Carreiro)", "política"),
    "<NAME>": (r"Valdir.*Raupp", "política"),
    "<NAME>": (r"Vander.*Loubet", "política"),
    "<NAME>": (r"Vilson.*Covatti", "política"),
    "<NAME>": (r"Waldir.*Maranh[aã]o", "política"),
    "<NAME>": (r"Walmir.*(?:Pinheiro|Santana)", "empresarial"),
    "<NAME>": (r"Jorge.*(?:Luiz|Zelada)", "empresarial"),
    "<NAME>": (r"Hamylton.*(?:Pinheiro|Padilha)", "empresarial"),
    "<NAME>": (r"Raul.*(?:Schmidt|Felippe|Junior)", "empresarial"),
    "<NAME>": (r"Jo[aã]o.*(?:Augusto|Rezende|Henriques)", "empresarial"),
    "<NAME> (Nobu Su)": (r"(?:Hsin.*(?:Chi|Su)|Nobu.*Su)", "empresarial"),
    "<NAME>": (r"Othon.*(?:Pinheiro|da Silva)", "empresarial"),
    "<NAME>": (r"Ana.*(?:da Silva|Toniolo)", "empresarial"),
    "<NAME>": (r"Rog[eé]rio.*Nora", "empresarial"),
    "<NAME>": (r"Cl[oó]vis.*Renato", "empresarial"),
    "<NAME>": (r"Olavinho.*(?:Ferreira|Mendes)", "empresarial"),
    "<NAME>": (r"Jos[eé].*(?:Antunes|Sobrinho)", "empresarial"),
    "<NAME>": (r"Carlos.*(?:Strauch|Albero)", "empresarial"),
    "<NAME>": (r"Enivaldo.*Quadrado", "empresarial"),
    "<NAME>": (r"Luiz.*Pereira", "empresarial"),
    "<NAME>": (r"Newton.*(?:Prado|J[uú]nior)", "empresarial"),
    "<NAME>": (r"Paulo.*(?:Roberto|Costa)", "empresarial"),
    "<NAME>": (r"Waldomiro.*de Oliveira", "empresarial"),
    "<NAME>": (r"Alberto.*Youssef", "empresarial"),
    "<NAME>": (r"Nestor.*Cerver[oó]", "empresarial"),
    "<NAME>": (r"Carlos.*(?:Pereira|da Costa)", "empresarial"),
    "<NAME>": (r"Carlos.*(?:Habib|Chater)", "empresarial"),
    "<NAME>": (r"Cleverson.*(?:Coelho|de Oliveira)", "empresarial"),
    "<NAME>": (r"Ediel.*(?:Viana|da Silva)", "empresarial"),
    "<NAME>": (r"Eduardo.*(?:Hermelino|Leite)", "empresarial"),
    "<NAME>": (r"Esdra.*(?:de Arantes|Ferreira)", "empresarial"),
    "<NAME>": (r"Faiçal.*(?:Mohamed|Nacirdine)", "empresarial"),
    "<NAME>' <NAME>": (r"Fernando.*(?:Falc[aã]o|Soares)", "empresarial"),
    "<NAME>": (r"Fernando.*(?:Stremel|Andrade)", "empresarial"),
    "<NAME>": (r"Iara.*(?:Galdino|da Silva)", "empresarial"),
    "<NAME>": (r"Jayme.*(?:Alves|de Oliveira|Filho)", "empresarial"),
    "<NAME>": (r"Jo[aã]o.*(?:Ricardo|Auler)", "empresarial"),
    "<NAME>": (r"Jos[eé].*(?:Aldem[aá]rio|Pinheiro|Filho)", "empresarial"),
    "<NAME>": (r"Jos[eé].*(?:Nogueira|Breghirolli)", "empresarial"),
    "<NAME>": (r"Juliana.*(?:Cordeiro|de Moura)", "empresarial"),
    "<NAME>": (r"Julio.*(?:Gerin|de Almeida|Camargo)", "empresarial"),
    "<NAME>": (r"Leonardo.*Meirelles", "empresarial"),
    "<NAME>": (r"Luccas.*(?:Pace|J[uú]nior)", "empresarial"),
    "<NAME>": (r"M[aá]rcia.*(?:Danzi|Russo|Corr[eê]a|de Oliveira)", "empresarial"),
    "<NAME>": (r"Marcio.*(?:Andrade|Bonilho)", "empresarial"),
    "<NAME>": (r"Maria.*(?:Dirce|Penasso)", "empresarial"),
    "<NAME>": (r"M[aá]rio.*de Oliveira", "empresarial"),
    "<NAME>": (r"Matheus.*(?:Coutinho|de S[aá]|Oliveira)", "empresarial"),
    "<NAME>": (r"Nelma.*(?:Mitsue|Penasso|Kodama)", "empresarial"),
    "<NAME>": (r"Pedro.*(?:Argese|Junior)", "empresarial"),
    "<NAME>": (r"Rafael.*(?:[AÂ]ngulo|Lopez)", "empresarial"),
    "<NAME>": (r"Ren[eê].*(?:Luiz|Pereira)", "empresarial"),
    "<NAME>": (r"Rinaldo.*(?:Gon[cç]alves|de Carvalho)", "empresarial"),
    "<NAME>": (r"Augusto.*(?:Ribeiro|de Mendon[cç]a|Neto)", "empresarial"),
    "<NAME>": (r"Dario.*(?:Teixeira|Alves|J[uú]nior)", "empresarial"),
    "<NAME>": (r"Mario.*(?:Frederico|Mendon[cç]a|G[oó]es)", "empresarial"),
    "<NAME>": (r"S[oô]nia.*(?:Mariza|Branco)", "empresarial"),
    "<NAME>": (r"Leon.*(?:Denis|Vargas|Il[aá]rio)", "empresarial"),
    "<NAME>": (r"Ricardo.*Hoffmann", "empresarial"),
    "<NAME>": (r"Murilo.*(?:Tena|Barros)", "empresarial"),
    "<NAME>": (r"S[eé]rgio.*Cabral", "política")
}

baseScore = 0.0005

#Função que remove acentos de textos
def strip_accents(s):
   return ''.join(c for c in unicodedata.normalize('NFD', s)
                  if unicodedata.category(c) != 'Mn')

def main():
    url = input("Por favor digite a url para o website: ")

    pageContent = ""
    try:
        print("Recuperando o arquivo html, por favor aguarde...")

        #urllib: usada para recuperar a página web para a url dada
        req = urllib.request.Request(url)
        resp = urllib.request.urlopen(req)
        pageContent = str(resp.read().decode('utf-8').strip())
    except (urllib.error.URLError, urllib.error.HTTPError):
        print("Error with given URL, quitting...")
        return

    print("Analisando html")

    #BeautifulSoup: usada para parsear o arquivo web e retornar os conteúdos do mesmo em formato texto
    soup = BeautifulSoup(pageContent, 'html.parser')
    print("Recuperando conteúdo dentro do html\n")
    pageText = soup.get_text()
    pageTextCharacterCount = len(pageText)

    #re: usada para diversas validações usando expressões regulares, dentre elas, dividir o conteúdo da página em uma lista de palavras em letra minúscula e sem acento
    allPageWords = re.findall(r"[\w']+", pageText)
    allPageWordsInLowerCase = [strip_accents(x.lower()) for x in allPageWords]
    
    score = 0
    for keyword in keywordScoreList.keys():
        occurrences = allPageWordsInLowerCase.count(strip_accents(keyword.lower()))
        if occurrences > 0:
            score += (keywordScoreList[keyword] * occurrences)

    normalizedScore = score / pageTextCharacterCount
    if normalizedScore > baseScore:
        print("Status: url válida - o website dado possui assunto 'Lava Jato'!")
        print("Procurar-se-á agora pelas pessoas envolvidas mencionadas:")

        #Regex usada para tentar encontrar nomes completos
        allPossibleBRFullnames = re.findall(r"[A-ZÀÁÂĖÈÉÊÌÍÒÓÔÕÙÚÛÇ][a-zàáâãèéêìíóôõùúç]+(?:[ ](?:das?|dos?|de|da|do|e|[A-Z][a-zàáâãèéêìíóôõùúç]+(?:'[A-ZÀÁÂĖÈÉÊÌÍÒÓÔÕÙÚÛÇ]?[a-zàáâãèéêìíóôõùúç]+)?))+", pageText)
        for mainName in mainNamesRegexAreaList.keys():
            for fullname in allPossibleBRFullnames:
                reExp, area = mainNamesRegexAreaList[mainName]
                matches = re.findall(reExp, fullname)
                if len(matches) > 0:
                    print("- " + mainName + " - nome encontrado na página. Sua área é: " + area)
                    break
    else:
        print("Status: url inválida - o website dado não possui assunto 'Lava Jato'")

    return 

if __name__ == "__main__":
	main()
#Lista de palavras-chave da operação 'Lava Jato', cada uma contendo uma pontuação baseada na especificidade da palavra com o assunto eem questão (a palavras mais genéricas é atribuída uma nota menor) #Lista de nomes envolvidos na Lava Jato, retirada de https://pt.wikipedia.org/wiki/Lista_de_pessoas_envolvidas_na_Opera%C3%A7%C3%A3o_Lava_Jato #Função que remove acentos de textos #urllib: usada para recuperar a página web para a url dada #BeautifulSoup: usada para parsear o arquivo web e retornar os conteúdos do mesmo em formato texto #re: usada para diversas validações usando expressões regulares, dentre elas, dividir o conteúdo da página em uma lista de palavras em letra minúscula e sem acento #Regex usada para tentar encontrar nomes completos