Re: [Python-es] Problemas con expresión regular

2010-05-18 Por tema Chema Cortes
El día 18 de mayo de 2010 02:50, Andreina Mejia
andreiname...@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+,uNiñ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
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Problemas con expresión regular

2010-05-18 Por tema Narcis Garcia - GiLUG
Yo convertiría el diccionario por ejemplo con el editor de texto plano 
de Gnome (gedit): abrir el fichero, 'guardar como', y seleccionar UTF8 
en el desplegable de la codificación de carácteres.



En/na Chema Cortes ha escrit:

El día 18 de mayo de 2010 02:50, Andreina Mejia
andreiname...@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+,uNiñ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
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Problemas con expresión regular

2010-05-17 Por tema Raul Jimenez
2010/5/16 Andreina Mejia andreiname...@gmail.com:
 Hola a todos!

 Estoy haciendo un pequeño programa que encuentre todas las palabras
 incluyendo las acentuadas de un gran texto y las almacene en un string.
 Intenté con la expresión regular [a-zA-Záéíóúñ]+:

Nota lingüística:
no te olvides de la ü.

/Raul
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Problemas con expresión regular

2010-05-17 Por tema Juan Ignacio
Seguramente es un discrepancia entre la codificación de tu código python y
la codificación de los datos que estés leyendo. Fíjate en la primera línea
de código de Rolando, empieza con:

# -*- coding: utf-8 -*-

Este indica al interprete que el programa esta codificado en utf-8; si tus
datos también están codificados en utf-8 no deberías tener problemas.

2010/5/17 Raul Jimenez raul...@gmail.com

 2010/5/16 Andreina Mejia andreiname...@gmail.com:
  Hola a todos!
 
  Estoy haciendo un pequeño programa que encuentre todas las palabras
  incluyendo las acentuadas de un gran texto y las almacene en un string.
  Intenté con la expresión regular [a-zA-Záéíóúñ]+:

 Nota lingüística:
 no te olvides de la ü.

 /Raul
 ___
 Python-es mailing list
 Python-es@python.org
 http://mail.python.org/mailman/listinfo/python-es
 FAQ: http://python-es-faq.wikidot.com/




-- 
Juan Ignacio Rodríguez de León
Movil: 605 890514
E-Mail: euriba...@gmail.com
http://www.tenerife-lanparty.com/
http://elornitorrincoenmascarado.blogspot.com/
http://descon2.com/
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Problemas con expresión regular

2010-05-17 Por tema Andreina Mejia
Uh... bueno aquí coloco el código con las pequeñas modificaciones que he
hecho para probar:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re, collections

def words(text):
text.lower()
return re.findall('\w+', 'í'.decode('utf-8'), re.UNICODE) #Para probar
si reconoce las palabras con 'í'

def train(features):
model = collections.defaultdict(lambda: 1)
for f in features:
model[f] += 1
return model

NWORDS = train(words(file('Diccionario.txt').read()))

alphabet = 'abcdefghijklmnopqrstuvwxyz'

def edits1(word):
   splits = [(word[:i], word[i:]) for i in range(len(word) + 1)]
   deletes= [a + b[1:] for a, b in splits if b]
   transposes = [a + b[1] + b[0] + b[2:] for a, b in splits if len(b)1]
   replaces   = [a + c + b[1:] for a, b in splits for c in alphabet if b]
   inserts= [a + c + b for a, b in splits for c in alphabet]
   return set(deletes + transposes + replaces + inserts)

def known_edits2(word):
return set(e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in
NWORDS)

def known(words): return set(w for w in words if w in NWORDS)

def correct(word):
candidates = known([word]) or known(edits1(word)) or known_edits2(word)
or [word]
key=NWORDS.get
print candidates
print key

if __name__=='__main__':
word= raw_input('Palabra en español: ')
correct(word)

Y esta es la salida:

Palabra en español: día
['d\xc3\xada']
built-in method get of collections.defaultdict object at 0xb773f89c

Y según lo que me explica Rolando no debería ser así verdad? :(...
Diccionario.txt no está en utf-8.

No tengo mucha experiencia con esto :(... qué puedo hacer?

Gracias! :)
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Problemas con expresión regular

2010-05-17 Por tema Rolando Espinoza La Fuente
2010/5/17 Andreina Mejia andreiname...@gmail.com:
[...]
 def correct(word):
     candidates = known([word]) or known(edits1(word)) or known_edits2(word)
 or [word]
     key=NWORDS.get
     print candidates
     print key

prueba con:
   print ', '.join(candidates)

 if __name__=='__main__':
     word= raw_input('Palabra en español: ')
     correct(word)

 Y esta es la salida:

 Palabra en español: día
 ['d\xc3\xada']
 built-in method get of collections.defaultdict object at 0xb773f89c

candidates es un list, y te muestra su representación con su contenido
 print 'd\xc3\xada'
día

~Rolando
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Problemas con expresión regular

2010-05-17 Por tema Patricio Valarezo Lozano

Andreina Mejia wrote:


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?

Gracias :)




Abres Diccionario.txt en tu editor favorito que soporte guardar 
codificaciones (yo uso gvim), y en mi editor pones :set fileencoding 
utf-8 y listo, creo que gedit tambien tiene esa opción.



saludos


--
patoVala
Linux User#280504
Hablando en http://www.elprimoalcahuete.com
Si estoy así es porque me lo merezco.
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/