使用Python删除重音 - Unicode不起作用

时间:2016-07-13 19:47:20

标签: python unicode

我正在尝试使用以下代码清理西班牙语文本:

import re
import unicodedata
file = open("dirty.txt").readlines()
archivo = open("cleanText.txt", "w")
textLowerCase = file[i].lower()
unicodeText = textLowerCase.decode('unicode-escape')
textWithoutAccents = unicodedata.normalize('NFKD', unicodeText).encode('ASCII', 'ignore')
textWithoutSymbols = re.sub(r'[^\w]', ' ', textWithoutAccents)
archivo.write(textWithoutSymbols)

我的输入文字如下:

"anunciarán la realización de una interpelación"

我的愿望输出是:

"anunciaran la realizacion de una interpelacion"

但是我的代码我得到了下一个结果:

"anunciarAn la realizaciA3n de una interpelaciA3n"

你知道我怎么解决这个问题?

1 个答案:

答案 0 :(得分:3)

这正是 unidecode 包所做的:https://pypi.python.org/pypi/Unidecode

自述文件:

  

模块导出一个函数,该函数接受Unicode对象(Python 2.x)或字符串(Python 3.x)并返回一个字符串(可以在Python 3.x中编码为ASCII字节):

(\d+)

编辑:

您的确切示例:

>>> from unidecode import unidecode
>>> unidecode(u'ko\u017eu\u0161\u010dek')
'kozuscek'
>>> unidecode(u'30 \U0001d5c4\U0001d5c6/\U0001d5c1')
'30 km/h'
>>> unidecode(u"\u5317\u4EB0")
'Bei Jing '

编辑2:

如果您使用的是Python 2,请不要忘记:

  • >>> from unidecode import unidecode >>> unidecode("anunciarán la realización de una interpelación") 'anunciaran la realizacion de una interpelacion' 或:
  • 在字符串引号前使用from __future__ import unicode_literals前缀:u