DEV Community

Cover image for Projek Jawi Converter: Belajar Golang Sambil Mendigitalkan Warisan Bahasa
hardyweb
hardyweb

Posted on • Edited on

Projek Jawi Converter: Belajar Golang Sambil Mendigitalkan Warisan Bahasa

Aku percaya bahawa, cara terbaik untuk belajar bahasa pengaturcaraan baru adalah dengan membangunkan projek kecil yang praktikal. Untuk projek kali ini, membangunkan tools Rumi ke Jawi Converter di jawi.hardyweb.net dengan bahasa pengaturcaran Golang.

Selain Jawi, aku juga pernah buat projek seperti QR Code generator, mod_sec_audit parser, dan parser Waktu Solat dari e-solat.gov.my. Semua projek ni kecil tapi memberi pengalaman langsung dalam bermain dengan fungsi string manipulation, API integration, dan text processing.

Idea Projek & Perbualan Dengan AI

Pada mulanya, aku tanya GPT:
“Boleh tak buat Jawi converter guna Golang?”

Cadangan GPT ialah:

  1. Mapping Huruf – setiap huruf Rumi dipetakan kepada huruf Jawi/Hijaiyah.

  2. Special Words / Daftar Kata – perkataan yang ejaannya unik atau tidak tepat jika mapping, akan disimpan dalam pangkalan data untuk digunakan kembali.

Contoh Mapping Huruf

Mapping ni terus menukar huruf satu-per-satu.

Special Words

Special words digunakan untuk perkataan yang mapping huruf biasa tidak menghasilkan bunyi atau ejaan tepat. Contohnya:
specialWords := map[string]string{
"allah": "الله",

"akhirat": "اخرَة",
"akhlak": "اخلاق",
"amalan": "عملن",
}

Proses Tukar Tulisan

Projek ni ikut empat langkah utama: ( ini versi awal )

  1. Clean & Tokenize ◦ Buang whitespace / trim ◦ Pecahkan ayat kepada perkataan ◦ Kecilkan semua huruf ( change to lower case )

  1. Cek Special Words ◦ Kalau perkataan ada dalam special_words, terus guna versi Jawi tersebut
  2. Mapping Huruf ◦ Kalau perkataan tiada dalam special_words, tukar huruf menggunakan mapping
  3. Gabungkan Kembali ◦ Combine token Jawi untuk membentuk ayat
for _, word := range sentenceTokens {
    cleaned := clean(word)
    if val, ok := specialWords[cleaned]; ok {
        output += val
    } else {
        output += mapLetters(cleaned)
    }
}
Enter fullscreen mode Exit fullscreen mode

Cabaran Linguistik

Mapping huruf sahaja tidak mencukupi, contohnya:
• Perkataan “saya”
◦ Mapping biasa → سایا
◦ Bunyi sebenar → ساي
◦ Maka perlu dimasukkan ke special_words.
• Imbuhan depan & belakang (me-, di-, ter-, -kan, -i) memerlukan logic tambahan.
• Perkataan seperti “makan”, “dimakan”, “memakan”, “termakan”, “makanan”, “pemakan” perlu di-handle untuk ejaan yang tepat.

Menyesuaikan Dengan Peraturan Jawi Lanjutan

Apabila aku membaca nota dari Jawi Makmur dan karya Ahmad Ali Karim tentang hukum hamzah, terdapat beberapa peraturan tambahan yang perlu diambil kira selain flow asas yang dicadangkan oleh AI:
1. Penempatan Hamzah – hamzah boleh berada di atas alif (أ), bawah alif (إ), atau di atas waw/ya (ؤ/ئ) bergantung pada vokal dan kedudukan huruf.
2. Huruf Ikut Bunyi – sesetengah perkataan memerlukan penyesuaian huruf berdasarkan sebutan, bukan sekadar mapping huruf literal.
3. Gabungan Huruf & Alif Mati – dalam perkataan tertentu, alif mati atau huruf panjang perlu ditambah/ditinggalkan untuk memastikan ejaan betul.
4. Gelinciran – bunyi akhir tertentu mempengaruhi cara huruf dipetakan, terutama untuk kata nama khas dan kata ganda.

Dengan memasukkan peraturan ini ke dalam projek, output Jawi menjadi lebih tepat dan mendekati sebutan sebenar, berbanding hanya mengikut mapping AI standard + special words.
1. Hukum Derlung
◦ Singkirkan huruf ‘a’ pada akhir perkataan jika bukan ‘da, la, ra, wa, nga’.
2. padanan Huruf h dan k
3. Gelinciran / Kata Ganda / Akronim / Tiga Suku Kata
4. Ejaan Lazim & Kata Asal Arab

Contoh:
// Hukum Derlung

func applyDerlung(word string) string {
    endings := []string{"da","la","ra","wa","nga"}
    for _, e := range endings {
        if strings.HasSuffix(word, e) {
            return word
        }
    }
    // Buang huruf 'a' akhir
    if strings.HasSuffix(word, "a") {
        return word[:len(word)-1]
    }
    return word
}
Enter fullscreen mode Exit fullscreen mode

Contoh Salah & Betul:
• Salah: باچا / ممباچا / ترباچا / ديباچا / باچاکان / باچاکانلاه / باچاان
• Betul: باچ / ممباچ / ترباچ / دباچ / باچکن / باچکنله / باچاءن.

Berikut adalah pipeline yang digunakan dalam jawi conveter semasa artikel ini ditulis, ia berevolusi dari 4 langkah awal sebagaimana dinyatakan di awal artikel,berkembang kerana melibatkan hukum dan peraturan-peraturan tatabahasa.

1. normalize → tokenize → standardize input.
2. specialWords → override perkataan tertentu.
3. diftong, prefix, suffix, digraph, gelinciran, hukum derlung 
4. morpho/phonological rules.
5. applyVowelAndEVariant → baru proses vowel-specific rules (awalan vokal + pepet/taling).
6. applyReduplikasi → last step sebelum mapping, sebab dia modify bentuk token.
7.mapToJawi → transliterasi.
8. joinTokens → final output string.

Enter fullscreen mode Exit fullscreen mode

*pipeline 5 dan 6 tu , masih ada bug, kadang-kadang dia baca , tapi masih tak boleh tukar e pepet dan e taling dengan betul, kata ganda tu pun tak di tukar ke angka dua arab (٢) dengan betul *

Insight & Pembelajaran

1. AI + Programming = Learning Accelerator
    ◦ GPT bantu cadangkan struktur, tapi ketepatan Jawi masih bergantung pada rule + daftar perkataan.
2. Rujukan Akademik & Linguistik
    ◦ DBP & Jawi Makmur jadi rujukan untuk ejaan tepat.
    ◦ Belajar asas Jawi melalui sumber online:
        ▪ ejawimakmur.my
        ▪ Ahmad Ali Karim – Jenis Hamzah
        ▪ Ahmad Ali Karim – Tulisan Jawi Bicara
3. String Manipulation + Loops = Core Logic
    ◦ Semua proses boleh dilakukan menggunakan operasi string standard dalam programming.
4. Edge Cases & Imbuhan
    ◦ Kaedah mapping huruf sahaja tidak cukup; perlu hukum & pengecualian untuk bunyi sebenar.
Enter fullscreen mode Exit fullscreen mode

Kenapa Buat Jawi Converter Sendiri Walaupun Ada Jawi Makmur & e-Jawi?
Walaupun platform rasmi wujud, projek ini berfungsi sebagai eksperimen akademik untuk menguji teori linguistik, menguji rule, imbuhan, kata ganda, dan hukum Jawi, sambil menyokong kajian computational linguistics dan digitasi warisan bahasa secara interaktif.

_Digitasi adalah proses mengubah sesuatu yang berbentuk bukan digital kepada digital. Contohnya, apabila menukarkan dokumen kertas dan menyimpannya dalam data komputer sebagai dokumen digital. _

Kesimpulan

Projek Jawi Converter bukan sekadar latihan pengaturcaran Golang. Ia adalah penghubung antara teknologi dan warisan budaya. Ini hanyalah satu usaha kecil aku untuk Malaysia – kendatipun begitu, projek Jawi Converter ini adalah sumbangan peribadi untuk melestarikan bahasa, budaya, dan warisan Melayu, sambil membina kemahiran teknologi moden.

Nota Kaki

Untuk perkataan Arab atau serapan perkataan Arab (perkatan Arab yang di Melayukan), seeloknya rujuk Ustaz- Ustazah, kerana ia melibatkan makraj dan sifat huruf Hijaiyah ( 30 abjad dalam bahasa Arab )

Rujukan / Citations
1. DBP & Jawi Makmur – sumber rasmi untuk ejaan Jawi standard
https://ejawimakmur.my/02-modul-jawi.html
2. Ahmad Ali Karim – Jenis Hamzah – pembelajaran asas hukum hamzah dan penulisan Jawi
https://ahmadalikarim.wordpress.com/2021/07/03/tulisan-jawi-kisah-hamzah-yang-digelar-tiga-suku/
3. Ahmad Ali Karim – Tulisan Jawi Bicara – panduan lanjut jenis hamzah & ejaan Jawi
https://ahmadalikarim.wordpress.com/2021/07/04/tulisan-jawi-bicara-jenis-jenis-hamzah/
4. Rumi → Jawi Mapping & Linguistic Rules – kombinasi rule-based & special words yang dirujuk dari DBP/Jawi Makmur

Top comments (0)