2009-04-24 22 views
6

Ho un programma che legge un po 'di testo e lo analizza. Il testo può essere in qualsiasi lingua, ma ho bisogno di testare giapponese e cinese specificamente per analizzarli in un modo diverso.Test per i caratteri giapponesi/cinesi in una stringa

Ho letto che posso testare ogni carattere sul suo numero unicode per scoprire se è nell'intervallo di caratteri CJK. Questo è utile, tuttavia vorrei separarli se possibile per elaborare il testo con dizionari diversi. C'è un modo per testare se un personaggio è giapponese o cinese?

+1

Non si conosce il codice di set, o devi indovinare anche questo? –

+0

Se non conosci il set di codici, potrebbe davvero semplificarti la vita piuttosto che avere tutto in unicode – Elijah

+0

Mi arrendo convertendo tutto in unicode comunque per l'analisi (sono forzato in realtà) .Sento in grado di rilevare il codeset prima della conversione, questa domanda è maggiore se il codeset è già unicode – landyman

risposta

6

Non sarà possibile testare un singolo personaggio per dire con certezza che è giapponese o cinese a causa del modo in cui i punti del codice unihan sono implementati nello standard Unicode. Fondamentalmente, ogni personaggio cinese è un potenziale personaggio giapponese. Tuttavia, il contrario non è vero. Inoltre, ci sono una serie di convenzioni che potrebbero essere utilizzati per verificare se un blocco di testo è in una lingua o l'altro.

  1. Semplificazioni: se il personaggio che si sta testando è una PRC simplification come 门 è disponibile solo nella terra principale cinese.
  2. Kana - se il personaggio è uno dei tanti caratteri Japanese kana come あ い う え お, il blocco di testo con cui si sta lavorando è decisamente giapponese.

Il problema si pone con il semplice numero di caratteri e parole che sono in comune. Tuttavia, se avessi bisogno di una soluzione rapida e sporca a questo problema, controllerei i miei interi blocchi di testo per kana - se il testo contiene kana, allora so che è giapponese. Se dovessi distinguere anche il coreano, testerei per Hangul. Inoltre, se è necessario distinguere il tipo di cinese, testare i tipi di semplificazione sarebbe l'approccio migliore.

+0

Grazie. Sapevo che alcuni dei personaggi erano condivisi, ma non mi ero reso conto che i simboli kana non facevano parte del cinese. Sono stato in grado di fare un test per loro che funziona finora. Vedremo quanto è accurato dopo ulteriori test. Grazie ancora. – landyman

+0

Il cinese semplificato non si trova generalmente nei Kanji giapponesi. Per distinguere tra i due, è possibile analizzare una stringa per la presenza di Kana (Hiragana e Katakana), che è specifica per il giapponese. – Mikaveli

1

Probabilmente non puoi farlo in modo affidabile. Il giapponese usa molti degli stessi caratteri del cinese. Penso che il meglio che puoi fare sia guardare un blocco di testo. Se vedi caratteri univoci in giapponese, puoi supporre che l'intero blocco sia giapponese. Se no, allora è probabilmente cinese.

Tuttavia, sto solo imparando il cinese, quindi non sono un esperto.

2

Il processo di sviluppo Unicode incluso il Han Unificazione. Ciò è dovuto al fatto che molti caratteri giapponesi derivano o sono uguali a caratteri cinesi; allo stesso modo con il coreano. Ci sono alcuni personaggi (katakana e hiragana - vedi chapter 12 della v5.1.0 standard Unicode) comunemente utilizzati in giapponese che possa indicare che il testo era giapponese piuttosto che cinese, ma credo che sarebbe stato un test statistico, piuttosto che definitiva.

Controlla il libro O'Reilly su CJKV Information Processing (CJKV è l'abbreviazione di cinese, giapponese, coreano, vietnamita, ho il predecessore CJK in agguato da qualche parte). C'è anche il libro O'Reilly su Unicode Explained che potrebbe essere di aiuto, anche se probabilmente non per questa domanda (non ricordo una discussione su come identificare il testo giapponese e cinese).

+0

Grazie. Sarò sicuro di controllare i libri. Sono d'accordo che il test solo per il giapponese (hiragana e katakana) non è definitivo, ma funzionerà per ora. – landyman

0

test per i caratteri nelle gamme katakana o hiragana dovrebbe essere un metodo molto affidabile per determinare se il testo sia o meno giapponese, soprattutto se si ha a che fare con testo "normale" generato dall'utente. se stai guardando documenti legali o altre tariffe ufficiali potrebbe essere leggermente più difficile, dato che ci sarà una preponderanza molto maggiore di caratteri cinesi complessi, ma dovrebbe comunque essere abbastanza affidabile.

0

Una soluzione è controllare la codifica prima che venga convertita in Unicode.

0

Ci sono molti caratteri che sono usati (comunemente) solo in giapponese o usati solo in cinese.

Giappone e Cina hanno semplificato entrambi molti personaggi, ma spesso in modi diversi. Puoi controllare i caratteri giapponesi di Shinjitai e del cinese semplificato. Ce ne sono molti altri rispetto al primo. Se non c'è nessuno dei due, probabilmente hai il cinese tradizionale.

Naturalmente se hai a che fare con il testo Unicode si possono trovare personaggi rari occasionali o lingue miste che potrebbe buttare fuori un'euristica quindi è meglio andare con il conteggio dei tipi di caratteri per dare un giudizio.

Un buon modo per scoprire quali caratteri sono comuni in una lingua e non negli altri è confrontare le codifiche legacy l'una con l'altra. È possibile trovare facilmente le mappature di ciascuna su Unicode su Internet.

ho usato per avere un po 'di codice che ho scritto, che ha fatto una ricerca binaria per codepoint ed era estremamente veloce anche in JavaScript - forse ho perso nei miei viaggi però (-:

Problemi correlati