#!/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.

2
Sirius 11 ago. 2011 a las 02:45

4 respuestas

La mejor respuesta

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
2
Sirius 27 jun. 2013 a las 08:11

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}}).

2
Mark Tolonen 11 ago. 2011 a las 15:53
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.

0
Nam Nguyen 11 ago. 2011 a las 01:09

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.

1
wberry 10 ago. 2011 a las 23:02