como remover acentuação de uma lista

2,609 views
Skip to first unread message

fabio

unread,
Oct 17, 2012, 3:01:58 PM10/17/12
to python...@googlegroups.com
Olá galera

Alguém sabe como removo a acentuação de uma lista?


Fábio Cerqueira

unread,
Oct 17, 2012, 3:11:31 PM10/17/12
to python...@googlegroups.com
Fábio,
você pode por um exemplo para ficar mais claro sua dúvida?

2012/10/17 fabio <opin...@gmail.com>:
> Olá galera
>
> Alguém sabe como removo a acentuação de uma lista?
>
>
> --
> ------------------------------------
> Grupo Python-Brasil
> http://www.python.org.br/wiki/AntesDePerguntar
>
> <*> Para visitar o site do grupo na web, acesse:
> http://groups.google.com/group/python-brasil
>
> <*> Para sair deste grupo, envie um e-mail para:
> python-brasi...@googlegroups.com



--
Fábio Cerqueira

Lario dos Santos Diniz

unread,
Oct 17, 2012, 3:23:18 PM10/17/12
to python...@googlegroups.com
Dei uma pesquisada rápida no Google e achei isso, talvez te ajude de alguma forma:
http://www.python.org.br/wiki/RemovedorDeAcentos
http://www.python.org.br/wiki/TiradorDeAcentos

Lário dos Santos Diniz

Antes de imprimir pense em seu

Consultorias e Inovações



Administrador PDMS, Programador, Desenhista projetista                                 www.softwarecurriculo.com.br/LarioDiniz

compromisso com o Meio Ambiente

+21 820717-49                                         




Email: lario...@gmail.com







Anderson Unsonst

unread,
Oct 17, 2012, 3:25:23 PM10/17/12
to python...@googlegroups.com
eu tentaria :

for valor in lista:
alguma função que retirasse acentos aqui(valor)

me parece que normalize faz isso
http://docs.python.org/library/unicodedata.html#unicodedata.normalize
procure no google por python acentos ou python string accent

fabio

unread,
Oct 17, 2012, 3:28:40 PM10/17/12
to python...@googlegroups.com
Preciso pegar uma frase, jogar numa lista, remover todos os acentos e as palavras que possuem menos de 3 letras. E daí 
criar outra lista com as palavras sem os acentos e caracteres especiais e sem as palavras com menos de 3 letras. Ex:

lista = 'faça sempre uma boa ação'
resultado = ['faca', 'sempre', 'acao']

Elias Barrionovo

unread,
Oct 17, 2012, 3:29:43 PM10/17/12
to python...@googlegroups.com
2012/10/17 fabio <opin...@gmail.com>:
> Olá galera
>
> Alguém sabe como removo a acentuação de uma lista?

Lista de (unicode) strings?

Você pode remover acentuação de uma (unicode) string usando o módulo
unicodedata:
acentos = u'olá cão ação über'
print unicodedata.normalize('NFKD', acentos).encode('ascii', 'ignore')


--
NI!

Anderson Unsonst

unread,
Oct 17, 2012, 3:31:41 PM10/17/12
to python...@googlegroups.com
ahh cara não é difícil, aliais é bem fácil e o maior prazer desses
desafios é justamente encontrar a solução, tenta fazer um script e
posta aonde você não está conseguindo fazer.

Fábio Cerqueira

unread,
Oct 17, 2012, 3:32:55 PM10/17/12
to python...@googlegroups.com
Fábio,
http://pastebin.com/Qi8iV0V5 talvez isso seja o que vc queira, se n
entender alguma parte do código pergunta na lista :D

Vinicius Assef

unread,
Oct 17, 2012, 3:37:16 PM10/17/12
to python...@googlegroups.com
Procurando no Google por "removedor de acentos python" (sem as aspas,
naturalmente), o primeiro resultado é justamente o site da Python
Brasil [1].

[1] http://www.python.org.br/wiki/RemovedorDeAcentos



2012/10/17 fabio <opin...@gmail.com>:

fabio

unread,
Oct 17, 2012, 6:20:42 PM10/17/12
to python...@googlegroups.com
Olhei vários exemplos sim, mas como já disse sou iniciante em Python, fiz um curso online, mas somente o basicão,
não vi nada de unicode nem do normalize.

Tentei o exemplo da página do Python:

from unicodedata import normalize
def remover_acentos(txt, codif='utf-8'):
    return normalize('NFKD', txt.decode(codif)).encode('ASCII','ignore')    
if __name__ == '__main__':
    from doctest import testmod
    testmod()
    remover_acentos(' áàãâä! éèêë? íì&#297;îï, óòõôö; úù&#361;ûü.')

Mas dá p seguinte erro:

Traceback (most recent call last):
  File "/home/fabio/workspace/teste2/lista.py", line 7, in <module>
    remover_acentos(' áàãâä! éèêë? íì&#297;îï, óòõôö; úù&#361;ûü.')
  File "/home/fabio/workspace/teste2/lista.py", line 3, in remover_acentos
    return normalize('NFKD', txt.decode(codif)).encode('ASCII','ignore')    
AttributeError: 'str' object has no attribute 'decode'


Alguém consegue me ajudar estou usando o Eclipse e o PyDev.

Em quarta-feira, 17 de outubro de 2012 16h01min59s UTC-3, fabio escreveu:

Linux Polegato

unread,
Oct 17, 2012, 8:48:38 PM10/17/12
to python...@googlegroups.com

Olá! Você deve estar usando python unicode ou verão 3 que é unicode, aí não existe decode em str. Tira o decode e veja se funciona. Abs, Junior Polegato

Renzo Nuccitelli

unread,
Oct 17, 2012, 11:21:15 PM10/17/12
to python...@googlegroups.com
def replace_spec_char(word,codif="utf-8"):
    if word is None:
        return None
    dic={"Á":"A","À":"A","Ã":"A","É":"E","Ê":"E",\
         "Í":"I","Ó":"O","Õ":"O","Ô":"O","Ú":"",\
         "Ç":"C","á":"a","à":"a","ã":"a","é":"e",\
         "ê":"e","í":"i","ó":"o","õ":"o","ô":"o",\
         "ú":"","ç":"c"}
    replaced=""
    for c in word:
        replaced+=dic.get(c,c)
    return replaced

Abs,

--
  Renzo Nuccitelli

Renzo Nuccitelli

unread,
Oct 17, 2012, 11:27:53 PM10/17/12
to python...@googlegroups.com
Esqueci o cabeçalho:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

def replace_spec_char(word,codif="utf-8"):
    if word is None:
        return None
    dic={"Á":"A","À":"A","Ã":"A","É":"E","Ê":"E",\
         "Í":"I","Ó":"O","Õ":"O","Ô":"O","Ú":"",\
         "Ç":"C","á":"a","à":"a","ã":"a","é":"e",\
         "ê":"e","í":"i","ó":"o","õ":"o","ô":"o",\
         "ú":"","ç":"c"}
    replaced=""
    for c in word:
        replaced+=dic.get(c,c)
    return replaced

E também os testes:

self.assertEquals(
    "AAAEEIOOOUCaaaeeiooouc@ ",\
    replace_spec_char("ÁÀÃÉÊÍÓÕÔÚÇáàãéêíóõôúç@ "))
self.assertIsNone(replace_spec_char(None))


 Abs,

--
  Renzo Nuccitelli



2012/10/18 Renzo Nuccitelli <ren...@gmail.com>

Marcel Caraciolo

unread,
Oct 18, 2012, 1:20:47 AM10/18/12
to python...@googlegroups.com
Galera  utilizo esta função extremamente útil que fizemos aqui no Atepassar para os nossos projetos:

Acho que será útil para muita gente aqui!


:)

Abs,

Marcel

2012/10/18 Renzo Nuccitelli <ren...@gmail.com>



--
Marcel Pinheiro Caraciolo
M.S.C. Candidate at CIN/UFPE

luan fonceca

unread,
Oct 18, 2012, 2:02:12 AM10/18/12
to python...@googlegroups.com
Marcela, ela bate pelo código ASCI, é?!
  • Software Engineering student at the Universidade Federal do Rio Grande do Norte;
  • Front-end Designer and Developer;
  • Python/Django Developer at the multmeio.com.br.

luan fonceca

unread,
Oct 18, 2012, 2:02:54 AM10/18/12
to python...@googlegroups.com
Marcel*

Luciano Ramalho

unread,
Oct 18, 2012, 3:54:58 AM10/18/12
to python...@googlegroups.com
2012/10/17 fabio <opin...@gmail.com>:
> Alguém sabe como removo a acentuação de uma lista?

Para remover acentos de palavras em qualquer idioma que use o alfabeto
latino, a solução já foi colocada aqui em outra discussão recente:

##############
from unicodedata import normalize

def remover_acentos(txt, codif='utf-8'):
return normalize('NFKD', txt.decode(codif)).encode('ASCII','ignore')
##############
fonte: http://www.python.org.br/wiki/RemovedorDeAcentos

[ ]s
Luciano


--
Luciano Ramalho / OFICINAS TURING
Twitter: @ramalhoorg

Autor e professor dos cursos:

* Objetos Pythonicos --> http://turing.com.br/oopy
* Python para quem sabe Python --> http://turing.com.br/ppqsp

Leonardo Santagada

unread,
Oct 18, 2012, 7:42:45 AM10/18/12
to python...@googlegroups.com
On Thu, Oct 18, 2012 at 4:54 AM, Luciano Ramalho <luc...@ramalho.org> wrote:
> 2012/10/17 fabio <opin...@gmail.com>:
>> Alguém sabe como removo a acentuação de uma lista?
>
> Para remover acentos de palavras em qualquer idioma que use o alfabeto
> latino, a solução já foi colocada aqui em outra discussão recente:
>
> ##############
> from unicodedata import normalize
>
> def remover_acentos(txt, codif='utf-8'):
> return normalize('NFKD', txt.decode(codif)).encode('ASCII','ignore')
> ##############
> fonte: http://www.python.org.br/wiki/RemovedorDeAcentos

eu uso o unidecode.

http://pypi.python.org/pypi/Unidecode


--

Leonardo Santagada

Marcel Caraciolo

unread,
Oct 18, 2012, 8:28:39 AM10/18/12
to python...@googlegroups.com
Sim Luan exato, ele analisa pelo código ascii cada uma das letras.

Ferramenta muito poderosa qd for preciso.

Marcel

2012/10/18 luan fonceca <luanf...@gmail.com>

luan fonceca

unread,
Oct 18, 2012, 8:30:15 AM10/18/12
to python...@googlegroups.com
Legal, sucinto.
Me lembra os tempos de C kkkkkkkkk

Felipe Mobus

unread,
Oct 18, 2012, 8:58:30 AM10/18/12
to python...@googlegroups.com
Marcel, Luan,

A solução baseada m código ASCII é uma má ideia. Se a entrada dessa
função for um string unicode, os caracteres acentuados NÃO ESTARÃO nos
codepoints (<256) que estão naquele hash. Isso só vai funcionar se o
string de entrada for ASCII com encoding latin-1, o que NÃO É algo
garantido a priori. Pelo bem de sanidade de vocês, e da sanidade de
quem for manter o código no futuro, NÃO USEM esse tipo de abordagem
para remover acentos.

Usem a abordagem que já responderam nessa lista antes (o
RemovedorDeAcentos[1]) e, quando tiverem um tempinho, leiam mais sobre
o assunto em "The Absolute Minimum Every Software Developer
Absolutely, Positively Must Know About Unicode and Character Sets (No
Excuses!)"[2]

Aos demais da lista,

Por favor, prestem atenção às respostas anteriores antes de enviar a
sua só por enviar. A questão foi respondida adequadamente no terceiro
e-mail, e mesmo assim VÁRIOS enviaram a solução baseada em
substituição manualmente definida em hash, que NÃO FUNCIONA para
certos casos.


[1] http://www.python.org.br/wiki/RemovedorDeAcentos
[2] http://www.joelonsoftware.com/articles/Unicode.html

2012/10/18 luan fonceca <luanf...@gmail.com>
Felipe Mobus
http://fmobus.wait4.org

Leonardo Santagada

unread,
Oct 18, 2012, 9:35:18 AM10/18/12
to python...@googlegroups.com
2012/10/18 Felipe Mobus <fmo...@gmail.com>:
> Por favor, prestem atenção às respostas anteriores antes de enviar a
> sua só por enviar. A questão foi respondida adequadamente no terceiro
> e-mail, e mesmo assim VÁRIOS enviaram a solução baseada em
> substituição manualmente definida em hash, que NÃO FUNCIONA para
> certos casos.

E pra avisar, a minha solução com unidecode é ao que tudo indica mais
genérica (funciona para todas as linguas e usa um algoritmo um pouco
mais complicado do que só remover os acentos).


--

Leonardo Santagada

Luciano Ramalho

unread,
Oct 18, 2012, 8:08:30 PM10/18/12
to python...@googlegroups.com
2012/10/18 Leonardo Santagada <sant...@gmail.com>:
> E pra avisar, a minha solução com unidecode é ao que tudo indica mais
> genérica (funciona para todas as linguas e usa um algoritmo um pouco
> mais complicado do que só remover os acentos).

Grato pela dica, Leo, muito interessante mesmo! Não testei mas o
unidecode deve converter o ß para ss e coisas do gênero. Fiquei
impressionado porque ele até sabe converter Beijing!

Mas, quando não se deseja uma dependência a mais, o esquema que eu
sugeri tem a vantagem de usar apenas a biblioteca padrão.

[ ]s
Luciano

>

>
> --
>
> Leonardo Santagada
>
> --
> ------------------------------------
> Grupo Python-Brasil
> http://www.python.org.br/wiki/AntesDePerguntar
>
> <*> Para visitar o site do grupo na web, acesse:
> http://groups.google.com/group/python-brasil
>
> <*> Para sair deste grupo, envie um e-mail para:
> python-brasi...@googlegroups.com



--

Danilo J. S. Bellini

unread,
Oct 18, 2012, 8:47:03 PM10/18/12
to python...@googlegroups.com
____________"On the other hand transliteration (i.e., conveying, in Roman letters, the pronunciation expressed by the text in some other writing system) of languages like Chinese, Japanese or Korean is a very complex issue and this library does not even attempt to address it."

Já vi que Pequim (ou Bei Jing) ele deixa até como exemplo, acho que essa passagem na descrição merece atualização.

Testei aqui com katakana
http://www.unicode.org/charts/PDF/U30A0.pdf
e também funcionou perfeitamente!

Gostei desse unidecode!
Danilo J. S. Bellini
---------------
"It is not our business to set up prohibitions, but to arrive at conventions." (R. Carnap)

Marcel Caraciolo

unread,
Oct 18, 2012, 9:47:02 PM10/18/12
to python...@googlegroups.com
Felipe sua observação foi interessante.

E concordo com você em certos casos ela não vai funcionar. Porém foi uma solução na época que construí há 3 anos atrás e só  não me deixou na mão pelo fato de maioria das strings que trabalho aqui são tratadas como unicode com representação utf-8.

Mas valeu pelas informações!

Atenciosamente,

Marcel

2012/10/18 Danilo J. S. Bellini <danilo....@gmail.com>



--

Alexandre Andrade

unread,
Oct 22, 2012, 12:20:53 AM10/22/12
to python...@googlegroups.com
há um pattern para internet que é o slug (retirar os acentos e converter os espaços em underscore).

sugiro procurar por esse pattern que é meio caminho andado.



Em 17 de outubro de 2012 17:01, fabio <opin...@gmail.com> escreveu:
Olá galera

Alguém sabe como removo a acentuação de uma lista?

--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com



--
Atenciosamente


Alexandre Andrade
Hipercenter.com Classificados Gratuitos

fabio

unread,
Oct 23, 2012, 8:43:48 AM10/23/12
to python...@googlegroups.com
Olá, exatamente, uso o python 3, mas mesmo tirando o decode ainda não da certo. Abraços, Fábio Krone

Linux - Junior Polegato

unread,
Oct 23, 2012, 12:14:12 PM10/23/12
to python...@googlegroups.com
Em 23-10-2012 10:43, fabio escreveu:
> Ol�, exatamente, uso o python 3, mas mesmo tirando o decode ainda n�o
> da certo. Abra�os, F�bio Krone

Ol�!

Mas qual o erro agora?

[]'s
Junior Polegato

fabio

unread,
Oct 23, 2012, 12:51:10 PM10/23/12
to python...@googlegroups.com
Eu consegui fazer usando replace mas gostaria de tentar usando o normalize, que usa menos linhas.
Segue o código e o erro:


# -*- coding: utf-8 -*-
texto = "São João ação"
print (texto)
from unicodedata import normalize
def remover_acentos(txt, codif='utf-8'):
    return normalize('NFKD', txt.encode('ASCII','ignore'))
lista = texto
resultado = [remover_acentos(palavra) for palavra in lista.split() if len(palavra) > 3]
print (resultado)

abraços e obrigado por responder sempre



Em terça-feira, 23 de outubro de 2012 14h14min22s UTC-2, Junior Polegato - Linux escreveu:
Em 23-10-2012 10:43, fabio escreveu:
> Ol�, exatamente, uso o python 3, mas mesmo tirando o decode ainda n�o
> da certo. Abra�os, F�bio Krone

Ol�!

Linux - Junior Polegato

unread,
Oct 23, 2012, 1:54:19 PM10/23/12
to python...@googlegroups.com
Em 23-10-2012 14:51, fabio escreveu:
> Eu consegui fazer usando replace mas gostaria de tentar usando o
> normalize, que usa menos linhas.
> Segue o c�digo e o erro:
> # -*- coding: utf-8 -*-
> texto = "S�o Jo�o a��o"
> print (texto)
> from unicodedata import normalize
> def remover_acentos(txt, codif='utf-8'):
> ....return normalize('NFKD', txt.encode('ASCII','ignore'))
> lista = texto
> resultado = [remover_acentos(palavra) for palavra in lista.split() if
> len(palavra) > 3]
> print (resultado)
> abra�os e obrigado por responder sempre

Ol�!

N�o � `normalize('NFKD', txt.encode('ASCII','ignore'))�, o
correto � `normalize('NFKD', txt).encode('ASCII','ignore')�.

Para minha conveni�ncia, eu faria:

def remover_acentos(txt, codif='utf-8'):
....if type(txt) == str:
........txt = dados.decode(codif)
....txt = txt.replace(u'�', 'AE').replace(u'�', 'ae').replace(u'�',
'a.').replace(u'�', '.')
....txt = normalize('NFKD', txt).encode('ascii','ignore')
....return txt


[]'s
Junior Polegato

Danilo J. S. Bellini

unread,
Jun 17, 2013, 1:00:03 AM6/17/13
to python-brasil
Só para avisar, a nova versão do Unidecode (2013-05-30, v0.04.13) modifica o mapeamento do trema: vogais "ä", "ö" e "ü" passam a ser mapeadas como "ae", "oe" e "ue", respectivamente (além das maiúsculos).

Isso deu um problema comigo na palavra Anhangüera que eu tinha em um arquivo de texto. A mudança feita está indicada como uma compatibilização com o alemão (msg do commit). Acho que tem a versão antiga ainda no PyPI mas instalei a versão de janeiro (2013-01-28, v0.04.12) direto do repositório git

A versão anterior mapeava esses caracteres sem inserir o "e"

Pensei em solicitar uma mudança para o projeto (por e-mail), em que algum parâmetro controlasse essa diferença, quando me toquei que o trema não existe mais na nova norma ortográfica do português, mas ficou confuso pois imagino que nomes próprios não mudam (ou mudam?). O distrito do Anhangüera em São Paulo continua tendo o trema? Vi que em alguns lugares continua com o trema, em outros está sem, mas ainda não estou exatamente "satisfeito"...de qualquer forma, imagino que existam mais "nuances" nessa conversão...



Em 29 de abril de 2013 18:20, André Duarte <clint.te...@gmail.com> escreveu:
Tente testar o tipo da string antes, se for unicode elimine o decode.
 
   if  isinstance(txt, unicode):
        return normalize('NFKD', txt).encode('ASCII','ignore')
    elif isinstance(txt, str):
        return normalize('NFKD', txt.decode(codif)).encode('ASCII','ignore')
    else:
        return txt # pode ser um int, ou então raise exception
--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
 
---
Você está recebendo esta mensagem porque se inscreveu no grupo "python-brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para python-brasi...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
 
 
Reply all
Reply to author
Forward
0 new messages