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:
Mapping Huruf – setiap huruf Rumi dipetakan kepada huruf Jawi/Hijaiyah.
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 )
- Clean & Tokenize ◦ Buang whitespace / trim ◦ Pecahkan ayat kepada perkataan ◦ Kecilkan semua huruf ( change to lower case )
- Cek Special Words ◦ Kalau perkataan ada dalam special_words, terus guna versi Jawi tersebut
- Mapping Huruf ◦ Kalau perkataan tiada dalam special_words, tukar huruf menggunakan mapping
- 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)
}
}
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
}
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.
*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.
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
Oleh itu, fungsi seperti:
applyVowelAndEVariant()
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+udano+isebagai 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
|
n → m
|
sampan, lambang |
t, d, s, c, j dan keadaan tertentu |
n → n
|
bintang |
k, g
|
n → ng
|
pangkat |
s dalam awalan tertentu |
n → ny
|
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 → ن
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 "
kghaib" 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
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
hakhir 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", ...)
atau:
replace("n", ...)
Oleh itu, meN- dan peN- patut menjadi modul tersendiri:
detectPrefix()
applyNasalAssimilation()
applyPrefixJawiRule()
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
berbeza daripada:
ditulis
Jadi converter tidak sepatutnya memproses di sebagai string biasa sahaja.
Cadangan pipeline
sentence
↓
tokenization
↓
morphological/context analysis
↓
determine "di" / "ke" function
↓
Jawi conversion
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": "الله",
// ...
}
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 "ة"
}
secara automatik.
Lebih selamat menggunakan:
Arabic-origin dictionary
+
morphological rules
+
exception list
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
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
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
Cadangan implementation
Sediakan fungsi:
applyReduplication()
yang mengenal pasti:
full reduplication
partial reduplication
rhyming reduplication
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
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
Contoh konseptual:
bača
→ باچ
bukan:
باچا
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
}
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
Terutamanya bagi:
- kata nama khas
- kata pinjaman
- kata ganda
- perubahan bunyi akibat imbuhan
Oleh itu, converter mungkin memerlukan:
phonological rules
+
word dictionary
+
exception list
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
Untuk nama yang mempunyai bentuk rasmi Jawi, bentuk rasmi tersebut patut diutamakan.
Akronim
Akronim memerlukan keputusan sama ada:
dibaca sebagai perkataan
atau:
disebut huruf demi huruf
Contohnya singkatan seperti:
RIM
MARA
UITM
tidak semestinya boleh diproses menggunakan rule perkataan biasa.
Cadangan
Gunakan kategori:
properNoun
acronym
abbreviation
technicalTerm
sebelum transliterasi biasa.
17. Angka dan Tanda Baca
Kata ganda
Gunakan angka dua Arab apabila peraturan ejaan menetapkannya:
orang-orang
→ اورڠ٢
Tanda baca
Tanda baca moden seperti:
.
,
:
;
?
!
(
)
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
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
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 n → m/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", "و")
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
}
Kemudian rule boleh dilaksanakan secara berperingkat:
SpecialWordRule
↓
MorphologyRule
↓
NasalAssimilationRule
↓
DiphthongRule
↓
VowelRule
↓
DerlungRule
↓
HamzahRule
↓
CharacterMappingRule
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 بولا
Untuk rule morfologi:
membaca
meminta
menulis
mendengar
menyapu
mengajar
mengecat
melukis
Untuk konteks:
di rumah
ditulis
ke sekolah
kerajaan
Untuk kata ganda:
orang-orang
rumah-rumah
sayur-mayur
kuih-muih
Dan untuk kata Arab:
masjid
khabar
hukum
solat
Allah
22. Sumber Rujukan
Rujukan utama
Dewan Bahasa dan Pustaka (DBP)
PUEJBM — Pedoman Umum Ejaan Jawi Bahasa Melayu
Jawi Makmur
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
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
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)