9 pontos por hongminhee 13 시간 전 | Ainda não há comentários. | Compartilhar no WhatsApp

Olá. Estou lançando o Gukhanmun, uma biblioteca que converte textos mistos sino-coreanos para hangul puro. Espero que seja útil ao lidar com textos como documentos antigos, materiais em escrita mista sino-coreana, jornais antigos ou documentos oficiais.

À primeira vista, pode parecer que basta procurar uma tabela de correspondência de leitura para cada caractere, mas, na prática, ao implementar isso, logo fica claro que esse método dificilmente produz resultados corretos. Mesmo com o mesmo hanja, a regra do som inicial pode se aplicar no começo da palavra, e quando vários caracteres se juntam para formar uma palavra, a pronúncia pode diferir da leitura de cada caractere isoladamente. 「庫間」 não é “gogan”, mas “gotgan”; 「標識」 não é “pyosik”, mas “pyoji”; e no caso misto de hanja e hangul em 「汽車gil」, entra o saisiot, resultando em “gichatgil”. Os numerais em hanja também são complicados: 「二〇一六年」 corresponde a “2016nyeon”, mas 「十一月」 é “11wol” e 「一千二百三十四」 é “1234”, então até dentro da mesma notação numérica é preciso determinar qual forma está sendo usada.

No passado, criei a biblioteca Haskell Seonbi com um objetivo parecido, mas desta vez reescrevi tudo em Rust com foco específico na conversão de hanja. Ela incorpora o Dicionário Padrão da Língua Coreana, então pode ser usada sem instalar um dicionário separado, e processa texto comum, HTML e Markdown. A saída pode manter apenas hangul, adicionar hanja entre parênteses como em hanja(漢字) ou exportar em marcação ruby de HTML. Também inclui presets de ortografia da Coreia do Sul e da Coreia do Norte, além de uma opção para anexar hanja quando houver homônimos.

A parte em que mais me concentrei foi o algoritmo de segmentação. Um método que escolhe sempre o item mais longo da esquerda para a direita corta 「資本論理」 em 「資本論」+「理」 e lê como “jabonroni”. O Gukhanmun executa programação dinâmica (algoritmo de Viterbi) sobre um lattice para dividir em 「資本」+「論理」 e encontrar “jabonnolli”.

Um dos motivos para tê-lo feito em Rust desde o início foi facilitar o uso em várias linguagens. O CLI pode ser baixado em GitHub Releases, o crate Rust gukhanmun está no crates.io, e no lado de JavaScript há duas opções, WebAssembly (@gukhanmun/wasm) e addon nativo para Node.js (@gukhanmun/napi), ambas publicadas no npm e no JSR. O crate principal gukhanmun-core também oferece suporte a ambientes no_std + alloc, então pode ser usado até em sistemas embarcados.

Ainda não há comentários.

Ainda não há comentários.