2013-04-16 10 views
5

Ho una stringa Unicode in Python. Sto cercando un modo per determinare se ci sono caratteri cinesi/giapponesi nella stringa. Se possibile, sarà meglio essere in grado di localizzare quei personaggi.C'è un modo per sapere se una stringa Unicode contiene un carattere cinese/giapponese in Python?

Sembra che questo sia un po 'diverso da un problema di rilevamento della lingua. La mia stringa può essere un misto di testi in inglese e cinese.

Il mio codice dispone di accesso a Internet.

+0

risposte possibili: http://stackoverflow.com/questions/6432926/how-can-i-relate-unicode-blocks-to-languages-scripts http://stackoverflow.com/questions/4545977/python-can -i-detect-unicode-string-language-code? rq = 1 – Patashu

risposta

2

È possibile utilizzare questo regex [\u2E80-\u9FFF] in modo che corrisponda ai caratteri CJK.

+3

Questo è quasi, ma non completamente corretto. Secondo [Scripts.txt] (http://www.unicode.org/Public/UNIDATA/Scripts.txt), il database ufficiale Unicode, i caratteri Han coprono un ** sottoinsieme ** di '2E80' a' 9FCC' , insieme a 'F900' a' FAD9' e '20000' a' 2FA1D'. Ma il sottoinsieme è piuttosto complesso ... – nneonneo

4

È possibile utilizzare la proprietà Unicode Script per determinare lo script con cui sono comunemente associati.

Il modulo Python unicodedata, purtroppo, non ha questa proprietà. Tuttavia, un numero di moduli di terze parti, ad esempio unicodedata2 e unicodescript, dispone di queste informazioni. Puoi interrogarli e verificare se hai caratteri nello script Han, che corrisponde a cinese (e Kanji e Hanja).

+0

Grazie! Qualcuno dei moduli di terze parti è imballato per Ubuntu o altre distribuzioni? Non ho visto pacchetti per unicodedata2 o unicodescript. Ci sono errori su Python per questa interruzione? – nealmcb

2

Ho provato il modulo unicodedata di Python menzionato da nneonneo nella sua risposta e penso che funzioni probabilmente.

>>> import unicodedata 
>>> unicodedata.name('你') 
'CJK UNIFIED IDEOGRAPH-4F60' 
>>> unicodedata.name('桜') 
'CJK UNIFIED IDEOGRAPH-685C' 
>>> unicodedata.name('あ') 
'HIRAGANA LETTER A' 
>>> unicodedata.name('ア') 
'KATAKANA LETTER A' 
>>> unicodedata.name('a') 
'LATIN SMALL LETTER A' 

Come si vede, sia i caratteri cinesi e giapponesi hanno adottato caratteri cinesi sono suddivisi in categorie per CJK UNIFIED IDEOGRAPH e hiragana e katakana correttamente riconosciuti. Non ho testato i caratteri coreani, ma penso che dovrebbero cadere nello CJK UNIFIED IDEOGRAPH.

Inoltre, se vi interessa soltanto se si tratta di un CJK carattere/lettera o no, sembra che questo è più semplice:

>>> import unicodedata 
>>> unicodedata.category('你') 
'Lo' 
>>> unicodedata.category('桜') 
'Lo' 
>>> unicodedata.category('あ') 
'Lo' 
>>> unicodedata.category('ア') 
'Lo' 
>>> unicodedata.category('a') 
'Ll' 
>>> unicodedata.category('A') 
'Lu' 

Secondo here, Ll è minuscolo, Lu è maiuscola e Lo e altre.

+0

I caratteri Hangul coreani sono generalmente identificati come tali. La parte "unificata" raccoglie glifi che sono (generalmente) condivisi tra questi script, ma lo script Hangul è esclusivamente coreano. È meglio comunque esaminare la proprietà Script anziché il nome del blocco o la categoria (ci sono molti caratteri 'Lo' che sono simboli matematici, decorazioni grafiche, ecc. O semplicemente non in uno degli script che stai cercando. L'ebraico, gli script Indic ecc. Ecc. Non hanno la distinzione tra maiuscole e minuscole.) – tripleee

+0

@ triple C'è un modo semplice per fare ciò che hai suggerito in Python? – Jellyflower

+0

Vedere la risposta di @ nneonneo. – tripleee

Problemi correlati