Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-29 Per discussione enrico franchi
2015-01-29 11:26 GMT+00:00 Nicola Larosa :

> Tra l'altro, suggerisco caldamente di non fare grande affidamento su
> nessuno dei due per quanto riguarda l'encoding. Là fuori è pieno di
> server HTTP e di pagine HTML che mentono allegramente al riguardo.
>

Oppure che so... parliamo di quello che fa Tornado con i content type?


-- 
.
..: -enrico-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-29 Per discussione Nicola Larosa
Marco Ippolito wrote:
> E se fosse il pdf della pagina web?

La content detection funziona anche lì, per quanto ne so.

Spero che averla tradotta in italiano negli ultimi due paragrafi del mio
messaggio non ti abbia distratto. :-)

-- 
Nicola 'tekNico' Larosa 

Non facciamo convegni. O meglio facciamo convegni senza convegno.
Visto che poi ai convegni le cose importanti ce le si dice al bar
abbiamo deciso di fare convegni con solo il bar, senza le relazioni
e i microfoni. - Jacopo Fo, settembre 2014

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-29 Per discussione Marco Ippolito
Mille grazie Nicola.
La strada sembra essere irta e ricca di ostacoli.
Non ci si annoia mai

E se fosse il pdf della pagina web?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-29 Per discussione Nicola Larosa
Marco Ippolito wrote:
> http definisce un parametro charset nell'header Content-type per cui
> pensavo, probabilmente sbagliando visto il messaggio che non so be
> decifrare che mi lancia python quando salvo il file con encoding 
> iso-8859-1, che fosse : content="text/html; charset=iso-8859-1">

Attenzione alla differenza tra HTTP e HTML.

Quella doc si riferisce all'header HTTP inviato nella response *prima*
del content, cioè prima della pagina HTML.

Il tag  riporti proviene dalla sezione  di una pagina HTML.

Header HTTP e  HTML sono due cose diverse.


Tra l'altro, suggerisco caldamente di non fare grande affidamento su
nessuno dei due per quanto riguarda l'encoding. Là fuori è pieno di
server HTTP e di pagine HTML che mentono allegramente al riguardo.

Il rilevamento automatico dell'encoding è basato su euristiche che
possono fallire, ma ho paura sia il meglio che tu possa fare.

-- 
Nicola 'tekNico' Larosa 

Non facciamo convegni. O meglio facciamo convegni senza convegno.
Visto che poi ai convegni le cose importanti ce le si dice al bar
abbiamo deciso di fare convegni con solo il bar, senza le relazioni
e i microfoni. - Jacopo Fo, settembre 2014
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-29 Per discussione Marco Ippolito
qui: 
http://chardet.readthedocs.org/en/latest/faq.html#what-is-character-encoding

leggo che http definisce un parametro charset nell'header Content-type
per cui pensavo, probabilmente sbagliando visto il messaggio che non
so be decifrare che mi lancia python quando salvo il file con encoding
iso-8859-1, che fosse :

Ammetto che mi devo mettere con calma a studiarmi tutte queste cose,
perchè ho un gran confusione.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-29 Per discussione Marco Ippolito
Il 29 gennaio 2015 11:18, Marco Ippolito  ha scritto:
>> ma se sono notizie prese da internet, l'encoding dovresti già saperlo
>> dall'html.
>> Che sorgenti di dati hai?
> L'articolo in questione è questo:
> http://www.ilsole24ore.com/art/english-version/2014-05-29/signs-of-light-the-credit-darkness-032044.shtml?uuid=ABJTc3LB

comunque nell'html della pagina web in questione si legge:


ho provato a mettere allora:
#!/usr/bin/python
#-*- coding: iso-8859-1 -*-

ma, all'atto di salvare il file per poi eseguirlo, esce questo:

These default coding systems were tried to encode text
  (iso-latin-1-unix (293 . 8212) (298 . 8217) (303 . 8221) (308
  . 8220) (1067 . 8220) (1088 . 8221) (1109 . 8212) (1130 . 8217)
  (2227 . 8220) (2279 . 8220) (2360 . 8221))
However, each of them encountered characters it couldn't encode:
  iso-latin-1-unix cannot encode these: — ’ ” “ “ ” — ’ “ “ ...

Click on a character (or switch to this window by `C-x o'
and select the characters by RET) to jump to the place it appears,
where `C-u C-x =' will give information about it.
Select one of the safe coding systems listed below,
or cancel the writing with C-g and edit the buffer
   to remove or modify the problematic characters,
|or specify any other coding system (and risk losing
   the problematic characters).

  utf-8 euc-jis-2004 euc-jp windows-1256 windows-1258 iso-2022-jp-2004
  next macintosh windows-1254 windows-1252 gb18030 gbk utf-7 utf-16
  utf-16be-with-signature utf-16le-with-signature utf-16be utf-16le
   iso-2022-7bit utf-8-auto utf-8-with-signature eucjp-ms
   georgian-academy georgian-ps japanese-shift-jis-2004
   japanese-iso-7bit-1978-irv utf-7-imap utf-8-emacs
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-29 Per discussione Simone Federici
Ok ho detto encoding?
e ti sto facendo incartare.

L'enconding di quella pagina è utf-8 quindi è corretto

prova a sottoporre al testo

print u"\n".join([u"%s -> %s" % (c, unicodedata.category(c)) for c in
tuo_testo_unicode if unicodedata.category(c) not in ['Ll', 'Lu', 'Zs',
'Nd']])

ti conviene trattare con alcune categorie tipo:
Ps Punctuation, Open
Pe Punctuation, Close
Pi Punctuation, Initial quote (may behave like Ps or Pe depending on usage)
Pf Punctuation, Final quote (may behave like Ps or Pe depending on usage)
ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.html

ad esempio fai un replace di questi caratteri con l'apostrofo e amen.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-29 Per discussione Marco Ippolito
> ma se sono notizie prese da internet, l'encoding dovresti già saperlo
> dall'html.
> Che sorgenti di dati hai?
L'articolo in questione è questo:
http://www.ilsole24ore.com/art/english-version/2014-05-29/signs-of-light-the-credit-darkness-032044.shtml?uuid=ABJTc3LB

Ma la domanda che mi pongo è se sia possibile trovare un modo per
individuare l'encoding utilizzato, indipendentemente dalla tipologia
di fonte dell'informazione.
Cioè in questo caso l'articolo è una pagina html...ma se fosse un pdf
dello stesso articolo?
chardet sarebbe utile, magari insieme ad altri tool di encoding detection?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-29 Per discussione Simone Federici
Marco Ippolito:

> [u'Questo articolo e stato pubblicato il  29 maggio 2014 alle ore
> 05:59.', u"L'ultima modifica e del 29 maggio 2014 alle ore 03:20.",
> u'The climate continues to improve within the European banking system
> and even if it\u2019s early to say that the problems have been
> definitively resolved, Italy seems to have an advantage in the harsh
> process of renewal imposed by the crisis.',
>

ma se sono notizie prese da internet, l'encoding dovresti già saperlo
dall'html.
Che sorgenti di dati hai?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-29 Per discussione Marco Ippolito
facendo così:
self.chardict={u"“": "'",
  u"”": "'",
  u"—": "-",
  u"’": "'",
  u"è": "e'",
  u"é": "e'"}

def gio_solution(self, s):
SUBS = re.compile(u"([%s])" %'|'.join(self.chardict.keys()))
return SUBS

mi dice:
  File "extract_sentences.py", line 115, in 
sentences = extract_sentences_from_webpage.get_sentences_from_text()
  File "extract_sentences.py", line 107, in get_sentences_from_text
return self.sentences_extraction_meth()
  File "extract_sentences.py", line 100, in sentences_extraction_meth
self.sentences_extracted_list =
self.tokenizer.tokenize(self.extracted_text_u)
  File "/usr/local/lib/python2.7/dist-packages/nltk/tokenize/punkt.py",
line 1270, in tokenize
return list(self.sentences_from_text(text, realign_boundaries))
  File "/usr/local/lib/python2.7/dist-packages/nltk/tokenize/punkt.py",
line 1318, in sentences_from_text
return [text[s:e] for s, e in self.span_tokenize(text, realign_boundaries)]
  File "/usr/local/lib/python2.7/dist-packages/nltk/tokenize/punkt.py",
line 1309, in span_tokenize
return [(sl.start, sl.stop) for sl in slices]
  File "/usr/local/lib/python2.7/dist-packages/nltk/tokenize/punkt.py",
line 1348, in _realign_boundaries
for sl1, sl2 in _pair_iter(slices):
  File "/usr/local/lib/python2.7/dist-packages/nltk/tokenize/punkt.py",
line 354, in _pair_iter
prev = next(it)
  File "/usr/local/lib/python2.7/dist-packages/nltk/tokenize/punkt.py",
line 1322, in _slices_from_text
for match in self._lang_vars.period_context_re().finditer(text):
TypeError: expected string or buffer


Facendo così:
def elimina_accenti(self, stringa):
return "".join((c for c in unicodedata.normalize('NFD',
stringa) if unicodedata.category(c) != 'Mn'))

self.extracted_text_u =
self.elimina_accenti(unicode(self.extracted_text_u, "utf-8"))

anche in questo caso non si hanno errori ma rimangono ancora dei
caratteri spuri.
Per cui penso che debba proprio approfondire l'uso di chardet, per la
encoding detection.

Il 29 gennaio 2015 10:32, Diego Barrera  ha scritto:
> Il 28/01/2015 18:15, Marco Ippolito ha scritto:
>>
>> Ciao a tutti,
>>
>> ho messo in file json alcune possibili sostituzioni di simboli
>> all'interno di un testo:
>>  "to_substitute":{
>>  "“": "'",
>>  "”": "'",
>>  "—": "-",
>>  "’": "'",
>>  "è": "e'",
>>  "é": "e'"
>>  }
>>
>>
>
> import unicodedata
>
> def elimina_accenti(stringa):
> return ''.join((c for c in unicodedata.normalize('NFD', stringa) if
> unicodedata.category(c) != 'Mn'))
>
> ___
> Python mailing list
> Python@lists.python.it
> http://lists.python.it/mailman/listinfo/python
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-29 Per discussione Diego Barrera

Il 28/01/2015 18:15, Marco Ippolito ha scritto:

Ciao a tutti,

ho messo in file json alcune possibili sostituzioni di simboli
all'interno di un testo:
 "to_substitute":{
 "“": "'",
 "”": "'",
 "—": "-",
 "’": "'",
 "è": "e'",
 "é": "e'"
 }




import unicodedata

def elimina_accenti(stringa):
return ''.join((c for c in unicodedata.normalize('NFD', stringa) if 
unicodedata.category(c) != 'Mn'))

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-29 Per discussione Marco Ippolito
> Qualcuno ha gia' sperimentato com successo questi algoritmi di encoding
> detection?

Ho trovato questo: https://pypi.python.org/pypi/chardet

provo ad usarlo e poi vi dico

Marco
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-29 Per discussione Marco Ippolito
Pensavo alla stessa cosa Simone..algoritmi di encoding detection,per
individuare la codifica usata ,e poter quindi adottare la appropriata
soluzione per quella specifica codifica. Ora cerco in rete.
Qualcuno ha gia' sperimentato com successo questi algoritmi di encoding
detection?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-29 Per discussione Simone Federici
Marco:
>
> non mi dà più errori ma rimangono dei simboli "sporchi"


da quello che vedo il problema è che le stringhe in input non sono dello
stesso encoding. o trovi un modo in anticipo si sapere la stringa che
emcoding ha e usi decode('utf8') o decode('latin1') ecc..
oppure cerchi di scoprirlo con degli algoritmi di encoding detection.

oppure sistemi a mano...
object.replace(u"\u2019", u"'")

l'ultima ipotesi è una scorciatoia...


-- 
Simone Federici

Software Craftsman
XP, Agile, Scrum, Kanban
Quality, performance & security

Explicit is better than implicit.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-29 Per discussione Marco Ippolito
come giustamente mi ha fatto notare Simone,
così: nfkd_form = unicodedata.normalize('NFKD', unicode(input_str))
non mi dà più errori ma rimangono dei simboli "sporchi":
[u'Questo articolo e stato pubblicato il  29 maggio 2014 alle ore
05:59.', u"L'ultima modifica e del 29 maggio 2014 alle ore 03:20.",
u'The climate continues to improve within the European banking system
and even if it\u2019s early to say that the problems have been
definitively resolved, Italy seems to have an advantage in the harsh
process of renewal imposed by the crisis.',


2015-01-29 9:14 GMT+01:00 Simone Federici :
> Marco Ippolito:
>>
>> UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
>> 16: ordinal not in range(128)
>
>
> u'te l'avevo detto che voleva un unicode'
> 'non una stringa'
>
>
> --
> Simone Federici
> 
> Software Craftsman
> XP, Agile, Scrum, Kanban
> Quality, performance & security
>
> Explicit is better than implicit.
>
>
>
> ___
> Python mailing list
> Python@lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-29 Per discussione Simone Federici
Marco Ippolito:
>
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
> 16: ordinal not in range(128)


u'te l'avevo detto che voleva un unicode'
'non una stringa'


-- 
Simone Federici

Software Craftsman
XP, Agile, Scrum, Kanban
Quality, performance & security

Explicit is better than implicit.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-28 Per discussione Marco Ippolito
Mille grazie a tutti per gli spunti di soluzione che mi avete dato.
Li provo uno ad uno.

Ho provato ora questa:

def remove_accent(self, input_str):
nfkd_form = unicodedata.normalize('NFKD', unicode(input_str))

return u"".join([ch for ch in nkfd_form if not
unicodedata.combining(c)])
self.extracted_text_u = self.remove_accent(self.extracted_text_u)

  File "extract_sentences.py", line 34, in remove_accent
nfkd_form = unicodedata.normalize('NFKD', unicode(input_str))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
16: ordinal not in range(128)
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-28 Per discussione Giovanni Porcari

> Il giorno 29/gen/2015, alle ore 08:22, Simone Federici  
> ha scritto:
> 
> import unicodedata
> def remove_accents(input_str): nkfd_form = unicodedata.normalize('NFKD', 
> unicode(input_str)) return u"".join([c for c in nkfd_form if not 
> unicodedata.combining(c)])
> u'gli devi passare un unicode'
> dicci se funziona
> http://stackoverflow.com/questions/517923/what-is-the-best-way-to-remove-accents-in-a-python-unicode-string
> 
> 
> 

Mi pare non volesse rimouvere l'accento ma sostituire una accentata con 
la lettera non accentata e il simbolo apice.


Esempio però --> pero'

Ciao

G
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-28 Per discussione Simone Federici
import unicodedata

def remove_accents(input_str):
nkfd_form = unicodedata.normalize('NFKD', unicode(input_str))
return u"".join([c for c in nkfd_form if not unicodedata.combining(c)])

u'gli devi passare un unicode'

dicci se funziona

http://stackoverflow.com/questions/517923/what-is-the-best-way-to-remove-accents-in-a-python-unicode-string




-- 
Simone Federici

Software Craftsman
XP, Agile, Scrum, Kanban
Quality, performance & security

Explicit is better than implicit.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-28 Per discussione Giovanni Porcari

> Il giorno 28/gen/2015, alle ore 18:15, Marco Ippolito 
>  ha scritto:
> 
> Ciao a tutti,
> 
> ho messo in file json alcune possibili sostituzioni di simboli
> all'interno di un testo:
>"to_substitute":{
>"“": "'",
>"”": "'",
>"—": "-",
>"’": "'",
>"è": "e'",
>"é": "e'"
>}
> 
> facendo così:
> self.extracted_text_u = self.extracted_text_u.replace("“",
> self.textManipulation["to_substitute"][unicode("“", "utf-8")])
> self.extracted_text_u = self.extracted_text_u.replace("”",
> self.textManipulation["to_substitute"][unicode("”", "utf-8")])
> self.extracted_text_u = self.extracted_text_u.replace("—",
> self.textManipulation["to_substitute"][unicode("—", "utf-8")])
> self.extracted_text_u = self.extracted_text_u.replace("’",
> self.textManipulation["to_substitute"][unicode("’", "utf-8")])
> self.extracted_text_u = self.extracted_text_u.replace("è",
> self.textManipulation["to_substitute"][unicode("è", "utf-8")])
> self.extracted_text_u = self.extracted_text_u.replace("é",
> self.textManipulation["to_substitute"][unicode("é", "utf-8")])
> 
> sostituisco all'interno di un testo alcuni simboli con il
> corrispettivo messo nel file json.
> 
> Ma questa soluzione, pur funzionando, non è granchè
> per cui ho importato le coppie simbolo-sostituto in un dictionary:
> self.to_substitute_dictionary = self.textManipulation["to_substitute"]
> {u'\xe9': "e'", u'\xe8': "e'", u'\u2014': '-', u'\u2019': "'",
> u'\u201d': "'", u'\u201c': "'"}
> 
> for k, v in self.to_substitute_dictionary.iteritems():
>print k, v
> é e'
> è e'
> — -
> ’ '
> ” '
> “ '
> 
> Quando invece faccio:
> for k, v in self.to_substitute_dictionary.iteritems():
>  self.extracted_text_u = self.extracted_text_u.replace(k, v)
> 
>  File "extract_sentences.py", line 56, in sentences_extraction_meth
>self.extracted_text_u = self.extracted_text_u.replace(k, v)
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
> 16: ordinal not in range(128)
> 
> E se faccio:
> for k, v in self.to_substitute_dictionary.iteritems():
> v_u = unicode(v, "utf-8")
> self.extracted_text_u = self.extracted_text_u.replace(k, v_u)
> 
>   self.extracted_text_u = self.extracted_text_u.replace(k, v_u)
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
> 16: ordinal not in range(128)
> 
 for k, v in to_substitute_dictionary.iteritems():
> ... v_u = unicode(v, "utf-8")
> ... print "(type(k), type(v_u))= ", (type(k), type(v_u))
> ...
> (type(k), type(v_u))=  (, )
> (type(k), type(v_u))=  (, )
> (type(k), type(v_u))=  (, )
> 
> Deve essere una stupidata.qualche consiglio?
> 
> Marco




Butto lì una soluzione rapida ...


#-*- coding: UTF-8 -*-
import re
chardict={u"“": "'",
  u"”": "'",
  u"—": "-",
  u"’": "'",
  u"è": "e'",
  u"é": "e'"}
  
SUBS=re.compile(u"([%s])" %'|'.join(chardict.keys()))

s=u"Mario disse “non so perché non so chi è” "

print SUBS.sub(lambda m:chardict[m.group(1)],s)


>>>Mario disse 'non so perche' non so chi e'' 



Spero ti sia utile.

Ciao

G

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-28 Per discussione Riccardo Magliocchetti

Ciao Marco,

Il 28/01/2015 18:32, Marco Ippolito ha scritto:

Scusa se non sono stato chiaro.

Il problema è quello della sostituzione di simboli tipo "”", o tipo
"è", con simboli più facilmente manipolabili, esempio "'" e "e'".
Per cui ho messo queste coppie di simbolo-sostituto all'interno di un file json.


Ho capito che questo è quello che hai fatto. Quello che io mi chiedo è: 
perchè lo devi fare? che problema risolvi facendolo? Spesso perdiamo 
tempo a risolvere problemi che ci auto infliggiamo :)
Posso capire i caratteri unicode ma sostituire i caratteri latini tipo 
le lettere accentate non lo capisco. Devi trasformarli in ASCII o altro 
charset particolare? Se è una questione di encoding, con le stringhe 
unicode in python 2.7 puoi fare così per esempio:


>>> u = u'#ð@đß'
>>> u.encode('ascii')
Traceback (most recent call last):
  File "", line 1, in 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf0' in 
position 1: ordinal not in range(128)

>>> u.encode('ascii', 'ignore')
'#@'

Dove quello che non riesce a convertire nel charset richiesto viene 
ignorato. Hai altri modi di trattare gli errori, vedi 
https://docs.python.org/2/howto/unicode.html


Detto questo se non puoi perdere pezzi nella traduzione io farei 
qualcosa del genere:


def sanitize(c):
# TODO: tutti i maneggi con unicode che ti servono
conv = conversion_table.get(c):
if conv:
return  conv
return c

# puoi anche usare map se ti aggrada
notanunicode_string = ''.join([sanitize(c) for c in unicode_string])

Così fai solo un giro per ogni carattere della tua stringa

riccardo
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-28 Per discussione Marco Ippolito
Scusa se non sono stato chiaro.

Il problema è quello della sostituzione di simboli tipo "”", o tipo
"è", con simboli più facilmente manipolabili, esempio "'" e "e'".
Per cui ho messo queste coppie di simbolo-sostituto all'interno di un file json.

Quello che vorrei fare è iterare l'operazione di sostituzione in un
modo che sia più elegante ma anche più efficiente rispetto a quello
che ho fatto:
self.extracted_text_u = self.extracted_text_u.replace("“",
self.textManipulation["to_substitute"][unicode("“", "utf-8")])
self.extracted_text_u = self.extracted_text_u.replace("”",
self.textManipulation["to_substitute"][unicode("”", "utf-8")])
.
self.extracted_text_u = self.extracted_text_u.replace("é",
self.textManipulation["to_substitute"][unicode("é", "utf-8")])
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Domanda facile facile su caso manipolazione unicode

2015-01-28 Per discussione Riccardo Magliocchetti

Ciao Marco,

Il 28/01/2015 18:15, Marco Ippolito ha scritto:

Ciao a tutti,

ho messo in file json alcune possibili sostituzioni di simboli
all'interno di un testo:


Potrebbe essere utile prima di postare le tue soluzioni anche porre il 
problema e un pò di contesto :)


riccardo

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Domanda facile facile su caso manipolazione unicode

2015-01-28 Per discussione Marco Ippolito
Ciao a tutti,

ho messo in file json alcune possibili sostituzioni di simboli
all'interno di un testo:
"to_substitute":{
"“": "'",
"”": "'",
"—": "-",
"’": "'",
"è": "e'",
"é": "e'"
}

facendo così:
self.extracted_text_u = self.extracted_text_u.replace("“",
self.textManipulation["to_substitute"][unicode("“", "utf-8")])
self.extracted_text_u = self.extracted_text_u.replace("”",
self.textManipulation["to_substitute"][unicode("”", "utf-8")])
self.extracted_text_u = self.extracted_text_u.replace("—",
self.textManipulation["to_substitute"][unicode("—", "utf-8")])
self.extracted_text_u = self.extracted_text_u.replace("’",
self.textManipulation["to_substitute"][unicode("’", "utf-8")])
self.extracted_text_u = self.extracted_text_u.replace("è",
self.textManipulation["to_substitute"][unicode("è", "utf-8")])
self.extracted_text_u = self.extracted_text_u.replace("é",
self.textManipulation["to_substitute"][unicode("é", "utf-8")])

sostituisco all'interno di un testo alcuni simboli con il
corrispettivo messo nel file json.

Ma questa soluzione, pur funzionando, non è granchè
per cui ho importato le coppie simbolo-sostituto in un dictionary:
self.to_substitute_dictionary = self.textManipulation["to_substitute"]
{u'\xe9': "e'", u'\xe8': "e'", u'\u2014': '-', u'\u2019': "'",
u'\u201d': "'", u'\u201c': "'"}

for k, v in self.to_substitute_dictionary.iteritems():
print k, v
é e'
è e'
— -
’ '
” '
“ '

Quando invece faccio:
for k, v in self.to_substitute_dictionary.iteritems():
  self.extracted_text_u = self.extracted_text_u.replace(k, v)

  File "extract_sentences.py", line 56, in sentences_extraction_meth
self.extracted_text_u = self.extracted_text_u.replace(k, v)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
16: ordinal not in range(128)

E se faccio:
for k, v in self.to_substitute_dictionary.iteritems():
 v_u = unicode(v, "utf-8")
 self.extracted_text_u = self.extracted_text_u.replace(k, v_u)

   self.extracted_text_u = self.extracted_text_u.replace(k, v_u)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
16: ordinal not in range(128)

>>> for k, v in to_substitute_dictionary.iteritems():
... v_u = unicode(v, "utf-8")
... print "(type(k), type(v_u))= ", (type(k), type(v_u))
...
(type(k), type(v_u))=  (, )
(type(k), type(v_u))=  (, )
(type(k), type(v_u))=  (, )

Deve essere una stupidata.qualche consiglio?

Marco
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python