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. _

=======================================================

artikel tambahan

Rujukan Hukum Ejaan Jawi — PUEJBM DBP

Nota rujukan untuk pembangunan projek Jawi Converter (Golang).

Dokumen ini mengumpulkan beberapa hukum dan pola ejaan Jawi yang diperlukan untuk membina sistem penukaran Rumi → Jawi secara berasaskan peraturan (rule-based).

Sumber rujukan utama:

  • PUEJBM — Pedoman Umum Ejaan Jawi Bahasa Melayu, Dewan Bahasa dan Pustaka (DBP)
  • Jawi Makmur
  • eJawi / ejaan.jawi.net.my
  • Rujukan Ahmad Ali Karim berkaitan jenis-jenis hamzah

Penting: Contoh atau hukum yang ditanda [SEMAK] belum disahkan sepenuhnya dan tidak wajar terus dijadikan rule dalam kod pengeluaran (production rule) sehingga dibandingkan dengan sumber rujukan yang sah.


1. Huruf Vokal

Pemetaan vokal Rumi → Jawi tidak boleh dibuat secara mudah berdasarkan satu-ke-satu huruf. Kedudukan vokal dalam suku kata dan jenis vokal perlu dipertimbangkan.

Vokal Pola umum Contoh
a Dalam keadaan tertentu tidak dilambangkan, khususnya berdasarkan struktur suku kata dan hukum ejaan yang berkaitan کيت (kita), ڤاݢي (pagi)
i Pada suku kata terbuka tertentu → ي کيري (kiri), دوري (duri)
u Pada suku kata terbuka tertentu → و ساتو (satu), بوکو (buku), دودوق (duduk)
o Lazimnya → و موتر (motor), روتي (roti), بولا (bola)
e pepet Umumnya tidak dilambangkan بلاجر (belajar), ݢلس (gelas), دڠن (dengan)
e taling Dalam pola tertentu dilambangkan dengan ا ايمڤت (empat), ݢلاڠ (gelang)

Implikasi kepada converter

e pepet dan e taling tidak boleh disamakan.

Sistem perlu menentukan jenis e berdasarkan perkataan atau konteks fonologi sebelum melakukan pemetaan vokal.

Contohnya:

e pepet  → biasanya tidak dilambangkan
e taling → dalam pola tertentu dilambangkan
Enter fullscreen mode Exit fullscreen mode

Oleh itu, fungsi seperti:

applyVowelAndEVariant()
Enter fullscreen mode Exit fullscreen mode

perlu dilaksanakan sebelum proses transliterasi huruf akhir.


2. Diftong

Diftong pada kedudukan tertentu mempunyai pola ejaan Jawi tersendiri.

Diftong Pola Jawi Contoh
au و ڤولاو (pulau)
ai ي ڤنتاي (pantai)
oi وي کالوي (kaloi)

Nota: Jangan menganggap semua rangkaian a+i, a+u dan o+i sebagai diftong secara automatik. Sistem perlu membezakan diftong daripada dua vokal yang hadir secara berasingan.


3. Bunyi n dan Asimilasi Nasal

Dalam proses morfologi bahasa Melayu, bunyi nasal boleh berubah mengikut bunyi konsonan yang mengikutinya.

Contoh umum:

Konsonan selepas nasal Perubahan bunyi Contoh
p, b nm sampan, lambang
t, d, s, c, j dan keadaan tertentu nn bintang
k, g nng pangkat
s dalam awalan tertentu nny menyapu

Namun, perkara ini perlu dibezakan daripada ejaan perkataan yang memang mempunyai huruf n, kerana tidak semua n dalam perkataan mengalami asimilasi.

Implikasi kepada converter

Pemetaan:

n → ن
Enter fullscreen mode Exit fullscreen mode

sahaja tidak mencukupi untuk menangani morfologi.

Converter yang menyokong imbuhan perlu mempunyai tahap analisis morfologi/fonologi sebelum pemetaan huruf Jawi.


4. k pada Akhir Kata

Dalam sesetengah pola ejaan Jawi, bunyi k pada akhir kata mempunyai bentuk ejaan tertentu dan perlu dibezakan daripada ک yang digunakan dalam keadaan lain.

Contoh:

  • انق — anak
  • ماسوق — masuk
  • باليق — balik
  • دودوق — duduk

Nota: Istilah dan kategori seperti "k ghaib" perlu dirujuk terus kepada PUEJBM sebelum dijadikan algoritma umum. Jangan bina rule berdasarkan hanya beberapa contoh.

Untuk pembangunan converter, lebih selamat memodelkannya sebagai:

final-k rule
Enter fullscreen mode Exit fullscreen mode

dan menyediakan senarai pengecualian apabila diperlukan.


5. h pada Akhir Kata

Terdapat pola tertentu yang menyebabkan huruf h pada akhir kata tidak dieja sebagaimana bunyi Rumi secara satu-ke-satu.

Contoh:

  • مودَه — mudah
  • رومه — rumah
  • بودوه — bodoh
  • باسه — basah [SEMAK]

Penting: Jangan menganggap semua h akhir mesti dibuang atau ditukar kepada satu bentuk Jawi tertentu. Rule ini perlu diuji terhadap PUEJBM dan senarai perkataan sebenar.


6. Awalan meN- dan peN-

Awalan bahasa Melayu mengalami perubahan bentuk berdasarkan huruf atau bunyi awal kata dasar.

Contoh pola:

Kata dasar bermula dengan Bentuk umum Contoh
p, b, f, m mem- / pem- membaca, meminta, pembaca
t, d, s, c, j, dan keadaan tertentu men- / pen- menulis, mendengar, mencuri
s meny- menyapu
k, g, h, vokal dan ng dalam pola tertentu meng- / peng- mengajar, mengikat, mengundi
Kata dasar satu suku kata tertentu menge- mengecat, mengebor
l, r, w, y dan keadaan tertentu me- melukis, merawat

Prinsip penting

Ejaan Jawi bagi kata berimbuhan perlu mengambil kira sebutan dan struktur morfologi, bukan sekadar melakukan:

replace("me", ...)
Enter fullscreen mode Exit fullscreen mode

atau:

replace("n", ...)
Enter fullscreen mode Exit fullscreen mode

Oleh itu, meN- dan peN- patut menjadi modul tersendiri:

detectPrefix()
applyNasalAssimilation()
applyPrefixJawiRule()
Enter fullscreen mode Exit fullscreen mode

7. Imbuhan Lain

Beberapa imbuhan bahasa Melayu yang biasa perlu dikenali sebagai unit morfologi.

ber-

Contoh:

  • بکرجا — bekerja
  • برلاري — berlari

ter-

Contoh:

  • ترباچا — terbaca

di-

Apabila di- merupakan imbuhan:

  • دباچا — dibaca
  • د توليس / دتوﻟيس — ditulis [SEMAK]

ke-...-an

Contoh:

  • کراݢاءن — kerajaan [SEMAK]
  • کماجوان — kemajuan [SEMAK]

-kan

Contoh:

  • باچاکن — bacakan [SEMAK]

-an

Bentuk ejaan boleh bergantung pada huruf dan vokal yang hadir sebelum akhiran.

Contoh:

  • باچاءن — bacaan [SEMAK]
  • ماکنن — makanan [SEMAK]
  • مينومن — minuman [SEMAK]

Nota: Bahagian imbuhan dan hamzah perlu disahkan dengan PUEJBM sebelum dijadikan rule automatik. Contoh di sini berfungsi sebagai data ujian, bukan semata-mata definisi hukum.

-lah

Contoh:

  • باچاله — bacalah [SEMAK]

8. Kata Sendi di / ke vs Imbuhan

Ini ialah bahagian yang sangat penting untuk converter kerana ruang antara perkataan bergantung pada fungsi perkataan tersebut.

Fungsi Rumi Bentuk
Kata sendi di rumah د رومه
Imbuhan ditulis دتوﻟيس [SEMAK]
Kata sendi ke sekolah ک سکوله [SEMAK]
Imbuhan kerajaan کراݢاءن [SEMAK]

Contohnya:

di rumah
Enter fullscreen mode Exit fullscreen mode

berbeza daripada:

ditulis
Enter fullscreen mode Exit fullscreen mode

Jadi converter tidak sepatutnya memproses di sebagai string biasa sahaja.

Cadangan pipeline

sentence
   ↓
tokenization
   ↓
morphological/context analysis
   ↓
determine "di" / "ke" function
   ↓
Jawi conversion
Enter fullscreen mode Exit fullscreen mode

9. Kata Pinjaman Arab

Kata pinjaman Arab memerlukan perhatian khusus kerana terdapat huruf Jawi yang mempunyai fungsi berkaitan dengan huruf Arab.

Antara huruf yang perlu dikekalkan dalam perkataan Arab atau serapan Arab tertentu ialah:

ث ذ ح خ ص ض ط ظ ع غ

serta huruf-huruf Jawi/Arab lain mengikut ejaan perkataan yang sah.

Contoh:

  • مسجد — masjid
  • خبر — khabar
  • عادت — adat [SEMAK]
  • حکم — hukum
  • صلات — solat
  • شريف — syarif
  • طبيب — tabib [SEMAK]

Perkataan seperti:

  • الله — Allah

boleh dianggap sebagai special word kerana bentuk ejaannya tidak wajar dihasilkan hanya melalui transliterasi Rumi → Jawi biasa.

Cadangan implementation

Sediakan kamus:

var specialWords = map[string]string{
    "allah": "الله",
    // ...
}
Enter fullscreen mode Exit fullscreen mode

dan lakukan lookup sebelum transliterasi umum.


10. Ta Marbutah

ة (ta marbutah) digunakan dalam kata Arab tertentu dan kata serapan yang mengekalkan bentuk atau tradisi ejaan Arabnya.

Contoh:

  • سنة — sunnah
  • مدرسة — madrasah
  • مكة — Mekah

Namun, tidak semua perkataan Melayu yang berakhir dengan bunyi a atau ah boleh diberikan ة.

Prinsip converter

Jangan buat:

if endsWith("ah") {
    use "ة"
}
Enter fullscreen mode Exit fullscreen mode

secara automatik.

Lebih selamat menggunakan:

Arabic-origin dictionary
+
morphological rules
+
exception list
Enter fullscreen mode Exit fullscreen mode

11. Kata Pinjaman Asing

Kata pinjaman daripada bahasa Inggeris, Tamil, Cina, Siam dan bahasa lain lazimnya perlu ditangani berdasarkan sebutan dan sistem ejaan Jawi, bukan transliterasi huruf Latin satu demi satu.

Contoh:

  • ڤروݢرام — program [SEMAK]
  • ستروکتور — struktur [SEMAK]
  • دوكتور — doktor [SEMAK]
  • ڤوليس — polis
  • بيݢ — beg [SEMAK]
  • توالا — tuala [SEMAK]
  • سکوله — sekolah [SEMAK]

Kluster konsonan

Kata pinjaman tertentu mempunyai kluster konsonan yang perlu dikendalikan secara khusus.

Contoh:

green
structure
program
Enter fullscreen mode Exit fullscreen mode

Tidak semestinya boleh diproses menggunakan rule bahasa Melayu asli sahaja.

Oleh itu, converter sebaiknya mempunyai kategori:

Malay native word
Arabic loanword
English/foreign loanword
proper noun
special word
Enter fullscreen mode Exit fullscreen mode

12. Kata Ganda

Kata ganda penuh mempunyai mekanisme ejaan Jawi tersendiri.

Dalam keadaan tertentu, angka dua Arab ٢ digunakan sebagai tanda penggandaan.

Contoh:

  • اورڠ٢ — orang-orang
  • رومه٢ — rumah-rumah

Dalam Unicode, simbol yang kelihatan seperti ٢ ialah ARABIC-INDIC DIGIT TWO, bukan huruf Jawi biasa.

Kata ganda separa atau kata ganda berima pula tidak semestinya menggunakan kaedah yang sama.

Contoh:

sayur-mayur
kuih-muih
Enter fullscreen mode Exit fullscreen mode

Cadangan implementation

Sediakan fungsi:

applyReduplication()
Enter fullscreen mode Exit fullscreen mode

yang mengenal pasti:

full reduplication
partial reduplication
rhyming reduplication
Enter fullscreen mode Exit fullscreen mode

dan bukan sekadar mencari tanda -.


13. Hamzah

Hamzah merupakan salah satu bahagian paling kompleks dalam ejaan Jawi.

Antara bentuk hamzah yang perlu dikenali termasuk:

  • أ — hamzah di atas alif
  • إ — hamzah di bawah alif
  • ؤ — hamzah di atas wau
  • ئ — hamzah di atas ya

Selain fungsi yang berkaitan dengan kata Arab, hamzah juga boleh memainkan peranan dalam ejaan Jawi Melayu tertentu, termasuk keadaan yang melibatkan pertemuan vokal.

Contoh:

  • سوأل / bentuk berkaitan — soal [SEMAK]
  • مجموع — majmuk [SEMAK]
  • باچاءن — bacaan [SEMAK]

Prinsip penting

Hamzah tidak boleh dipetakan hanya berdasarkan huruf Rumi h atau a.

Sistem perlu mempertimbangkan:

kedudukan hamzah
+
vokal sebelum
+
vokal selepas
+
asal perkataan
+
pola ejaan
Enter fullscreen mode Exit fullscreen mode

Rujukan khusus jenis hamzah oleh Ahmad Ali Karim boleh digunakan sebagai bahan pembelajaran tambahan, tetapi PUEJBM hendaklah kekal sebagai rujukan utama untuk standard ejaan.


14. Hukum Derlung

Hukum Derlung merupakan salah satu hukum penting dalam ejaan Jawi Melayu.

Dalam gambaran mudah, huruf a pada akhir kata tertentu tidak dilambangkan, dengan beberapa pengecualian yang perlu dikenali.

Antara akhiran yang biasanya diberi perhatian ialah:

da
la
ra
wa
nga
Enter fullscreen mode Exit fullscreen mode

Contoh konseptual:

bača
→ باچ
Enter fullscreen mode Exit fullscreen mode

bukan:

باچا
Enter fullscreen mode Exit fullscreen mode

Contoh implementation awal

func applyDerlung(word string) string {
    endings := []string{"da", "la", "ra", "wa", "nga"}

    for _, ending := range endings {
        if strings.HasSuffix(word, ending) {
            return word
        }
    }

    if strings.HasSuffix(word, "a") {
        return strings.TrimSuffix(word, "a")
    }

    return word
}
Enter fullscreen mode Exit fullscreen mode

Tetapi:

Fungsi di atas hanyalah model awal untuk eksperimen.

Ia tidak sepatutnya dianggap sebagai implementasi lengkap Hukum Derlung sehingga dibandingkan dengan keseluruhan peraturan PUEJBM dan set data perkataan yang mencukupi.


15. Gelinciran

Gelinciran perlu dilihat sebagai proses fonologi/ejaan yang bergantung pada struktur perkataan dan bunyi.

Ia lebih sukar dimodelkan sebagai:

one character → one Jawi character
Enter fullscreen mode Exit fullscreen mode

Terutamanya bagi:

  • kata nama khas
  • kata pinjaman
  • kata ganda
  • perubahan bunyi akibat imbuhan

Oleh itu, converter mungkin memerlukan:

phonological rules
+
word dictionary
+
exception list
Enter fullscreen mode Exit fullscreen mode

dan bukannya satu formula tunggal.


16. Kata Nama Khas, Akronim dan Singkatan

Kata nama khas

Kata nama khas hendaklah ditangani berdasarkan sebutan dan ejaan yang diterima.

Contoh:

nama orang
nama tempat
nama organisasi
nama produk
Enter fullscreen mode Exit fullscreen mode

Untuk nama yang mempunyai bentuk rasmi Jawi, bentuk rasmi tersebut patut diutamakan.

Akronim

Akronim memerlukan keputusan sama ada:

dibaca sebagai perkataan
Enter fullscreen mode Exit fullscreen mode

atau:

disebut huruf demi huruf
Enter fullscreen mode Exit fullscreen mode

Contohnya singkatan seperti:

RIM
MARA
UITM
Enter fullscreen mode Exit fullscreen mode

tidak semestinya boleh diproses menggunakan rule perkataan biasa.

Cadangan

Gunakan kategori:

properNoun
acronym
abbreviation
technicalTerm
Enter fullscreen mode Exit fullscreen mode

sebelum transliterasi biasa.


17. Angka dan Tanda Baca

Kata ganda

Gunakan angka dua Arab apabila peraturan ejaan menetapkannya:

orang-orang
→ اورڠ٢
Enter fullscreen mode Exit fullscreen mode

Tanda baca

Tanda baca moden seperti:

.
,
:
;
?
!
(
)
Enter fullscreen mode Exit fullscreen mode

boleh dikekalkan mengikut keperluan teks.

Nombor

Nombor boleh dikekalkan dalam bentuk angka moden bergantung pada keperluan sistem dan konteks dokumen.


18. Cadangan Pipeline Jawi Converter

Berdasarkan hukum-hukum di atas, pipeline tidak sepatutnya hanya berupa:

Rumi
  ↓
character mapping
  ↓
Jawi
Enter fullscreen mode Exit fullscreen mode

Sebaliknya, lebih sesuai:

1. Normalize
      ↓
2. Tokenize
      ↓
3. Detect special words
      ↓
4. Detect word category
      ↓
5. Morphological analysis
      ↓
6. Prefix / suffix rules
      ↓
7. Nasal assimilation
      ↓
8. Phonological rules
      ↓
9. Vowel + e-pepet/e-taling rules
      ↓
10. Derlung
      ↓
11. Hamzah rules
      ↓
12. Reduplication
      ↓
13. Character mapping
      ↓
14. Join tokens
      ↓
15. Validation / exception lookup
      ↓
Jawi
Enter fullscreen mode Exit fullscreen mode

19. Rules yang Perlu Ditambah dalam Pipeline Golang

# Hukum / Fungsi Cadangan kedudukan
1 Asimilasi nasal meN- / peN- Morphological analysis
2 Kata pinjaman Arab Special-word / dictionary layer
3 Ta marbutah Arabic-word layer
4 k akhir Phonological/final-letter rule
5 h akhir Phonological/final-letter rule
6 Nasal nm/ng/ny Phonological rule
7 e pepet vs e taling Vowel analysis
8 Diftong Phonological analysis
9 Hukum Derlung Final-vowel rule
10 Hamzah Orthographic rule
11 Kata ganda Morphological rule
12 di / ke sendi vs imbuhan Context/morphological analysis
13 Kata pinjaman asing Dictionary + phonological rules
14 Kata nama khas Dictionary / proper-noun layer
15 Akronim / singkatan Token classification
16 Exception words Special dictionary

20. Jangan Jadikan Semua Hukum Sebagai replace()

Kesilapan paling mudah dalam membina Jawi Converter ialah menghasilkan kod seperti:

strings.ReplaceAll(word, "a", "ا")
strings.ReplaceAll(word, "i", "ي")
strings.ReplaceAll(word, "u", "و")
Enter fullscreen mode Exit fullscreen mode

Kaedah tersebut hanya sesuai untuk transliterasi asas, bukan ejaan Jawi yang mengambil kira fonologi dan morfologi bahasa Melayu.

Sebaliknya, struktur program boleh dibina seperti:

type WordContext struct {
    Original       string
    Normalized     string
    Root           string
    Prefix         string
    Suffix         string
    IsArabicLoan   bool
    IsProperNoun   bool
    IsReduplicated bool
}

type Rule interface {
    Apply(ctx *WordContext) error
}
Enter fullscreen mode Exit fullscreen mode

Kemudian rule boleh dilaksanakan secara berperingkat:

SpecialWordRule
      ↓
MorphologyRule
      ↓
NasalAssimilationRule
      ↓
DiphthongRule
      ↓
VowelRule
      ↓
DerlungRule
      ↓
HamzahRule
      ↓
CharacterMappingRule
Enter fullscreen mode Exit fullscreen mode

Ini lebih mudah diuji dan diselenggara berbanding satu fungsi transliterasi yang terlalu besar.


21. Prinsip Pengujian

Setiap hukum perlu mempunyai test case sendiri.

Contohnya:

Rumi        Expected Jawi
--------------------------------
kita        کيت
pagi        ڤاݢي
buku        بوکو
duduk       دودوق
motor       موتر
roti        روتي
bola        بولا
Enter fullscreen mode Exit fullscreen mode

Untuk rule morfologi:

membaca
meminta
menulis
mendengar
menyapu
mengajar
mengecat
melukis
Enter fullscreen mode Exit fullscreen mode

Untuk konteks:

di rumah
ditulis

ke sekolah
kerajaan
Enter fullscreen mode Exit fullscreen mode

Untuk kata ganda:

orang-orang
rumah-rumah
sayur-mayur
kuih-muih
Enter fullscreen mode Exit fullscreen mode

Dan untuk kata Arab:

masjid
khabar
hukum
solat
Allah
Enter fullscreen mode Exit fullscreen mode

22. Sumber Rujukan

Rujukan utama

Dewan Bahasa dan Pustaka (DBP)
PUEJBM — Pedoman Umum Ejaan Jawi Bahasa Melayu

Jawi Makmur

Jawi Makmur — Modul Jawi

Digunakan sebagai rujukan tambahan dan bahan perbandingan untuk ejaan perkataan.

Ahmad Ali Karim — Jenis Hamzah

Tulisan Jawi — Kisah Hamzah yang Digelar Tiga Suku

Ahmad Ali Karim — Jenis-Jenis Hamzah

Tulisan Jawi — Bicara Jenis-Jenis Hamzah

ejaan.jawi.net.my

Ejaan Jawi


Kesimpulan

Projek Jawi Converter bukan sekadar latihan pengaturcaraan Golang.

Ia merupakan satu usaha untuk menghubungkan teknologi moden dengan warisan tulisan dan bahasa Melayu.

Walaupun projek ini bermula sebagai eksperimen kecil dalam pembangunan rule-based converter, ia membuka ruang untuk mempelajari beberapa perkara serentak:

  • pengaturcaraan Golang;
  • pemprosesan bahasa;
  • morfologi;
  • fonologi;
  • Unicode dan text processing;
  • reka bentuk rule engine;
  • pengurusan kamus dan pengecualian;
  • serta sejarah dan sistem tulisan Jawi.

Usaha ini mungkin kecil, tetapi ia tetap mempunyai nilai tersendiri sebagai sumbangan peribadi untuk membantu memelihara, memahami dan mendigitalkan warisan tulisan Jawi, sambil membina kemahiran teknologi moden.


Nota Kaki — Kata Arab dan Serapan Arab

Untuk perkataan Arab atau perkataan serapan Arab yang telah dimelayukan, rujukan kepada sumber bahasa Arab yang berautoriti juga boleh membantu, khususnya apabila persoalan melibatkan:

  • makhraj huruf;
  • sifat huruf;
  • bentuk asal perkataan Arab;
  • huruf Hijaiyah;
  • dan perubahan bentuk apabila perkataan tersebut diserap ke dalam bahasa Melayu.

Namun, untuk ejaan Jawi Bahasa Melayu, rujukan utama bagi projek ini hendaklah kekal pada pedoman ejaan Jawi DBP, manakala sumber bahasa Arab digunakan sebagai rujukan tambahan apabila diperlukan.

Pembetulan penting: Bahasa Arab mempunyai 28 huruf asas, bukan 30. Tulisan Jawi pula mempunyai beberapa huruf tambahan yang mewakili bunyi yang tidak terdapat dalam bahasa Arab, seperti چ, ڤ, ݢ, ڠ dan ڽ.


Status Dokumen

Dokumen ini sebaiknya dianggap sebagai:

Working Reference
       ↓
Rule Candidate
       ↓
Verify Against PUEJBM
       ↓
Test With Jawi Reference
       ↓
Unit Test
       ↓
Production Rule
Enter fullscreen mode Exit fullscreen mode

Bukan semua contoh dalam nota ini boleh terus dianggap sebagai hukum muktamad.

Rule yang belum disahkan perlu ditanda [SEMAK] dan tidak dimasukkan terus ke dalam mapToJawi() sehingga disahkan.

Dengan pendekatan ini, projek Jawi Converter boleh berkembang daripada sekadar character transliterator kepada rule-based Malay Jawi orthography engine.

Top comments (0)