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.7

English | Bahasa Indonesia

PyPI version Documentation Colab Apify Actor 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 Mendukung operasi non-blokir untuk memproses dataset berskala besar secara efisien tanpa menunggu satu tugas selesai terlebih dahulu.
Optimasi Performa Caching LRU pada normalize(), analyze(), dan get_stopwords() untuk mengurangi waktu pemrosesan berulang dan meningkatkan kecepatan.
Desain Modular Komponen yang dapat dipisah dan dipasang (plug-and-play) untuk mempermudah integrasi dengan aplikasi lain atau penambahan fitur baru.
Penganalisis Morfologi Analisis afiks Bahasa Indonesia dan daerah secara hibrida dengan Restrukturisasi Morfofonemik untuk memisahkan dan memahami struktur kata, termasuk kata majemuk dan kata turunan.
KBBI Langsung Ekstraksi arti kata secara real-time dari kamus resmi Bahasa Indonesia (KBBI) melalui web scraping untuk mendapatkan definisi yang akurat.
Stopwords Hibrida Mendukung stopwords untuk berbagai bahasa dan dialek: Bahasa Indonesia, Inggris, Sunda, Jawa, Bali, Minangkabau, Batak (Toba, Karo, Mandailing), dan bahasa gaul Jakarta Selatan.
Leksikon Regional Menyediakan kamus kata yang telah divalidasi untuk bahasa daerah seperti Sunda, Jawa, Bali, Minang, dan Batak.
Transliterasi Aksara Regional Memungkinkan konversi teks antara huruf Latin dan aksara tradisional Bahasa Sunda (Ngalagena), Jawa (Nglegena), dan Bali (Wreastra).
AI Agentik Menyediakan alat untuk mengorkestrasi prompt LLM (Large Language Model), mengelola multi-agent, dan memanggil fungsi kustom (tool calling) untuk membangun aplikasi berbasis AI.
Saka-Eval Suite benchmark asinkron untuk mengevaluasi performa model NLP Bahasa Indonesia pada tugas seperti analisis sentimen dan Named Entity Recognition (NER).
Penanganan Kata Majemuk Dinamis Memisahkan kata majemuk Bahasa Indonesia dan daerah secara otomatis menggunakan aturan yang ditentukan di compounds.json.
Apify Actor Menjalankan Saka di platform Apify untuk otomatisasi web scraping dan pemrosesan teks Bahasa Indonesia di cloud, tersedia di ikhwan_fathulloh/saka-nlp-actor.

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, kata-kata, tanda baca, URL, mention, hashtag, dan emoji)
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 dan fusi afiks)
word = "mempertanggungjawabkan"
analysis = saka.analyze(word)
print(analysis["root"])  # 'tanggung jawab'

# Pencarian Langsung KBBI (Web Scraping Real-time)
res = saka.query_kbbi("ajar")
# {'status': 'found', 'definitions': [...]}
3. Stopwords Regional
import saka

# Mendukung: 'id', 'en', 'sunda', 'jawa', 'bali', 'minang', 'jaksel', 'batak', 'all'

# Dapatkan stopwords Batak
stops = saka.get_stopwords("batak")
print("do" in stops)  # True

# Dapatkan stopwords Inggris
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)
# Format data ke HTML/Markdown/CSV/JSON secara lokal tanpa perlu memanggil LLM
data = [{"word": "horas", "pos": "kata sapaan", "meaning": "halo"}]
markdown_table = OutputFormatter.format(data, "markdown")

# 2. Agent Terstruktur & Pemanggilan Alat
bot = Agent("Asisten", "Ahli Linguistik")
bot.add_tool(name="cek_arti", desc="Cek arti kata di KBBI", func=saka.query_kbbi)

# 3. Pembuat Prompt (Optimasi Token)
# Bangun prompt yang terstruktur untuk LLM dengan opsi optimasi teks
prompt = saka.build_prompt(
    role="Analis",
    task="Klasifikasi teks Bahasa Indonesia",
    input_data="Teks yang akan diklasifikasikan...",
    optimize_text=True
)

Benchmark Saka-Eval

Evaluasi model Anda secara asinkron. Contoh: saka_eval_huggingface_demo.py.

import asyncio
from saka.evaluation.benchmarker import SakaEval

async def run():
    evaluator = SakaEval(task="sentiment")
    # Muat dataset via nama konfigurasi ("sentiment" atau "ner") atau dari Hugging Face Hub
    evaluator.load_hf_dataset("Muhammad-Ikhwan-Fathulloh/Saka-Eval", name="sentiment")

    # Evaluasi model dengan data teks dan label
    results = await evaluator.evaluate(model, text="text", label="label")
    print(f"Akurasi: {results['metrics']['accuracy']:.2%}")

asyncio.run(run())

Penanganan Kata Majemuk Dinamis

Saka-NLP memecah kata majemuk secara otomatis menggunakan aturan yang ditentukan di 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 melalui kamus dan aksara tradisional.

Batak (Baru di v0.2.7)

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:

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.7},
  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 NLP Bahasa Indonesia
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 Tata Bahasa Batak Toba
Woollams (1996). A Grammar of Karo Batak. DOI:10.15144/PL-C130 Tata Bahasa Batak Karo
Bird et al. (2009). NLTK. nltk.org Stopwords Inggris
Pedregosa et al. (2011). Scikit-learn. JMLR 12. Stopwords Inggris dan Metrik Evaluasi
Perpustakaan HuggingFace Dataset & Hub Ekosistem Model
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.7.tar.gz (450.2 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.7-py3-none-any.whl (465.6 kB view details)

Uploaded Python 3

File details

Details for the file saka_nlp-0.2.7.tar.gz.

File metadata

  • Download URL: saka_nlp-0.2.7.tar.gz
  • Upload date:
  • Size: 450.2 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.7.tar.gz
Algorithm Hash digest
SHA256 511217e67b480d11b149ab5c81ed81cf1cdc27e285eca30d7900e0b2aaccb380
MD5 78a13df144b15889a0cac4fcff54031b
BLAKE2b-256 66a3dfc1edd93235a7a3b0e09ee3ef4174c7292d29c24c63fff4dd73c0d527c9

See more details on using hashes here.

File details

Details for the file saka_nlp-0.2.7-py3-none-any.whl.

File metadata

  • Download URL: saka_nlp-0.2.7-py3-none-any.whl
  • Upload date:
  • Size: 465.6 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.7-py3-none-any.whl
Algorithm Hash digest
SHA256 4cd222d98d7f34fdbc07e8923da9ab261ddb9bd1fe122184de053ab452f5b288
MD5 50a0108616e24a6677e462f1d1c0c165
BLAKE2b-256 5882227ced23b3290e1815049aa1a77eed4e5d8de443b8fd2e07bec59f315485

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