Re: [Python-es] Problemas con expresión regular
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
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/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
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
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/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
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/