Dado un bloque de texto que se sabe chino y está codificado en UTF-8, ¿hay alguna manera de determinar si es simplificado o tradicional?Reconociendo texto como chino simplificado frente a chino tradicional
Respuesta
No sé si esto funcionará, pero trataría de usar iconv para ver si se traducirá correctamente entre los conjuntos de caracteres, comparando los resultados de la misma conversión con // TRANSLIT y // IGNORE. Si los dos resultados coinciden, entonces la conversión del juego de caracteres no ha encontrado ningún personaje que no se pueda traducir, por lo que debe tener una coincidencia.
$test1 = iconv("UTF-8", "big5//TRANSLIT", $text);
$test2 = iconv("UTF-8", "big5//IGNORE", $text);
if ($test1 == $test2) {
echo 'traditional';
} else {
$test3 = iconv("UTF-8", "gb2312//TRANSLIT", $text);
$test4 = iconv("UTF-8", "gb2312//IGNORE", $text);
if ($test3 == $test4) {
echo 'simplified';
} else {
echo 'Failed to match either traditional or simplified';
}
}
Desde big5
y gb2312
omitir bastantes variantes de uso común que están presentes en Unicode, el código se basan en coincidencia exacta entre los modos translit
y ignore
fallaría en mucho de los casos de uso normales: que fracasaría para identificar 説話
como chino tradicional a pesar de 説
siendo una variante común en Hong Kong para 說
que se usa en big5
.
Una solución sencilla es hacerlo de una manera difusa:
$test1 = iconv("UTF-8", "big5//IGNORE", $text);
$test2 = iconv("UTF-8", "gb2312//IGNORE", $text);
$len1 = mb_strlen($test1);
$len2 = mb_strlen($test2);
$len0 = mb_strlen($text) * 0.8; // threshold
if ($len1 > $len2 && $len1 > $len0) {
return 'Likely Traditional';
}
if ($len2 > $len1 && $len2 > $len0) {
return 'Likely Simplified';
}
return 'Could not identify';
- 1. ¿Códigos de idioma para chino simplificado y chino tradicional?
- 2. chino simplificado y tradicional vs regiones
- 3. Permitir entrada de chino simplificado
- 4. Cómo filtrar chino (SOLO chino)
- 5. Truncar texto en chino
- 6. Códigos de idioma chino
- 7. ¿Debo mi aplicación de Android por defecto simplificar o chino tradicional?
- 8. Captcha para japonés y chino?
- 9. Detecta si el carácter se simplifica o el carácter chino tradicional
- 10. Reconocimiento de escritura a mano chino
- 11. Cocoa/iPhone: ¿Cómo creo una localización de mi aplicación en chino simplificado?
- 12. cómo usar imagick annotateImage para texto en chino?
- 13. Evento JQuery/DOM para escribir chino (ibus)?
- 14. Cómo convertir una cadena de pinyin a chino en C#
- 15. OCR de código abierto para chino
- 16. ¿Cómo implemento la búsqueda de texto completo en chino en PostgreSQL?
- 17. NuevoSQL frente a la optimización/fragmentación tradicional
- 18. ¿Cómo validar el nombre chino (unicode) y el inglés?
- 19. Cualquier fuente para generar pdf que manejará chino, cirílico ...?
- 20. ¿Cómo hacer un platillo chino en HTML y CSS
- 21. cómo imprimir chino palabra en mi código .. usando pitón
- 22. Cómo extraer un trazo de un carácter chino
- 23. cómo determinar si un carácter es un carácter chino
- 24. ¿Programaticamente determina el número de golpes en un personaje chino?
- 25. RegEx para todas las letras (incluidos chino, griego, etc.)
- 26. Buscar todo el texto chino en una cadena usando Python y Regex
- 27. EntityFramework actualiza o inserta texto en chino o no en inglés
- 28. cómo usar el carácter chino y japonés como una cadena en java?
- 29. Rendimiento del bucle tradicional frente a iterador/foreach en Java
- 30. ¿Reconoce que un personaje es chino y obtiene la fonética china "pinyin" a partir de caracteres simplificados?
Interesante, gracias! Parece que definitivamente está funcionando, aunque una gran cantidad de texto está regresando como "ninguno" (ejemplo: "聲音 鳥"))))))))))) "). ¿Algunas ideas? También tuve que hacer '@ iconv' para las 2 llamadas' TRANSLIT' para suprimir errores. – philfreo
Tiene algunos caracteres z-variantes que no están en GB-2312 básico, pero están en GB-18030. Pruebe ''gb18030'' en lugar de''gb2312''. O si su entrada está orientada a Windows, puede preferir '' cp936'' (y ''cp950'' en lugar de' 'big5''). – bobince
Cambié en 'gb18030' y todos mis datos de prueba fueron reconocidos. (Aunque no estoy seguro de la precisión). ¡Gracias! – philfreo