Skip to main content

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

English | Bahasa Indonesia

PyPI version Documentation Colab DOI License: MIT

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:

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

saka_nlp-0.2.6.tar.gz (449.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

saka_nlp-0.2.6-py3-none-any.whl (465.1 kB view details)

Uploaded Python 3

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

Hashes for saka_nlp-0.2.6.tar.gz
Algorithm Hash digest
SHA256 0bbd367b30943bbc16212397c84a4b2ece25c2fb3e338c6c62bbb0af787b87ab
MD5 20d9615038614b9b6cc1709ecbf00f64
BLAKE2b-256 c2d3f3cffd8d4b9d060258ebf087d32da900de05c41bf6a0d0f2e95c1c92fa80

See more details on using hashes here.

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

Hashes for saka_nlp-0.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 8bebd47e27a4c3fab50e26831ee4f0cf38b8e9b11803af64c0f812546df8ce9d
MD5 c0ee1b2262adf83f331e8913c0633f06
BLAKE2b-256 0d24f1d8e583451539f3b7d991893b0bc984029072dd82a5e7d248267a2ec876

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page