9 puntos por hongminhee 13 시간 전 | Aún no hay comentarios. | Compartir por WhatsApp

Hola. He publicado Gukhanmun, una biblioteca que convierte texto mixto chino-coreano a texto solo en hangul. Espero que sea útil al procesar textos como documentos antiguos, materiales en escritura mixta chino-coreana, periódicos viejos o documentos oficiales.

A primera vista, podría parecer que basta con buscar una tabla de correspondencia de lecturas carácter por carácter, pero al implementarlo de verdad uno se da cuenta rápidamente de que con ese método es difícil obtener resultados correctos. Incluso con el mismo hanja, al inicio de una palabra se aplica la regla de sonido inicial, y cuando varios caracteres forman una sola palabra, puede surgir una pronunciación distinta de la lectura de cada carácter por separado. 「庫間」 no es “gogan”, sino “gotgan”; 「標識」 no es “pyosik”, sino “pyoji”; y en 「汽車gil」, donde se mezclan hanja y hangul, se añade una consonante de enlace y queda “gichatgil”. Los números en hanja también son complicados: 「二〇一六年」 corresponde a “2016nyeon”, pero 「十一月」 es “11wol” y 「一千二百三十四」 es “1234”, así que incluso dentro de la misma notación numérica hay que determinar qué sistema se está usando.

Antes había hecho la biblioteca en Haskell Seonbi con un propósito parecido, pero esta vez la reescribí en Rust enfocándome en la conversión de hanja. Incluye de forma integrada el Diccionario Estándar del Coreano, así que puede usarse sin instalar diccionarios adicionales, y procesa texto común, HTML y Markdown. La salida puede dejar solo hangul, añadir la forma en hanja entre paréntesis como en hanja(漢字), o exportarse como marcado ruby de HTML. También incluye presets ortográficos de Corea del Sur y Corea del Norte, además de una opción para anotar el hanja cuando hay homónimos.

La parte a la que más atención presté fue el algoritmo de segmentación. Si se usa un método que elige el elemento más largo de izquierda a derecha, 「資本論理」 se divide como 「資本論」+「理」 y se lee “jabonroni”. Gukhanmun ejecuta programación dinámica sobre un lattice (algoritmo de Viterbi) y lo divide como 「資本」+「論理」 para encontrar “jabonnolli”.

Una de las razones para hacerlo en Rust desde el principio fue facilitar su reutilización desde varios lenguajes. El CLI puede descargarse desde GitHub Releases, el crate de Rust gukhanmun está en crates.io, y del lado de JavaScript publiqué dos variantes en npm y JSR: WebAssembly(@gukhanmun/wasm) y un addon nativo para Node.js(@gukhanmun/napi). El crate principal gukhanmun-core también soporta entornos no_std + alloc, por lo que puede usarse incluso en sistemas embebidos.

Aún no hay comentarios.

Aún no hay comentarios.