Saka-NLP: Indonesian Language Processing with Prompting and Agentic AI Support
Project description
Saka: Pemrosesan Bahasa Indonesia dengan Prompting dan Dukungan AI Agentik 🇮🇩 v0.2.6
Saka (Bahasa Jawa/Bahasa Sunda: Pilar) adalah kerangka arsitektural modern untuk pemrosesan bahasa Indonesia dan daerah, dibangun dengan prinsip desain asinkron, modular, dan cerdas.
📌 Daftar Isi
✨ Fitur Utama
| Fitur | Deskripsi |
|---|---|
| ⚡ Pemrosesan Asinkron | Pemrosesan non-blokir untuk dataset berskala besar. |
| 🧩 Desain Modular | Komponen plug-and-play untuk integrasi yang mudah. |
| 🧠 Penganalisis Morfologi | Analisis afiks hibrida dengan Restrukturisasi Morfofonemik. |
| 📖 KBBI Langsung | Ekstraksi arti kata dari kamus resmi Bahasa Indonesia (KBBI). |
| Stopwords Hibrida | Bahasa Indonesia, Inggris, Sunda, Jawa, Bali, Minangkabau, Batak (Toba · Karo · Mandailing), dan bahasa gaul Jakarta Selatan |
| 🗺️ Leksikon Regional | Kamus kata yang tervalidasi: Sunda, Jawa, Bali, Minang, Batak |
| 🔠 Aksara Regional | Transliterasi Bahasa Sunda, Jawa, dan Bali (Hanacaraka). |
| 🤖 AI Agentik | Orkestrasi prompt LLM, manajemen Multi-Agent, dan Pemanggilan Alat. |
| 📊 Saka-Eval | Benchmark asinkron untuk model NLP Bahasa Indonesia (Sentimen / NER) |
| 🔗 Kata Majemuk Dinamis | Pemecahan kata majemuk secara otomatis via compounds.json |
🚀 Instalasi
Membutuhkan Python 3.8+.
# Via PyPI (Direkomendasikan)
pip install saka-nlp
# Via Source (Pengembangan)
git clone https://github.com/Muhammad-Ikhwan-Fathulloh/Saka-NLP.git
cd Saka-NLP && pip install -e .
📖 Penggunaan Dasar
Saka-NLP dirancang agar intuitif. Cukup import saka. Contoh lengkap dapat ditemukan di basic_usage.py.
1. Tokenisasi & Normalisasi
import saka
# Tokenisasi (Menangani afiks & tanda baca)
text = "Belajar NLP di era 5G, seru banget!"
tokens = saka.tokenize(text)
# ['Belajar', 'NLP', 'di', 'era', '5G', ',', 'seru', 'banget', '!']
# Normalisasi Bahasa Gaul (Bahasa Indonesia)
normalized = saka.normalize("klo gimana ntar gw k kampus")
# 'kalau bagaimana nanti saya ke kampus'
2. Morfologi & KBBI
import saka
# Analisis Morfologi (Menangani kata majemuk & fusi)
word = "mempertanggungjawabkan"
analysis = saka.analyze(word)
print(analysis["root"]) # 'tanggung jawab'
# Pencarian Langsung KBBI (Web Scraping Real-time)
res = saka.query_kbbi("belajar")
# {'status': 'found', 'definitions': [...]}
3. Stopwords Regional
import saka
# Mendukung: 'id', 'en', 'sunda', 'jawa', 'bali', 'minang', 'jaksel', 'batak', 'all'
stops = saka.get_stopwords("batak")
print("do" in stops) # True
en_stops = saka.get_stopwords("en")
print("however" in en_stops) # True
🤖 AI Agentik & Prompting
Bangun aplikasi berbasis LLM dengan kendali penuh. Contoh lengkap: output_demo.py & multi_agent_edu_demo.py.
import saka
from saka import Agent, OutputFormatter
# 1. Pemformatan Output (Hemat Token LLM!)
data = [{"word": "horas", "pos": "kata sapaan", "meaning": "halo"}]
# Format ke HTML/Markdown secara lokal
markdown_table = OutputFormatter.format(data, "markdown")
# 2. Agent Terstruktur & Pemanggilan Alat
bot = Agent("Asisten", "Ahli Linguistik")
bot.add_tool(name="cek_arti", desc="Cek KBBI", func=saka.query_kbbi)
# 3. Pembuat Prompt (Optimasi Token)
prompt = saka.build_prompt(
role="Analis",
task="Klasifikasi",
input_data="Teks...",
optimize_text=True
)
📊 Benchmark Saka-Eval
Evaluasi model Anda secara asinkron. Contoh: saka_eval_huggingface_demo.py.
from saka.evaluation.benchmarker import SakaEval
evaluator = SakaEval(task="sentiment")
# Muat via nama konfigurasi ("sentiment" atau "ner")
evaluator.load_hf_dataset("Muhammad-Ikhwan-Fathulloh/Saka-Eval", name="sentiment")
results = await evaluator.evaluate(model, text="text", label="label")
print(f"Akurasi: {results['metrics']['accuracy']:.2%}")
🔗 Penanganan Kata Majemuk Dinamis
Saka-NLP memecah kata majemuk secara otomatis via compounds.json:
| Input | Root |
|---|---|
menyebarluaskan |
sebar luas |
kerjasama |
kerja sama |
hulunagara |
hulu nagara (Sunda) |
bundokanduang |
bundo kanduang (Minang) |
🌏 Ekosistem Regional
Dukungan mendalam untuk bahasa daerah (Kamus & Aksara).
Batak (Baru di v0.2.6)
Saka-NLP sekarang mendukung Batak lintas tiga dialek — Toba, Karo, dan Mandailing — dengan leksikon 780+ kata bersumber dari tata bahasa akademis dan KamusBatak.com.
import saka
from saka.core.analyzer import _BATAK_DICT
# Kata Batak dalam pipeline morfologi
print(saka.analyze("holong")["regional_matches"]) # ['batak'] ← kasih/cinta (Toba)
print(saka.analyze("mangan")["regional_matches"]) # ['batak'] ← makan (Toba)
# Stopwords Batak
sw = saka.get_stopwords("batak")
print(f"{len(sw)} kata fungsi Batak dimuat")
# Pencarian kamus langsung
print(_BATAK_DICT["horas"]["arti"]) # 'halo, selamat (salam khas Batak Toba)'
print(_BATAK_DICT["denggan"]["arti"]) # 'baik, bagus'
Sumber:
- Nababan, P.W.J. (1981). A Grammar of Toba-Batak (D-37). Pacific Linguistics, ANU. DOI:10.15144/PL-D37
- Woollams, G. (1996). A Grammar of Karo Batak, Sumatra (C-130). Pacific Linguistics, ANU. DOI:10.15144/PL-C130
- KamusBatak.Com — Kamus Batak–Indonesia Daring
Klik untuk melihat detail aksara (Bahasa Sunda, Jawa, Bali)
Aksara Sunda (Ngalagena)
| Latin | Aksara | Latin | Aksara |
|---|---|---|---|
| ha | ᮠ | na | ᮔ |
| ... | ... | ... | ... |
Aksara Jawa (Nglegena)
| Latin | Aksara | Latin | Aksara |
|---|---|---|---|
| ha | ꦲ | na | ꦤ |
| ... | ... | ... | ... |
Aksara Bali (Wreastra)
| Latin | Aksara | Latin | Aksara |
|---|---|---|---|
| ... | ... | ... | ... |
(Tabel lengkap tersedia di Dokumentasi Web)
🛠️ CLI & Sitasi
Penggunaan CLI
saka --help
saka --normalize "ngapain ke kampus klo libur"
Sitasi
@software{Fathulloh_Saka-NLP_2026,
author = {Fathulloh, Muhammad Ikhwan},
title = {{Saka-NLP: Indonesian NLP Toolkit for Tokenization, Slang Normalization, and Agentic AI Support}},
month = {5},
year = {2026},
publisher = {Zenodo},
version = {0.2.6},
doi = {10.5281/zenodo.20092640},
url = {https://github.com/Muhammad-Ikhwan-Fathulloh/Saka-NLP}
}
🗄️ Sumber & Kredit
Saka-NLP dibangun di atas fondasi penelitian dan dataset terbuka berikut. Kami berterima kasih kepada para peneliti dan kontributor:
| Kategori | Sumber | Deskripsi |
|---|---|---|
| Dataset | Carant-AI | Dataset Sentimen Indonesia |
| Kiuyha | Dataset NER Surabaya | |
| IndoNLU | Standar Benchmark | |
| Tala Dataset | Stopwords Indonesia | |
| Leksikon | SundaDigi | Kamus Digital Sunda |
| Sastra.org | Leksikon Jawa | |
| BASAbali Wiki | Leksikon Bali | |
| KamusBatak.Com | Kamus Batak | |
| Tata Bahasa | Nababan (1981). A Grammar of Toba-Batak. DOI:10.15144/PL-D37 | Batak Toba |
| Woollams (1996). A Grammar of Karo Batak. DOI:10.15144/PL-C130 | Batak Karo | |
| Bird et al. (2009). NLTK. nltk.org | Stopwords Inggris | |
| Pedregosa et al. (2011). Scikit-learn. JMLR 12. | Stopwords Inggris | |
| Perpustakaan | HuggingFace | Dataset & Hub Ecoystem |
| scikit-learn | Metrik Evaluasi | |
| Emoji/Emot | Penanganan Teks Media Sosial |
❤️ Dukungan
- Arsitek: Muhammad Ikhwan Fathulloh
- Lisensi: MIT License
- Dukungan: Saweria | Trakteer
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file saka_nlp-0.2.6.tar.gz.
File metadata
- Download URL: saka_nlp-0.2.6.tar.gz
- Upload date:
- Size: 449.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0bbd367b30943bbc16212397c84a4b2ece25c2fb3e338c6c62bbb0af787b87ab
|
|
| MD5 |
20d9615038614b9b6cc1709ecbf00f64
|
|
| BLAKE2b-256 |
c2d3f3cffd8d4b9d060258ebf087d32da900de05c41bf6a0d0f2e95c1c92fa80
|
File details
Details for the file saka_nlp-0.2.6-py3-none-any.whl.
File metadata
- Download URL: saka_nlp-0.2.6-py3-none-any.whl
- Upload date:
- Size: 465.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8bebd47e27a4c3fab50e26831ee4f0cf38b8e9b11803af64c0f812546df8ce9d
|
|
| MD5 |
c0ee1b2262adf83f331e8913c0633f06
|
|
| BLAKE2b-256 |
0d24f1d8e583451539f3b7d991893b0bc984029072dd82a5e7d248267a2ec876
|