def is_sigla(texto):
    # Remove espaços extras (trim)
    texto = texto.strip()

    # Lista de exceções que não são siglas
    excecoes = {"voz", "arroz", "feroz", "abdomen", "chef", "jigsaw", "latex", "show", "complex", "calif", "subsequente", "1º", "1º","2º", "3º", "administracao", "internet", "patchwork", "flash", "web", "design", "egípcia", "art", "henna", "telemarketing", "webdesign", "webdesigner", "webdesigners", "webdesigns", "webdesigning", "webdesignings", "webmaster", "webmasters", "webmistress", "webmistresses", "marketing", "marketingueiro", "marketingueiros", "marketingueira", "marketingueiras", "marketingueirismo", "marketingueirismos", "marketingueirista", "marketingueiristas", "marketingueiristico", "marketingueiristicos", "marketingueiristica", "marketingueiristicas", "marketingueiristicamente", "marketingueiristicas", "marketeiro", "marketeiros", "marketeira", "marketeiras", "marketeirismo", "marketeirismos", "marketeirista", "marketeiristas", "marketeiristico", "marketeiristicos", "marketeiristica", "imagens", "empreendedorismo", "excelência", "excelente", "excelentes", "excelentíssimo", "excelentíssimos", "excelentíssima", "inbound", "outbound", "inboundmarketing", "outboundmarketing", "inboundmarketingueiro", "outboundmarketingueiro", "inboundmarketingueiros", "outboundmarketingueiros", "inboundmarketingueira", "outboundmarketingueira", "inboundmarketingueiras", "outboundmarketingueiras", "inboundmarketingueirismo", "outboundmarketingueirismo", "inboundmarketingueirismos", "outboundmarketingueirismos", "inboundmarketingueirista", "outboundmarketingueirista", "inboundmarketingueiristas", "outboundmarketingueiristas", "inboundmarketingueiristico", "outboundmarketingueiristico", "inboundmarketingueiristicos", "outboundmarketingueiristicos", "inboundmarketingueiristica", "outboundmarketingueiristica", "inboundmarketingueiristicas", "outboundmarketingueiristicas", "inboundmarketingueiristicamente", "outboundmarketingueiristicamente", "inboundmarketingueiristicas", "outboundmarketingueiristicas", "inboundmarketingueiristicamente", "outboundmarketingueiristicamente", "inboundmarketingueiristicas", "outboundmarketingueiristicas", "inboundmarketingueiristicamente", "outboundmarketingueiristicamente", "inboundmarketingueiristicas", "outboundmarketingueiristicas", "inboundmarketingueiristicamente", "outboundmarketingueiristicamente", "inboundmarketingueiristicas", "outboundmarketingueiristicas", "inboundmarketingueiristicamente", "outboundmarketingueiristicamente", "inboundmarketingueiristicas", "outboundmarketingueiristicas", "inboundmarketingueiristicamente", "outboundmarketingueiristicamente", "inboundmarketingueiristicas", "outboundmarketingueiristicas", "inboundmarketingueiristicamente", "outboundmarketingueiristicamente", "inboundmarketingueiristicas", "outboundmarketingueiristicas", "inboundmarketingueiristicamente", "outboundmarketingueiristicamente", "inboundmarketingueiristicas", "outboundmarketingueiristicas", "inboundmarketingueira", "outbound", "empreendedor", "endomarketing", "designer", "podcast", "imprensa", "branded", "content", "disc", "jóquei",  "posts", "construção", "webdesigner", "webgames", "produção", "embalagens", "complementares", "complementar", "instrumentais", "inclusão", "linguagens", "expressão", "expressões", "expressivo", "expressivos", "expressiva", "expressivas", "expressividade", "expressividades", "expressivamente", "expressivamente", "recepcionista", "recepção", "divulgação", "churrasco", "churrasqueiro", "churrasqueira", "churrascaria", "sommelier", "sommeliers", "sommeliere", "sommelieres", "sommelierismo", "sommelierismos", "sommelierista", "sommelieristas", "pop", "sushis", "sashimis", "sashimi", "sushi", "sushiman", "diet", "pizza", "pizzaiolo", "light", "latte", "gourmet", "salgadeiro", "pizzas", "salgadas", "salgado", "salgados", "salgadeira", "salgadeiras", "salgadeirismo", "salgadeirismos", "salgadeirista", "salgadeiristas", "salgadeiristico", "salgadeiristicos", "salgadeiristica", "legislação", "legislar", "recepcionista", "almoxarife", "almoxarifado", "cálculo", "recepção", "recepções", "recepcionista", "recepcionistas", "recepcionar", "recepcionado", "recepcionados", "recepcionada", "recepcionadas", "recepcionamento", "recepcionamentos", "recepcionante", "recepcionantes", "coaching", "coach", "substituição", "substituto", "empresas", "management", "pneumaticos", "pneu", "pneus", "architecture", "esquadrias", "esquadria", "soldador", "solda", "soldagem", "soldadores", "soldas", "soldagens", "soldado", "soldados", "soldada", "soldadas", "soldadura", "soldaduras", "takashi", "online", "offline" , "collier", "injetoras", "injeção", "injetora", "injetor", "injetores", "injetado", "injetados", "injetada", "injetadas", "injetamento", "injetamentos", "injetante", "injetantes", "injetar", "injetado", "injetados", "injetada", "injetadas", "injetar", "injetaram", "confeccionador", "confeccionadora", "confeccionadoras", "confeccionadores", "confeccionado", "confeccionados", "confeccionada", "confeccionadas", "confeccionamento", "confeccionamentos", "confeccionante", "confeccionantes", "confeccionar", "confeccionaram", "confecciona", "confeccionam", "confeccionou", "confeccionou", "instrumentacao", "instrumentação", "injecao", "trans" , "split", "wall", "alpha", "tancredo", "pneumatica", "pneumática", "blockchain", "prof", "stenio", "muller", "oderich", "elisabetha", "elisabeth", "bins", "tannhauser","bartholomay", "drenagem", "drenagens", "arquitetonico", "arquitetônico", "arquiteto", "arquiteta", "schuler", "borghetti", "sartori", "charqueadas", "charqueada", "alberto", "albert", "alberta", "alberto", "albertina", "luderitz", "volkmar", "caravaggio", "cisilotto", "gilberto", "hidropneumaticos", "hidropneumatico", "hidro", "extrusora", "extrusor", "tarquinio", "jovens", "bachman", "bachmann", "bachmann", "bachman", "bachmann", "bachmann", "bachman", "bachmann", "thomazoni", "thomas", "thomaz", "thomazio", "arquitetura", "david", "drywall", "pref", "balneario", "henriquetta", "eric", "deoracki", "village", "kardec", "supplay", "athayde", "excell", "themistocles", "santos", "santo", "santa", "santos", "santana", "enxoval", "ecommerce", "joinville", "xanxere", "bohomoletz", "theobaldo"}

    # Define padrões comuns de encontros consonantais
    encontros_consonantais_comuns = {
        "bl", "br", "cl", "cr", "dr", "fl", "fr", "gl", "gr", "gn",
        "pl", "pr", "tr", "vl", "ch", "lh", "nh", "ss", "rr", "gu", "qu", "rs", "ns", "ps", "ts", "st", "ct", "lt", "nc", "sc", "sm", "sp", "st", "pt", "ct", "rt", "lt", "mp", "mb", "nd", "ng", "nk", "nt", "nv", "mn", "cn", "lv", "rn", "rl", "rd", "rf", "rp", "rv", "rg", "rk", "rm", "rs", "rt", "rc", "rb", "rz", "rç", "rj", "nf", "dm", "dv", "dz", "dl", "dm", "db", "dc", "dd", "df", "dg", "dk", "dl", "dm", "dn", "dp", "dr", "ds", "dt", "dv", "dw", "dx", "dz", "cc", "lg", "lm", "lc", "sq", "xp", "ld", "nq", "ls", "xt", "sb", "lb", "vr", "nz", "rq", "ln", "lf", "nj"
    }

    # Encontros consonantais comuns de três letras
    trigramas_comuns = {
        "str", "scr", "spr", "spl", "sfr", "ntr", "ctr", "mbr", "ndr", "ltr", "ngl", "mpr", "ncl", "ntr", "nfl", "nfr", "nch", "nst", "nsp", "nsc", "nsp", "nsm", "xtr", "xpl", "xpr", "xcl", "xcr", "xtr", "nsf"
    }

    # Encontros consonantais comuns de quatro letras
    tetragramas_comuns = {
        "trans", "extr", "entr", "subt", "desp", "circ", "pros", "nstr"
    }

    # Definição de consoantes e vogais
    consoantes = "bcdfghjklmnpqrstvwxyz"
    vogais = "aeiou"
    


    if len(texto) == 1 and not texto.isalnum():
        return False  # Apenas um símbolo, não é sigla

    if texto.isdigit():
        return False  # Apenas números, não é sigla

#    if re.fullmatch(r"[A-Z]{2,3}", texto):
#        return True


    # Remove acentos e normaliza para minúsculas
    texto_normalizado = ''.join(
        c for c in unicodedata.normalize('NFD', texto.lower()) if unicodedata.category(c) != 'Mn'
    )

    # Se a palavra estiver na lista de exceções, **não é sigla**
    if texto_normalizado in excecoes:
        return False
    if any(c.isdigit() for c in texto) and any(c.isalpha() for c in texto):
        return True  # Contém números e letras, é sigla

    if texto_normalizado in encontros_consonantais_comuns:
        return True
    if texto_normalizado in trigramas_comuns:
        return True
    if texto_normalizado in tetragramas_comuns:
        return True

    # Conta número total de vogais e consoantes
    num_vogais = sum(1 for c in texto_normalizado if c in vogais)
    num_consoantes = sum(1 for c in texto_normalizado if c in consoantes)

    # Se a string tiver menos de 8 caracteres, **é candidata** a sigla, mas precisa de mais verificações

    if len(texto_normalizado) > 8 and num_vogais < 3:
        return True

    if num_vogais == 0:
        return True

    # Se tiver mais de 5 consoantes seguidas → É sigla
    if re.search(r"[" + consoantes + "]{6,}", texto_normalizado):
        return True

    # Se tiver 4 consoantes seguidas e menos de 2 vogais → É sigla
    if re.search(r"[" + consoantes + "]{4}", texto_normalizado) and num_vogais < 1:
        return True

    # Verifica 4, 3 ou 2 consoantes seguidas fora dos encontros comuns → É sigla
    for match in re.finditer(r"[" + consoantes + "]{2,4}", texto_normalizado):
        grupo = match.group()
        if grupo not in encontros_consonantais_comuns and grupo not in trigramas_comuns and grupo not in tetragramas_comuns:
            return True

    # Se terminar com uma consoante improvável → É sigla
    consoantes_finais_improvaveis = "bcdfgjkpqtvw"  # Removemos algumas que ocorrem naturalmente (como "l", "s", "n")
    if texto_normalizado[-1] in consoantes_finais_improvaveis:
        return True

    # Se terminar com duas consoantes seguidas → É sigla
    if len(texto_normalizado) > 1 and texto_normalizado[-1] in consoantes and texto_normalizado[-2] in consoantes:
        return True

    # Se houver sequência de vogais improváveis (cinco ou mais seguidas) → É sigla
    if re.search(r"[aeiou]{5,}", texto_normalizado):
        return True

    # Se houver sílabas não pronunciáveis (Ex: "rtm", "tm", "mt")  É sigla
    padroes_silabas_impronunciaveis = {"tm", "rt", "mt", "pt", "ct", "mn", "sr", "sm", "ts", "sp", "cp", "ps", "st", "rs", "ns", "ls", "lt", "rt", "rd", "rc", "rp", "rv", "rg", "rk", "rm", "rn", "rl", "rf", "rz", "rç", "rj", "nf", "dm", "dv", "dz", "dl", "dm", "db", "dc", "dd", "df", "dg", "dk", "dl", "dm", "dn", "dp", "dr", "ds", "dt", "dv", "dw", "dx", "dz", "cc"}
#    for padrao in padroes_silabas_impronunciaveis:
#        if padrao in texto_normalizado:
#            return True


    
    # Se começar com duas consoantes improváveis → É sigla
    if len(texto_normalizado) > 1 and texto_normalizado[:2] in padroes_silabas_impronunciaveis:
        return True
    # se tiver menos do que 4 caracteres e começar com uma consoante improvável 
    if len(texto_normalizado) < 4 and texto_normalizado[:2] in padroes_silabas_impronunciaveis:
        return True

    # Se a palavra é **candidata a sigla** (menor que 8 caracteres) e passou em pelo menos um critério → É sigla
    return False
