Mientras que Corea no utiliza mucho sinogrammes [漢字/Kanji] más, que todavía pop-up veces. Algunos sinogramas japoneses son exclusivamente japoneses, como 竜, pero muchos son idénticos a los chinos simplificados o tradicionales. Entonces estás atascado. Por lo tanto, debe ver una oración completa si tiene algunos caracteres "Han". Si tiene algún hiragana/katakana + kanji, la probabilidad es muy alta, es japonés. Del mismo modo, un grupo de hangul sílabas y un par de sinogramas le dirá que la oración está en coreano.
Luego, si se trata de todos los caracteres Han, es decir, chinos, puede ver si algunos de los caracteres están simplificados: kZVariant denota un carácter chino simplificado. Ah, y kSpecializedSemanticVariant se usa muy a menudo para los caracteres simplificados japoneses.内 y 內 pueden parecer lo mismo para usted, pero el primero es japonés, el segundo chino tradicional y coreano (el coreano usa el chino tradicional como estándar).
Tengo un código en alguna parte que devuelve, para un punto de código, el nombre del script. Eso podría ayudar. Pasas por una oración y ves lo que queda al final. Pondré el código en alguna parte.
EDIT: el código
http://pastebin.com/e276zn6y
En respuesta al comentario a continuación:
Esta función anterior construido en base a datos proporcionados por Unicode.org ... Aunque no siendo un experto per se, contribuí bastante a la base de datos de Unihan, y por casualidad hablo CJK. Sí, todo 3. Tengo un código que aprovecha las propiedades kXXX
en la base de datos Unihan, pero A/I no sabía que debíamos escribir código para el OP, y B/requeriría una logística que podría ir más allá de lo que el OP está listo para implementar. Mi consejo es válido. Con la función anterior, repite una oración completa. Si todos los puntos de código son "Han", (o "Han" + "Latin"), es probable que sea chino. Si, por otro lado, el resultado es una mezcla de "Han" + "Hangul" (+ "latino" posiblemente), no se puede equivocar con el coreano. Del mismo modo, una mezcla de "Han" y "Katakana"/"Hiragana" tiene japonés.
A TEST RÁPIDO
algo de código para ser utilizado con la función he vinculado a antes.
function guessLanguage(x) {
var results={};
var s='';
var i,j=x.length;
for(i=0;i<j;i++) {
s=scriptName(x.substr(i,1));
if(results.hasOwnProperty(s)) {
results[s]+=1;
} else {
results[s]=1;
}
}
console.log(results);
mostCount=0;
mostName='';
for(x in results) {
if (results.hasOwnProperty(x)) {
if(results[x]>mostCount) {
mostCount=results[x];
mostName=x;
}
}
}
return mostName;
}
Algunas pruebas:
r=guessLanguage("外人だけど、日本語をペラペラしゃべるよ!");
Object
Common: 2
Han: 5
Hiragana: 9
Katakana: 4
__proto__: Object
"Hiragana"
El objeto r
contiene el número de ocurrencias de cada secuencia de comandos. Hiragana es el más frecuente, e Hiragana + Katakana -> 2/3 de la oración.
r=guessLanguage("我唔知道,佢講乜話.")
Object
Common: 2
Han: 8
__proto__: Object
"Han"
Un caso obvio de chino (cantonés en este caso).
r=guessLanguage("中國이 韓國보다 훨씬 크지만, 꼭 아름다운 나라가 아니다...");
Object
Common: 11
Han: 4
Hangul: 19
__proto__: Object
"Hangul"
Algunos caracteres Han, y un montón de Hangul. Una frase coreana, sin dudas.
¿Cómo determinará si un personaje en particular es chino o japonés? Comparten muchos personajes. – Daenyth
Si los tres idiomas que no aparecen tienen lugares dentro de Unicode, entonces simplificaré mi pregunta para simplemente marcar todo, desde CJK hasta '\ language [cn] {*}'. – Village
Es más complicado que eso. Los 3 idiomas comparten puntos de carácter (el código numérico), pero no necesariamente el glifo (la representación gráfica del personaje). Eche un vistazo a las preguntas frecuentes de Unicode CJK http://unicode.org/faq/han_cjk.htm – mirod