26 puan yazan shuggie 2025-12-19 | 7 yorum | WhatsApp'ta paylaş

Çalıştığım araştırma enstitüsünde 9. yılımda, HWP belge çalışmalarındaki rahatsızlıkları çözmek için bunu geliştirdim.

Geliştirme geçmişi

  • 2018: Python'a yeni başladığım dönemde, regex tabanlı bir HML/HWPML dönüştürücü denemesi - https://github.com/msjang/md2hml
  • Ocak 2025: hwpfy geliştirme
    • Gerçek zamanlı ortak düzenleme yapılabilen wiki tabanlı, 20'den fazla kişinin haftalık iş raporlarını derleme
    • Wiki → DOCX dışa aktarma → resmî kurum şablonu uygulanmış DOCX'e dönüştürme (hwpfy) → Hangul uygulamasında açıp HWPX olarak kaydetme → kurum içindeki üst birimlerle HWPX olarak paylaşma
  • Aralık 2025: pypandoc-hwpx
    • Artık yeterince deneyim biriktiğini düşündüğüm için, odaklanıp zaman ayırarak geliştirdim.
    Reklam

Geliştirme yöntemi

  1. DOCX'i istediğim biçimde hazırlayıp HWPX olarak kaydettim.
  2. Oluşturulan DOCX ve HWPX'i unzip ederek XML'leri inceledim, gereksiz özellikleri attım ve düzenledim. Ayrıca Word ve Hangul uygulamasında sorunsuz açılıp açılmadığını da kontrol ettim.
  3. md, html, docx, hwpx formatlarını karşılaştıran bir belge hazırladım. - https://github.com/msjang/pypandoc-hwpx/…
  4. Aslında yukarıdaki format_comparison.md belgesine bakıp LLM'e kod yazdırmayı düşünmüştüm, ancak elimde zaten doğru cevap niteliğinde bir HWPX bulunduğunu fark ettim.
  5. Antigravity (Gemini Pro 3) ile defalarca geri bildirim alışverişi yaparak geliştirdim. İstediğim biçim çıkmadığında XML'i ayrıntılı şekilde inceleyip geri bildirim verdim. Format karşılaştırma belgesinden doğrudan söz etmedim, ancak içeriğini kavramış olmam inceleme yaparken çok yardımcı oldu.

Bundan sonra yapılacaklar

Pypandoc içindeki Python bağımlılığını kaldırıp Haskell ile kodlayarak Pandoc'a bir HWPX writer katkısı yapmak istiyorum.

7 yorum

 
roxie 2025-12-25

https://velog.io/@wjsdj2009/Lee Jun-seok'la-başkanlık seçimi-side-proje-yaptığım-hikâye-feat.-Haksikmeokja-tc85y4ok

Böyle bir makale var, bir de siyasetçilerle iletişime geçmeyi düşünseniz...?

 
aer0700 2025-12-20

Sanki önce Hancom'un geliştirmesi gereken bir araçmış gibi geliyor... Tabii Hancom'un yurt dışına açılma niyeti varsa.

 
vpark45 2025-12-19

Haskell katkılarını destekliyorum!

 
shuggie 2025-12-19

Aslında bunu bir iki ay boyunca yavaş yavaş yapmayı planlıyordum, ancak dün https://youtu.be/8cSqPRsM_Yg haberi çıkınca aceleyle yaptım.

 
mse9000 2025-12-19

Harika görünüyor
Ancak affınıza sığınarak, cumhurbaşkanının istediği dönüştürme yönü
hwp* -> .md, docs, pdf plain text ... değil mi? Proje ters yöndeki dönüştürmeyi de destekliyor mu?

 
shuggie 2025-12-19

hwp veya hwpx ayrıştıran kütüphaneler eskiden beri çoktu. Java tabanlı olarak şu kütüphaneler meşhurdur.
https://github.com/neolord0/hwplib
https://github.com/neolord0/hwpxlib

Python ile Hancom win32 API’sini saran bir seçenek de var. HWP otomasyonunun ilk dönem derslerinde görülen araçlardan biri. Arka uçta Windows için HWP uygulamasını kontrol ediyor.
https://pypi.org/project/pyhwpx/

Python ile ayrı bir program olmadan HWPX’i standalone olarak işlemek için de şu var. Okuma veya değiştirme yapılabiliyor, paragraf ya da tablo da eklenebiliyor. https://github.com/airmang/python-hwpx

Ama düşününce çoğumuz artık LLM uygulamalarıyla iletişim kuruyoruz. ChatGPT, Claude, Gemini’ye web tarayıcısından girip sohbet ederek iletişim kuruyoruz. OpenWebUI ile yerel model çalıştırsak da yine web tarayıcısından erişip kullanıyoruz. Akıllı telefondaki ChatGPT uygulamasının ses moduyla yapılan görüşmelerin sonuçları da web tarayıcısında sohbet günlüğü olarak görülebiliyor. Ve LLM çıktısını kopyala düğmesine basıp Not Defteri’ne yapıştırırsanız bunun markdown olduğunu görebilirsiniz.

LLM’den markdown ya da html çıkıyor; bunu doğrudan hwpx’e çevirip kaydeden bir kütüphane var mı? Yok.

GEMINI Pro ile patent fikirleri düşünürken bazen “Bunu belgeye dönüştüreyim mi?” diye soruyor. Düğmeye basınca da patent tarifnamesi taslağı Google Docs belgesi olarak hazırlanmış oluyor. Sonuçta sadece markdown’u dönüştürüp belgeye çevirmiş, ama oldukça iyi görünüyor.

Güney Kore, isteyelim ya da istemeyelim, HWP’yi iş yürütme ve iletişimin standardı haline getirdi. Ve bizim iş akışımızın (workflow) içinde HWP üretimi bir bakıma doğal bir ihtiyaç.

ChatGPT ses moduyla bir toplantının tamamını dinlettikten sonra, “Özetleyip toplantı tutanağına dönüştür ve katılımcılara e-postayla gönder”, “Beyin fırtınasında çıkanları patent tarifnamesi taslağına dönüştür” gibi isteklerde bulununca, o çıktının HWP olması gerektiği düşüncesindeyim.

Şimdiye kadar insanlar LLM sonucunu web tarayıcısından Hancom uygulamasına kopyalayıp biçimi düzenliyor, karakter genişliği, harf aralığı gibi ayrıntıları tek tek ayarlayıp sayfa düzenini elle yapıyordu.

GEMINI’nin Google Docs oluşturduğu bir çağda, Güney Kore’nin vergiyle finanse edilen LLM modelleri ve servisleri de HWPX’i insan müdahalesi olmadan üretebilmeli değil mi?

Benim iş otomasyonu için böyle bir ihtiyacım vardı ve bu yüzden bunu yaptım.

 
shuggie 2025-12-19

Ek not.

HWP’nin kendisini parse edip metne dönüştürmek aslında kolaydır. Google, Korece belgeleri indekslemek için bunu zaten 2000’lerden beri geliştirmiş ve kendi içinde uyguluyordu; yukarıda bahsedilen açık kaynaklar da bunun için fazlasıyla yeterlidir.

HTML’deki h1~h6 ile eşleşen ana hat düzeyi 1~6 stilleri uygulanırsa, belgenin hiyerarşisi de korunarak belge üretilebilir.

Ancak HWP’de editörde çok fazla özellik var ve kullanıcılar da kâğıt çıktısının iyi görünmesine odaklandığı için, biçim uygularken ana hat düzeyi (outline level) kullanmaya pek çaba göstermediler.

Bunu en çarpıcı biçimde gösteren şey şu: bir araştırma kurumunda 300 sayfalık bir HWP belgesi PDF olarak kaydedildiğinde, yer imi bilgisi hiç oluşmuyor. Bu yüzden elektronik belge olmasına rağmen kaydırarak aramak gerekiyor. Bu son derece rahatsız edici. Üstelik büyük boyutlu PDF’lerde, bilgisayar ne kadar iyi olursa olsun hızlıca göz gezdirmek için scroll yapınca ciddi takılmalar yaşanıyor.

Kurum değerlendirmesi yaparken bunu bu şekilde yapmak mümkün olmadığından, değerlendirici sayısı kadar yüzlerce sayfalık raporlar yığınla basılıp üst üste konuyor ve kurum değerlendirmesi öyle yapılıyor. Değerlendirme biter bitmez de atılıyor.

Yurt dışı raporlarında ise 400 sayfalık bir PDF raporu aldığınızda, yalnızca içindekiler bölümü bile 16 sayfa olabiliyor ve içindekilere bağlantılar eklenmiş oluyor; tıklayınca ilgili sayfaya gidiyorsunuz. Ana hat görünümünü açtığınızda da yer imleri çok ayrıntılı biçimde düzenlenmiş oluyor. Bu, araç içinde kullanıcı özellikle farkında olmasa bile bilgilerin kolayca girilip otomatik üretildiği anlamına gelir.

Her neyse, tekrar konuya dönersek, şu anda büyük çoğunluğun Aşağıa Hangeul kullanma alışkanlığıyla oluşturulmuş HWP’lerden metin elde edilebiliyor, ancak belgenin hiyerarşi bilgisini elde etmek zor.

Ama insan müdahalesi olmadan LLM ile HWP üretilirse, bu tür noktalar dikkate alınarak otomatik olarak oluşturulabilir.