9 points par hongminhee 13 시간 전 | Aucun commentaire pour le moment. | Partager sur WhatsApp

Bonjour. J’ai publié Gukhanmun, une bibliothèque qui convertit les textes mixtes hanja-hangeul en hangeul seul. J’espère qu’elle pourra être utile pour traiter des textes comme d’anciens documents, des matériaux en écriture mixte coréenne-chinoise, de vieux journaux ou des documents administratifs.

À première vue, on pourrait penser qu’il suffit de chercher une table de correspondance de lecture caractère par caractère, mais dès qu’on essaie de l’implémenter, on se rend vite compte qu’il est difficile d’obtenir des résultats corrects avec cette méthode. Même pour un même hanja, la règle du son initial s’applique en tête de mot, et lorsque plusieurs caractères forment un seul mot, la prononciation peut différer de la lecture caractère par caractère. 「庫間」 ne se lit pas “gogan” mais “gotgan”, 「標識」 ne se lit pas “pyosik” mais “pyoji”, et dans le mot mixte hanja-hangeul 「汽車-gil」, un sai-siot s’ajoute pour donner “gichatgil”. Les nombres en hanja sont eux aussi délicats : 「二〇一六年」 correspond bien à “2016-nyeon”, mais 「十一月」 devient “11-wol” et 「一千二百三十四」 devient “1234”, si bien qu’il faut déterminer, au sein d’une même notation numérique, de quel mode d’écriture il s’agit.

J’avais déjà créé auparavant la bibliothèque Haskell Seonbi dans un but similaire, mais cette fois j’ai tout réécrit en Rust, en me concentrant sur la conversion des hanja. Le dictionnaire standard coréen est intégré, ce qui permet de l’utiliser sans installer de dictionnaire séparé, et la bibliothèque traite le texte brut, le HTML et le Markdown. En sortie, elle peut soit ne laisser que le hangeul, soit ajouter les hanja entre parenthèses comme dans hangeul(漢字), soit exporter en balisage ruby HTML. J’y ai aussi inclus des préréglages d’orthographe pour la Corée du Sud et la Corée du Nord, ainsi qu’une option pour ajouter les hanja en cas d’homonymie.

La partie à laquelle j’ai accordé le plus d’attention est l’algorithme de segmentation. Une méthode consistant à choisir l’entrée la plus longue de gauche à droite découpe 「資本論理」 en 「資本論」+「理」 et le lit “jabonroni”. Gukhanmun exécute une programmation dynamique (algorithme de Viterbi) sur un lattice pour le segmenter en 「資本」+「論理」 et trouver “jabonnonri”.

L’une des raisons pour lesquelles je l’ai développé en Rust dès le départ était de le rendre facile à réutiliser dans plusieurs langages. Le CLI est disponible via GitHub Releases, la crate Rust gukhanmun sur crates.io, et côté JavaScript, j’ai publié deux variantes sur npm et JSR : WebAssembly(@gukhanmun/wasm) et un addon natif Node.js(@gukhanmun/napi). La crate centrale gukhanmun-core prend aussi en charge les environnements no_std + alloc, ce qui permet de l’utiliser en embarqué.

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.