1
resposta

[Dúvida] Encontrando palavras em uma string que começa com letra informada pelo usuário - Acentuação

import os
import re

'''programa que solicita um texto e uma letra inicial e retorna todas as palavras do texto que começam com essa letra'''

os.system('cls')

titulo = str(input('Digite o título do livro:\n'))
letra = str(input('\nDigite a letra inicial para pesquisa:\n'))

padrao = rf'\b{letra}[a-zà-ÿ]*'

for palavra in re.findall(padrao, titulo, re.IGNORECASE):
    print(f'{palavra}\n')

Caso o título do livro informado seja: 'Águias aladas voando alto pelo céu'
e caso a letra inicial para a pesquisa seja 'A'

Vamos ter como resultado:
aladas
alto

A palavra Águias não é identificada porque Á != A

Existe uma maneira de incluir resultados acentuados que não seja pela avaliação de equivalentes? (como por exemplo):

equivalencia = {
    'a': 'aáàâãä',
    'e': 'eéèêë',
    'i': 'iíìîï',
    'o': 'oóòôõö',
    'u': 'uúùûü',
}
1 resposta

Oi, Bruno! Como vai?

Achei bem interessante como você utilizou regex com re.IGNORECASE e o intervalo [a-zà-ÿ] para tentar cobrir acentuação. O comportamento que você encontrou faz sentido, porque o Python considera Á e A como caracteres diferentes, mesmo com IGNORECASE, já que isso não remove acentos, apenas ignora maiúsculas e minúsculas.

Uma dica interessante para o futuro é usar normalização de texto com unicodedata, removendo acentos antes da comparação. Veja este exemplo:


import unicodedata
import re

def remover_acentos(texto):
    return ''.join(
        c for c in unicodedata.normalize('NFD', texto)
        if unicodedata.category(c) != 'Mn'
    )

titulo = input('Digite o titulo:\n')
letra = input('Digite a letra:\n')

titulo_normalizado = remover_acentos(titulo.lower())
letra_normalizada = remover_acentos(letra.lower())

padrao = rf'\b{letra_normalizada}[a-z]*'

for palavra in re.findall(padrao, titulo_normalizado):
    print(palavra)

Esse código remove acentos do texto e da letra digitada, permitindo que a encontre palavras com á, à ou â.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!