9 puan yazan hongminhee 13 시간 전 | Henüz yorum yok. | WhatsApp'ta paylaş

Merhaba. Karma yazıdaki Çince karakterleri yalnızca Hangul'a dönüştüren Gukhanmun kütüphanesini yayımladım. Eski metinler, karma yazılı kaynaklar, eski gazeteler veya resmî belgeler gibi metinleri işlerken faydalı olmasını umuyorum.

İlk bakışta her karakter için okunuş eşleştirme tablosuna bakmak yeterliymiş gibi görünebilir, ancak gerçekten uygulamaya koyunca bu yöntemle doğru sonuç üretmenin zor olduğu hemen anlaşılıyor. Aynı Çince karakter bile kelimenin başında olduğunda baş ses kuralı uygulanıyor, birden çok karakter birleşip tek bir kelime oluşturduğunda da karakter bazındaki okunuştan farklı bir telaffuz ortaya çıkabiliyor. 「庫間」 “gogan” değil “gotgan”, 「標識」 “pyosik” değil “pyoji” ve Çince karakterlerle Hangul'un karıştığı 「汽車gil」 ise araya eklenen sesle “gichatgil” oluyor. Çince rakamlar da zorludur; 「二〇一六年」 için “2016-nyeon” doğruyken 「十一月」 “11-wol”, 「一千二百三十四」 ise “1234” olur; yani aynı sayı gösterimi içinde bile hangi biçimin kullanıldığını ayırt etmek gerekir.

Daha önce benzer amaçla Seonbi adlı bir Haskell kütüphanesi yapmıştım; bu kez kapsamı Çince karakter dönüşümüne odaklayıp Rust ile yeniden yazdım. Standart Korece sözlüğünü gömülü olarak içerdiği için ek sözlük kurulumu gerektirmeden kullanılabiliyor ve düz metin, HTML ile Markdown işliyor. Çıktı yalnızca Hangul bırakılacak şekilde üretilebildiği gibi, Hanja (漢字) örneğinde olduğu gibi parantez içinde birlikte gösterilebilir veya HTML ruby markup olarak dışa aktarılabilir. Güney Kore ve Kuzey Kore yazım kuralları için hazır ayarlar ile eşsesli sözcükler olduğunda Çince karakterleri birlikte gösterme seçeneğini de ekledim.

En çok özen gösterdiğim kısım bölütleme algoritması oldu. Soldan sağa en uzun öğeyi seçen yaklaşım, 「資本論理」 ifadesini 「資本論」+「理」 diye kesip “jabonroni” şeklinde okur. Gukhanmun ise bir lattice üzerinde dinamik programlama (Viterbi algoritması) çalıştırarak bunu 「資本」+「論理」 diye ayırır ve “jabonnolli” sonucunu bulur.

Baştan itibaren Rust ile yazmamın nedenlerinden biri de farklı dillerde kolayca kullanılabilmesini sağlamaktı. CLI’ı GitHub Releases sayfasından, Rust crate’i gukhanmun crates.io üzerinden alabilirsiniz. JavaScript tarafında ise WebAssembly(@gukhanmun/wasm) ve Node.js native addon(@gukhanmun/napi) olmak üzere iki sürümü npm ve JSR’a yükledim. Çekirdek crate olan gukhanmun-core, no_std + alloc ortamını da desteklediği için embedded sistemlerde de kullanılabilir.

Henüz yorum yok.

Henüz yorum yok.