prpm-dbp 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SKILL.md +23 -0
- package/bin/cli.js +9 -0
- package/package.json +1 -1
- package/src/tukar.js +27 -1
package/SKILL.md
CHANGED
|
@@ -275,6 +275,29 @@ Siri yang sama membezakan kaf Arab daripada kaf Jawi secara eksplisit, iaitu per
|
|
|
275
275
|
|
|
276
276
|
Buku itu berhak cipta terpelihara (PNM). Ia dirujuk di sini sebagai pengesahan, bukan disalin.
|
|
277
277
|
|
|
278
|
+
## Homograf
|
|
279
|
+
|
|
280
|
+
Ejaan Jawi menggunakan empat huruf vokal berbanding enam dalam Rumi, jadi perkataan berbeza kerap berkongsi ejaan. Diukur pada 64,251 ejaan Jawi dalam data: **2,009 (3%) ialah homograf**.
|
|
281
|
+
|
|
282
|
+
Panduan DBP membahagikannya kepada dua:
|
|
283
|
+
|
|
284
|
+
| Jenis | Layanan | Contoh |
|
|
285
|
+
|---|---|---|
|
|
286
|
+
| **Hakiki** | **dibenarkan kekal**, tidak dibezakan | `biru`/`biro` بيرو, `burung`/`borong` بوروڠ, `satu`/`sato` ساتو |
|
|
287
|
+
| **Tidak hakiki** | dibezakan dengan alif | `kampung` کامڤوڠ / `kempung` کمڤوڠ |
|
|
288
|
+
|
|
289
|
+
Jenis kedua ialah Pedoman §8.17 (juga Klinik Jawi Siri ke-35): alif melambangkan [a] di suku kata tertutup untuk membezakannya daripada pepet yang tidak dilambangkan. **Ejaan DBP sudah mengandungi peraturan ini**, jadi pakej tidak perlu menjananya. Sembilan pasangan rujukan diuji, kesemuanya dibezakan dengan betul.
|
|
290
|
+
|
|
291
|
+
Jenis pertama pula tidak boleh diselesaikan oleh mana-mana peraturan. Itulah sebab `rumi` melaporkan semua calon dan enggan memilih: bagi homograf hakiki, DBP sendiri menyatakan kekaburan itu dibenarkan dan hanya konteks ayat boleh menyelesaikannya.
|
|
292
|
+
|
|
293
|
+
`--homograf` menandakan perkataan yang ejaan Jawinya dikongsi, supaya penulis tahu sebelum menghantar bahawa pembaca akan bergantung pada konteks:
|
|
294
|
+
|
|
295
|
+
```
|
|
296
|
+
$ npx prpm-dbp jawi nota.txt --homograf
|
|
297
|
+
اݢام ايت ساتو دان بوروڠ تربڠ.
|
|
298
|
+
homograf, ejaan Jawi dikongsi (3): اݢام=agama/igama, ساتو=satu/sato, بوروڠ=burung/borong
|
|
299
|
+
```
|
|
300
|
+
|
|
278
301
|
## Rantai kepercayaan
|
|
279
302
|
|
|
280
303
|
Setiap ejaan Jawi yang dikeluarkan membawa asal-usulnya. Jangan runtuhkan lapisan ini.
|
package/bin/cli.js
CHANGED
|
@@ -36,6 +36,7 @@ const BANTUAN = `prpm-dbp — semak Bahasa Melayu dan Jawi terhadap PRPM DBP
|
|
|
36
36
|
Pilihan: --refresh --had <n> --delay <ms> --json --cepat
|
|
37
37
|
--pedoman jana imbuhan ikut peraturan DBP (88-98% tepat, hasil ditanda)
|
|
38
38
|
--luar-talian jangan sentuh rangkaian langsung (wajib untuk laluan permintaan app)
|
|
39
|
+
--homograf tandakan perkataan yang ejaan Jawinya dikongsi perkataan lain
|
|
39
40
|
|
|
40
41
|
Cache: ${CACHE_PATH}
|
|
41
42
|
`
|
|
@@ -51,6 +52,7 @@ function huraiArgs(argv) {
|
|
|
51
52
|
else if (a === '--cepat') pilihan.cepat = true
|
|
52
53
|
else if (a === '--pedoman') pilihan.pedoman = true
|
|
53
54
|
else if (a === '--luar-talian') pilihan.luarTalian = true
|
|
55
|
+
else if (a === '--homograf') pilihan.homograf = true
|
|
54
56
|
else if (a === '--jenis') pilihan.jenis = argv[++i]
|
|
55
57
|
else if (a === '--had') pilihan.had = Number(argv[++i])
|
|
56
58
|
else if (a === '--delay') pilihan.delay = Number(argv[++i])
|
|
@@ -164,6 +166,7 @@ async function main() {
|
|
|
164
166
|
...opts,
|
|
165
167
|
cubaDasar: !pilihan.cepat,
|
|
166
168
|
janaImbuhan: pilihan.pedoman,
|
|
169
|
+
semakHomograf: pilihan.homograf,
|
|
167
170
|
})
|
|
168
171
|
await saveCache(cache)
|
|
169
172
|
if (pilihan.json) { keluar(h); break }
|
|
@@ -183,6 +186,12 @@ async function main() {
|
|
|
183
186
|
h.dijanaPedoman.map((x) => `${x.kata}=${x.jawi} [${x.rujukan}]`).join(', '),
|
|
184
187
|
)
|
|
185
188
|
}
|
|
189
|
+
if (h.homograf?.length) {
|
|
190
|
+
console.error(
|
|
191
|
+
`homograf, ejaan Jawi dikongsi (${h.homograf.length}): ` +
|
|
192
|
+
h.homograf.map((x) => `${x.jawi}=${x.dikongsi.join('/')}`).join(', '),
|
|
193
|
+
)
|
|
194
|
+
}
|
|
186
195
|
if (h.akronim.length) {
|
|
187
196
|
console.error(`akronim, dikekalkan Rumi (${h.akronim.length}): ${h.akronim.join(', ')}`)
|
|
188
197
|
}
|
package/package.json
CHANGED
package/src/tukar.js
CHANGED
|
@@ -218,7 +218,13 @@ export function pilihCalon(masuk) {
|
|
|
218
218
|
* Perkataan yang tidak disahkan dibalut penanda, tidak pernah direka.
|
|
219
219
|
*/
|
|
220
220
|
export async function keJawi(teks, cache, opts = {}) {
|
|
221
|
-
const {
|
|
221
|
+
const {
|
|
222
|
+
penanda = ['«', '»'],
|
|
223
|
+
cubaDasar = true,
|
|
224
|
+
gunaDataset = true,
|
|
225
|
+
janaImbuhan = false,
|
|
226
|
+
semakHomograf = false,
|
|
227
|
+
} = opts
|
|
222
228
|
const belumDisahkan = []
|
|
223
229
|
const terbitanSah = []
|
|
224
230
|
const dariDataset = []
|
|
@@ -312,6 +318,25 @@ export async function keJawi(teks, cache, opts = {}) {
|
|
|
312
318
|
keluar.push(penanda[0] + cebis + penanda[1])
|
|
313
319
|
}
|
|
314
320
|
|
|
321
|
+
// Amaran homograf. Ejaan Jawi yang dikongsi dua perkataan Rumi akan taksa
|
|
322
|
+
// apabila dibaca semula. Menurut panduan DBP, homograf HAKIKI (kongsi
|
|
323
|
+
// vokal wau/ya, kata Melayu lawan kata asing, bentuk berimbuhan) memang
|
|
324
|
+
// dibenarkan kekal dan tidak dibezakan. Jadi ini bukan ralat: ia maklumat
|
|
325
|
+
// supaya penulis tahu konteks ayat perlu menanggung beban perbezaan itu.
|
|
326
|
+
const homograf = []
|
|
327
|
+
if (semakHomograf) {
|
|
328
|
+
const songsang = petaSongsang(cache, await muatDataset())
|
|
329
|
+
for (const [k, cebis] of bahagian.entries()) {
|
|
330
|
+
if (k % 2 === 0) continue
|
|
331
|
+
const hasil = keluar[k]
|
|
332
|
+
if (!hasil || hasil.startsWith(penanda[0])) continue
|
|
333
|
+
const pilihan = pilihCalon(songsang.get(normalisasiJawi(hasil)))
|
|
334
|
+
if (pilihan && pilihan.calon.length > 1) {
|
|
335
|
+
homograf.push({ kata: cebis, jawi: hasil, dikongsi: pilihan.calon })
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
315
340
|
// Pedoman DBP §14.1: kata sendi di dan ke bercantum dengan kata berikutnya.
|
|
316
341
|
// Dibuat sebagai lulusan kedua supaya logik carian di atas kekal mudah.
|
|
317
342
|
const sendiDicantum = []
|
|
@@ -337,6 +362,7 @@ export async function keJawi(teks, cache, opts = {}) {
|
|
|
337
362
|
dariDataset,
|
|
338
363
|
dariNama,
|
|
339
364
|
kataUlang,
|
|
365
|
+
homograf,
|
|
340
366
|
dijanaPedoman,
|
|
341
367
|
namaKhas: [...new Set(namaKhas)],
|
|
342
368
|
akronim: [...new Set(akronim)],
|