prpm-dbp 0.15.0 → 0.16.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 CHANGED
@@ -30,6 +30,23 @@ Model boleh hasilkan Jawi yang nampak betul tetapi salah, dan pembaca tidak dapa
30
30
 
31
31
  Bilangan rujukan itu datang daripada panel korpus DBP sendiri, bukan anggaran. Ia **mengisih** calon supaya yang lazim dilihat dahulu; ia **tidak memilih**. Perkataan jarang tetap betul apabila ayat menghendakinya.
32
32
 
33
+ 0e. **Pembahagian kerja: alat mengemukakan, ANDA memutuskan.** CLI tidak boleh membaca konteks; anda boleh. Jangan sesekali menghantar `mengikut|mengekot` sebagai hasil akhir kepada pengguna.
34
+
35
+ Aliran yang betul:
36
+
37
+ ```bash
38
+ npx prpm-dbp rumi teks.txt --pilih --konteks
39
+ ```
40
+
41
+ `--pilih` menghasilkan teks bersih dengan memilih calon paling lazim, dan menyenaraikan setiap pilihan itu:
42
+
43
+ ```
44
+ itu mengikut sukatan pelajaran.
45
+ dipilih ikut kekerapan (SEMAK konteks): مڠيکوت -> mengikut [lain: mengekot]
46
+ ```
47
+
48
+ Setiap baris `dipilih` ialah tekaan berasaskan kekerapan, **bukan pemahaman konteks**. Baca ayatnya. Dalam contoh di atas `mengikut sukatan pelajaran` jelas betul dan `mengekot` mustahil. Tetapi dalam ayat tentang orang kesejukan merapatkan tangan ke badan, `mengekot` yang betul walaupun kekerapannya 6 berbanding 2439. Kekerapan ialah tekaan terbaik tanpa konteks; ia kalah kepada konteks setiap kali.
49
+
33
50
  1. **Jangan hantar Jawi yang belum disemak.** Setiap perkataan Jawi dalam output mesti datang dari PRPM atau ditanda belum disahkan.
34
51
  2. **Tanda, jangan sekat.** Kalau satu perkataan tiada dalam PRPM, hantar kerja itu dan senaraikan perkataan berkenaan di hujung. Jangan tahan seluruh dokumen sebab satu nama khas.
35
52
  3. **Sebut sumber.** PRPM ada beberapa kamus. Bila petik definisi, sebut kamus mana (Kamus Dewan Edisi Keempat, Kamus Pelajar Edisi Kedua, dan lain-lain).
package/bin/cli.js CHANGED
@@ -38,6 +38,8 @@ Pilihan: --refresh --had <n> --delay <ms> --json --cepat
38
38
  --luar-talian jangan sentuh rangkaian langsung (wajib untuk laluan permintaan app)
39
39
  --homograf tandakan perkataan yang ejaan Jawinya dikongsi perkataan lain
40
40
  --konteks papar ayat dan makna setiap calon bagi kekaburan (rumi)
41
+ --pilih pilih calon paling lazim supaya teks boleh terus dibaca;
42
+ setiap pilihan disenaraikan untuk disemak ikut konteks
41
43
 
42
44
  Cache: ${CACHE_PATH}
43
45
  `
@@ -55,6 +57,7 @@ function huraiArgs(argv) {
55
57
  else if (a === '--luar-talian') pilihan.luarTalian = true
56
58
  else if (a === '--homograf') pilihan.homograf = true
57
59
  else if (a === '--konteks') pilihan.konteks = true
60
+ else if (a === '--pilih') pilihan.pilih = true
58
61
  else if (a === '--jenis') pilihan.jenis = argv[++i]
59
62
  else if (a === '--had') pilihan.had = Number(argv[++i])
60
63
  else if (a === '--delay') pilihan.delay = Number(argv[++i])
@@ -220,7 +223,10 @@ async function main() {
220
223
 
221
224
  case 'rumi': {
222
225
  const teks = await readFile(baki[0], 'utf8')
223
- const h = keRumi(teks, cache, { dataset: await muatDataset() })
226
+ const h = keRumi(teks, cache, {
227
+ dataset: await muatDataset(),
228
+ pilihLazim: pilihan.pilih,
229
+ })
224
230
  if (pilihan.json) { keluar(h); break }
225
231
  console.log(h.teks)
226
232
  console.error(`\npeta songsang: ${h.saizPeta} ejaan`)
@@ -250,7 +256,13 @@ async function main() {
250
256
  }
251
257
  }
252
258
  if (h.arab.length) console.error(`teks Arab dibiarkan (${h.arab.length}): ${h.arab.join(' ')}`)
253
- for (const k of h.kabur) console.error(`kabur: ${k.jawi} -> ${k.calon.join(', ')}`)
259
+ for (const k of h.kabur) {
260
+ console.error(
261
+ k.dipilih
262
+ ? `dipilih ikut kekerapan (SEMAK konteks): ${k.jawi} -> ${k.dipilih} [lain: ${k.calon.slice(1).join(', ')}]`
263
+ : `kabur: ${k.jawi} -> ${k.calon.join(', ')}`,
264
+ )
265
+ }
254
266
  break
255
267
  }
256
268
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prpm-dbp",
3
- "version": "0.15.0",
3
+ "version": "0.16.0",
4
4
  "description": "Semak ejaan Bahasa Melayu dan Jawi terhadap PRPM Dewan Bahasa dan Pustaka. CLI dan skill untuk AI agent.",
5
5
  "keywords": [
6
6
  "bahasa-melayu",
package/src/tukar.js CHANGED
@@ -425,7 +425,11 @@ export async function keJawi(teks, cache, opts = {}) {
425
425
  * menggugurkannya. Kerana itu perlanggaran jauh lebih jarang daripada yang
426
426
  * disangka. Bila ia berlaku, SEMUA calon dilaporkan, bukan dipilih satu.
427
427
  */
428
- export function keRumi(teksJawi, cache, { penanda = ['«', '»'], dataset = null } = {}) {
428
+ export function keRumi(
429
+ teksJawi,
430
+ cache,
431
+ { penanda = ['«', '»'], dataset = null, pilihLazim = false } = {},
432
+ ) {
429
433
  const peta = petaSongsang(cache, dataset)
430
434
  const tidakDikenali = []
431
435
  const kabur = []
@@ -494,8 +498,19 @@ export function keRumi(teksJawi, cache, { penanda = ['«', '»'], dataset = null
494
498
 
495
499
  if (padanan.length === 1) keluar.push(padanan[0])
496
500
  else {
497
- kabur.push({ jawi: bahagian.slice(i, hujung + 1).join(''), calon: padanan })
498
- keluar.push(padanan.join('|'))
501
+ const rekod = { jawi: bahagian.slice(i, hujung + 1).join(''), calon: padanan }
502
+ kabur.push(rekod)
503
+ // pilihLazim menghasilkan teks yang boleh terus dibaca dengan memilih
504
+ // calon paling lazim dalam korpus DBP. Ia BUKAN pemahaman konteks:
505
+ // setiap pilihan direkod dalam medan `kabur` supaya agen atau manusia
506
+ // yang membaca ayat boleh menggantikannya. Kekerapan ialah tekaan
507
+ // terbaik tanpa konteks, bukan jawapan.
508
+ if (pilihLazim) {
509
+ rekod.dipilih = padanan[0]
510
+ keluar.push(padanan[0])
511
+ } else {
512
+ keluar.push(padanan.join('|'))
513
+ }
499
514
  }
500
515
  i = hujung
501
516
  }