[Python-es] Problemas con expresión regular

Chema Cortes pych3m4 en gmail.com
Mar Mayo 18 10:47:58 CEST 2010


El día 18 de mayo de 2010 02:50, Andreina Mejia
<andreinamejia en gmail.com> escribió:
>
> Si imprime bien, pero el problema está en que las palabras que contiene
> Diccionario.txt no están en utf-8 por lo que no me corrige las palabras
> acentuadas o las q tengan 'ñ'... por eso la salida es del tipo d\xc3\xada.
>
> Cómo hago para colocar todo el contenido de Diccionario.txt en utf-8?

Abre el fichero con 'codecs.open'

  import codecs
  NWORDS = train(words(codecs.open('Diccionario.txt',encoding='latin1').read()))

En realidad la pregunta está mal hecha. Debería ser: ¿cómo abrir un
fichero codificado en XXX para leerlo como unicode? No es lo mismo
hablar de cadenas unicode que de codificaciones utf8. Una vez creados,
los objetos unicodes utilizan internamente "codepoints" para su
representación; la codificación utf8 es una de las codificaciones que
hay para exportar objetos unicodes para su represetación en ficheros y
terminales.

En cuanto al resto del asunto, cuando se usa unicode en expresiones
regulares se generalizan las reglas para detectar palabras. No es
necesario (ni conveniente) definir explícitamente el alfabeto a usar
puesto que basta con una expresión '\w+' para detectar cualquier
palabra.

  re.findall("\w+",u"Niño y camión son palabras",re.U)

Ten en cuenta que con unicode funcionan mejor algunos chequeos que
fallaban con las strings normales:

>>> 'ñ'.islower()
0: False
>>> u'ñ'.islower()
1: True



Más información sobre la lista de distribución Python-es