Gukhanmun: Eine Rust/JavaScript-Bibliothek, die gemischte Hanja-Hangul-Schrift in reines Hangul umwandelt
(gukhanmun.org)Hallo. Ich habe Gukhanmun veröffentlicht, eine Bibliothek, die gemischte Hanja-Hangul-Schrift in reines Hangul umwandelt. Ich hoffe, sie ist nützlich bei der Verarbeitung alter Literatur, von Materialien in gemischter Hanja-Hangul-Schrift sowie von Texten wie alten Zeitungen oder amtlichen Dokumenten.
Auf den ersten Blick könnte man meinen, es reiche aus, für jedes Zeichen einzeln in einer Lesungstabelle nachzuschlagen. In der Praxis zeigt sich jedoch schnell, dass sich auf diese Weise kaum brauchbare Ergebnisse erzielen lassen. Selbst bei demselben Hanja-Zeichen greift am Wortanfang die Initiallaut-Regel, und wenn mehrere Zeichen zusammen ein Wort bilden, kann die Aussprache von der zeichenweisen Lesung abweichen. 「庫間」 ist nicht „gogan“, sondern „gotgan“, 「標識」 nicht „pyosik“, sondern „pyoji“, und bei dem gemischten Ausdruck 「汽車gil」 wird ein Fugenkonsonant eingefügt, sodass „gichatgil“ entsteht. Auch Hanja-Zahlen sind knifflig: 「二〇一六年」 ist korrekt als „2016-nyeon“ zu lesen, aber 「十一月」 wird zu „11-wol“ und 「一千二百三十四」 zu „1234“. Man muss also selbst innerhalb derselben Zahlschreibweise erkennen, welches System jeweils gemeint ist.
Früher habe ich für einen ähnlichen Zweck die Haskell-Bibliothek Seonbi entwickelt, diesmal habe ich den Fokus auf die Hanja-Konvertierung gelegt und das Projekt in Rust neu geschrieben. Das Standard Korean Language Dictionary ist eingebettet, sodass keine separate Wörterbuchinstallation nötig ist, und die Bibliothek verarbeitet normalen Text ebenso wie HTML und Markdown. Als Ausgabe kann entweder nur Hangul verbleiben, Hanja wie in hanja (漢字) in Klammern beigefügt werden oder HTML-Ruby-Markup ausgegeben werden. Außerdem sind Presets für süd- und nordkoreanische Rechtschreibung sowie eine Option enthalten, bei Homonymen Hanja beizufügen.
Besonders viel Augenmerk habe ich auf den Segmentierungsalgorithmus gelegt. Ein Verfahren, das von links nach rechts jeweils den längsten Eintrag auswählt, zerlegt 「資本論理」 in 「資本論」+「理」 und liest es als „jabonroni“. Gukhanmun verwendet dynamische Programmierung auf einem Lattice (Viterbi-Algorithmus) und findet die Aufteilung 「資本」+「論理」, also „jabonnonri“.
Einer der Gründe, das Projekt von Anfang an in Rust zu schreiben, war die einfache Wiederverwendbarkeit in mehreren Sprachen. Das CLI gibt es in den GitHub Releases, das Rust-Crate gukhanmun auf crates.io, und für JavaScript stehen zwei Varianten bereit: WebAssembly (@gukhanmun/wasm) und ein natives Node.js-Addon (@gukhanmun/napi), beide auf npm und JSR. Das Kern-Crate gukhanmun-core unterstützt auch no_std- + alloc-Umgebungen und kann daher auch in Embedded-Systemen eingesetzt werden.
- Dokumentation und Website: https://gukhanmun.org/ko-KR/
- Playground: https://gukhanmun.org/ko-KR/playground
- GitHub-Repository: https://github.com/dahlia/gukhanmun
Noch keine Kommentare.