Langsung ke konten
AFM Studio
  • Halaman

    AFM Studio
  • Karya
  • Lab
  • Tentang
  • CV
  • Kontak
  • Proyek

    AksaraPerpustakaan pengetahuan Otorita IKN yang bisa dicari, dengan server memeriksa akses setiap pembaca di tiga tingkat
  • Daily TaqwaSistem presensi salat anti-manipulasi untuk ~2.000 pegawai OIKN di Masjid Negara IKN
  • Lantara v2Mesin perizinan Otorita IKN tempat administrator menambah jenis izin baru dari layar, tanpa developer
  • eKiosk IKNDua ruang kendali untuk Nusantara: konten kios dan pelacakan bus live dengan estimasi kedatangan yang menilai dirinya sendiri
  • E-Monev IKNPlatform pemantauan pembangunan Nusantara selama 23 tahun, melacak progres triwulan setiap unit terhadap 24 KPI
  • JDIH OIKNPortal dokumen hukum publik OIKN, dengan alur penerbitan terkendali dan ringkasan AI yang tidak pernah keluar dari server
  • Jejak PenanamanAplikasi absen acara penanaman pohon IKN yang membuktikan peserta hadir di lokasi lewat selfie ber-geofence
  • Dashboard SAKTIPipeline malam dan dashboard yang menggantikan unduhan anggaran manual di keenam satker OIKN
  • DoseRxKalkulator dosis untuk 127 obat yang membulatkan dosis ke tablet dan sirup yang dijual apotek Indonesia
  • CubiqPelatih speedcubing dengan timer setara kompetisi dan solver buatan sendiri untuk 8 puzzle utama
  • ScimotionPerpustakaan sains interaktif berisi 86 artikel, masing-masing dijelaskan bersama animasi yang bisa dikendalikan pembaca
  • WA Daily Scrum BotBot WhatsApp yang menagih laporan standup tim 14 orang dan menandai tugas yang macet berhari-hari

↑ ↓ untuk berpindah · Enter untuk membuka · Esc untuk menutup

Stemmer Visualizer

Tampilan langkah demi langkah cara kata Indonesia dikupas ke kata dasarnya, termasuk jalan buntu dan akar ganda

Tangkapan layar
kata dasar di kamus yang bisa diubah
~30.000
aturan stemming disimpan sebagai data bersumber
44
kata dibandingkan dengan Sastrawi, perbedaannya diklasifikasi
315
library NLP saat runtime
0
Di halaman ini

Masalahnya

Hampir semua mesin pencari dan alat bahasa untuk bahasa Indonesia terlebih dulu mengembalikan kata ke bentuk dasarnya, supaya mempelajari, pelajaran, dan belajar sama-sama dihitung sebagai ajar. Langkah ini disebut stemming. Di Indonesia, stemming hampir selalu memakai algoritma Nazief dan Adriani, biasanya lewat library Sastrawi, sebagai kotak hitam: kata masuk, kata dasar keluar.

Ini membawa tiga masalah bagi mahasiswa, dosen, dan developer yang mengandalkannya. Kata dasar yang salah terlihat sama dengan yang benar, karena keduanya tetap kata Indonesia yang masuk akal. Hasilnya bergantung pada kamus kata dasar yang tersembunyi, sama besarnya dengan bergantung pada aturannya. Lalu ada kata yang punya dua kata dasar yang sah. Beruang bisa berarti ber- ditambah uang ("punya uang") atau kata dasar beruang (hewan). Algoritmanya memilih salah satu tanpa memberi tahu.

Yang saya bangun

Setiap langkah tampil di layar, termasuk jalan buntunya

Ketik sebuah kata, dan jejaknya menampilkan setiap langkah sebagai baris bernomor: apa yang dilepas, aturan mana yang melakukannya, kata sebelum dan sesudahnya, dan apakah kamus mengenali hasilnya. Langkah yang dicoba lalu ditinggalkan tetap terlihat, dicoret dengan warna abu-abu. Anda bisa menelusurinya selangkah demi selangkah, dan sebuah animasi mengupas setiap awalan atau akhiran dari katanya.

Aturannya berupa data yang bisa dibaca ahli bahasa

Tidak satu pun dari 44 aturan ditulis sebagai kode. Setiap aturan disimpan di berkas data lengkap dengan polanya, efeknya, prioritasnya, dan kutipan sumbernya. Mesinnya membaca berkas itu lalu menerapkannya. Ahli bahasa bisa memeriksa aturannya tanpa membaca kode, dan jejaknya bisa menyebut aturan persis yang dipakai. Build gagal kalau ada aturan tanpa kutipan.

Kamusnya bisa diubah

Saya menjadikan kamus sebagai masukan eksplisit untuk setiap perhitungan. Panel kamus memungkinkan Anda mencari, menambah, atau menghapus kata, lalu melihat stem yang tadinya benar menjadi rusak. Perubahan tersimpan di link, jadi keadaan yang rusak itu pun bisa dibagikan. Tampilan perbandingan menunjukkan kata yang sama dengan dan tanpa kamus, sehingga terlihat jelas apa sumbangan kamusnya.

Kata yang ambigu mendapat lebih dari satu jawaban

Aturan yang sama menjalankan dua penelusuran. Yang pertama mengikuti algoritma dan mengembalikan satu jawaban. Yang kedua menjelajahi semua cara kata itu bisa dipecah. Untuk beruang, aplikasi menampilkan kedua kata dasar yang sah dan menjelaskan alasan algoritma memilih salah satunya. Galeri enam kata yang salah dihitung algoritma ini dihitung ulang secara langsung, masing-masing diberi label cara dan titik kegagalannya.

Sastrawi menjadi pembanding untuk pengujian

Saya membandingkan hasil saya dengan Sastrawi pada 315 kata dan menemukan sembilan perbedaan. Tiga di antaranya bug saya: dua entri kamus yang salah dan satu aturan yang terlewat. Enam sisanya diklasifikasikan secara tertulis, dan setiap perbedaan dikunci oleh tes supaya tidak ada yang mengubahnya diam-diam. Makalah aslinya tidak bisa saya dapatkan, jadi setiap aturan ditandai belum terverifikasi dan ada berkas celah yang mencatat di mana harus memeriksanya.

Hasilnya

Stemmer Visualizer sudah live, terbuka untuk umum, dan open source, dalam bahasa Indonesia dan Inggris, serta bisa dipakai offline. Ada tujuh halaman, termasuk referensi aturan yang dibangkitkan dari data aturannya dan mode dokumen yang menandai kata ambigu dalam paragraf yang ditempel. Aplikasi ini memakai daftar kata dasar Sastrawi yang berisi sekitar 30.000 kata. Perubahan itu memperbaiki dua perbedaan tetapi merusak satu kata, perusakan, yang kini menghasilkan rusa. Saya menerimanya dan mencatatnya. Situs ini menautkan Sastrawi sebagai library yang sebaiknya dipakai di produksi. Saya membangunnya dalam sekitar sembilan jam pada 5 Agustus 2026.

Di balik layarDetail teknis untuk engineer
  • Mesin di lib/engine/ terdiri dari tujuh modul murni. Signature: (word, variant, ruleSet, dictionary) → StemTrace. Tanpa React, DOM, jam, atau state modul; masukan yang sama menghasilkan jejak yang identik sampai ke byte.
  • interpret.ts mengikuti prioritas; enumerate.ts menjelajahi setiap segmentasi. Tes menguji kesahihan (kata dasar yang dikembalikan ada di himpunan kandidat), bukan kesamaan.
  • Aturan disimpan di data/rules/na96.json dengan id tetap seperti na96.awalan.me.luluh.ny. pnpm rules:validate memeriksa skema, kutipan, dan konflik prioritas dengan Zod, dan menjadi gerbang build serta deploy.
  • Ke-44 aturan bertanda verification: "unverified". Makalah 1996, perluasan 2005, dan versi TALIP 2007 tidak bisa didapat; data/rules/GAPS.md mencatat apa saja yang sudah dicoba. Sebuah tes menguji jumlah aturan yang belum terverifikasi, jadi memverifikasi satu aturan memaksa tes itu diperbarui.
  • Oracle: PySastrawi 1.2.1 pada 315 kata → 9 perbedaan. Yang diperbaiki: hargai dan sertai yang keliru tercatat sebagai kata dasar, serta aturan per- sebelum konsonan yang terlewat (aturan 22), yang sekaligus memperbaiki pertemuan → temu. Enam sisanya diklasifikasikan di tests/oracle/divergences.md.
  • Tes dikunci ke kamus kurasi 293 kata, karena semua fixture ditulis berdasarkan kamus itu. Daftar yang dirilis berisi 29.932 kata (sekitar 290 KB), disertakan sebagai data di bawah lisensi MIT Sastrawi dan dimuat sebagai chunk tersendiri agar JS aplikasi tetap di bawah 200 KB gzip. Tidak ada kode Sastrawi yang ikut dirilis.
  • Varian 2005 baru sebagian: perbandingan tanpa kamus sudah ada, tetapi paket aturannya harus dikarang kalau dibuat sekarang, jadi belum ada.
  • Abu-abu pensil dipecah menjadi dua nada supaya teks sekunder lolos WCAG AA. Proyek ini bernama Kupas di PRD; kupas masih dipakai sebagai rute halaman jejak.
  • Static export Next.js 14, 7 rute × 2 bahasa, 20 komponen, lima dependensi runtime tanpa library NLP. 59 tes Vitest di 6 berkas. Sekitar 5.480 baris, 42 commit.

Tangkapan layar

Beranda
Kupas
Kandidat
Kamus
Aturan
Galeri Kegagalan

Sedang merekrut, atau membangun hal serupa?

Saya terbuka untuk posisi full-time dan proyek freelance tertentu.