#!/usr/bin/env python
# -*- coding: utf_8 -*-
def splitParagraphIntoSentences(paragraph):
''' break a paragraph into sentences
and return a list '''
import re
# to split by multile characters
# regular expressions are easiest (and fastest)
sentenceEnders = re.compile('[.!?][\s]{1,2}(?=[A-Z])')
sentenceList = sentenceEnders.split(paragraph, re.UNICODE)
return sentenceList
if __name__ == '__main__':
p = "While other species (e.g. horse mango, M. foetida) are also grown ,Mangifera indica – the common mango or Indian mango – Sheffield’s only mango tree is valued at £9.2 billion."
sentences = splitParagraphIntoSentences(p)
for s in sentences:
print s.strip()
Producto esperado: Mientras que otras especies (por ejemplo, mango de caballo, M. foetida) también se cultivan, Mangifera indica, el mango común o el mango indio, el único árbol de mango de Sheffield está valorado en £ 9,2 mil millones ".
Producción recibida: mientras que otras especies (p. Ej., Mango de caballo, M. foetida) también se cultivan, Mangifera ind ica ôÇô el mango común o el mango indio ΓÇô SheffieldΓÇÖs solo tiene un valor de vaú9,2 mil millones.
Ignore el significado de la oración, el punto principal es que no puede acceder a caracteres especiales como "-", "£", "'" y otros. Intenté configurar el archivo sitecustomize.py y este código con otras codificaciones como ascii, utf-32, cp-500, iso8859_15 y utf-8 pero no pude resolverlo. Lo siento, soy nuevo en Python. Gracias de antemano por la ayuda.
4 respuestas
Han encontrado la solución a esto.
El siguiente fragmento de código funciona bien.
p = p.encode('utf-8') if isinstance(p,unicode) else p
Usar los literales de cadena Unicode como Nam sugirió es correcto, pero si su terminal está usando la página de códigos cp437 como sugiere su salida, no podrá mostrar algunos de los caracteres Unicode que desea usar. La consola de Windows no admite UTF-8, que es lo que está enviando si declara coding: utf-8
1 en su archivo fuente y no usa literales Unicode . coding: utf-8
declara la codificación de su archivo fuente , así que asegúrese de guardar su fuente en la codificación UTF-8.
Cuando usa un literal Unicode, Python interpreta la cadena fuente en la codificación declarada y la convierte en una cadena Unicode. Al imprimir una cadena Unicode, Python codificará la cadena en la codificación del terminal o, si no tiene una codificación del terminal, use una codificación predeterminada de ascii
para Python 2.
Un ejemplo:
# coding: utf8
print '£9.2 billion' # Sends UTF-8 to cp437 terminal (gibberish)
print u'£9.2 billion' # Correctly prints on cp437 terminal.
print 'Sheffield’s' # Sends UTF-8 to cp437 terminal (gibberish)
# Replaces Unicode characters that are unsupported in cp437.
print u'Sheffield’s £9.2 billion'.encode('cp437','xmlcharrefreplace')
print u'Sheffield’s' # UnicodeEncodeError.
Salida
£9.2 billion
£9.2 billion
SheffieldΓÇÖs
Sheffield’s £9.2 billion
Traceback (most recent call last):
File "C:\Documents and Settings\metolone\Desktop\x.py", line 10, in <module>
print u'SheffieldΓÇÖs' # UnicodeEncodeError.
File "C:\dev\python27\lib\encodings\cp437.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u2019' in position 9: character maps to <undefined>
Por lo tanto, no espere que las cosas impriman todo Unicode correctamente en una consola de Windows. Use un IDE de Python que admita UTF-8, como PythonWin (disponible en la extensión pywin32 )
Necesita dos cosas para mostrar los caracteres Unicode correctamente en la consola de Windows: una codificación que asigne los caracteres Unicode que desea mostrar y una fuente que admita el glifo correcto para esos caracteres. Por ejemplo, si cambia la página de códigos de la consola a Windows-1252 (chcp 1252
) y cambia la fuente de la consola a Consolas o Lucida Console en lugar de Raster Fonts, su programa original funcionará si usa literales Unicode ({{ X1}}).
p = "While other species..."
Debe cambiarse a
p = u"While other species..."
Observe la u
delante de la cita.
Lo que necesita son los llamados literales Unicode. En Python 2, los literales de cadena no son Unicode de manera predeterminada.
Eso parece cp437. Prueba esto:
import codecs, sys
sys.stdout = codecs.getwriter('UTF-8')(sys.stdout)
print u"valued at £9.2 billion."
Esto funciona para mí en Python 2.6.
Preguntas relacionadas
Preguntas vinculadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.