Skip to main content

Saka: Pemrosesan Bahasa Nusantara dengan Dukungan Prompting & Agentic AI

Project description

Saka: The Foundation of Indonesian NLP 🇮🇩

PyPI version Documentation Colab DOI

Secara filosofis, Saka (dalam bahasa Jawa/Sunda) berarti "tiang penyangga" atau "pilar". Saka-NLP dibangun untuk menjadi sebuah architectural framework modern yang solid bagi pemrosesan teks bahasa Indonesia dan daerah.

Saka-NLP mendukung asynchronous processing, memiliki komponen yang dijaga terpisah secara modular (plug-and-play), serta menggunakan fungsi heuristik dan integrasi banyak sumber data terpercaya (seperti leksikon bahasa gaul, integrasi stopword, hingga ekstraksi KBBI resmi secara langsung).


🌐 Links


✨ Fitur Unggulan

  • Asynchronous Processing: Dilengkapi method pendamping async_* (contoh: async_tokenize) menggunakan asyncio untuk pemrosesan dataset besar secara efisien tanpa blocking.
  • Plug-and-Play Components: Fleksibel dalam memilih mesin stemming, tokenisasi, atau mengintegrasikan plugin pihak ketiga.
  • Heuristic Morphology Analyzer: Mendeteksi susunan pola awalan dan akhiran menggunakan aturan tata bahasa Indonesia yang dibekali dengan Early Stopping Validation ke dalam leksikon bahasa daerah dan pemulihan leburan huruf (Morphophonemic).
  • Live KBBI Scraper: Ekstraksi arti kata langsung mendompleng ke Kamus Besar Bahasa Indonesia Daring dari Kemendikbudristekdikti.
  • Advanced Prompting & Agentic AI: Fitur untuk merakit prompt LLM terstruktur (Role, Task, Context, Constraint) dengan dukungan Multi-Agent Orchestration dan Dynamic Tool Calling.
  • Agnostic Script Support: Termasuk dukungan untuk skrip bahasa daerah seperti Transliterasi Aksara Sunda, Aksara Jawa, dan Aksara Bali (Hanacaraka).

🚀 Panduan Instalasi

Library saka-nlp menggunakan pyproject.toml dengan bundler setuptools terbaru sehingga proses distribusinya sangat mudah.

Pastikan versi Python Anda adalah Python 3.8 atau lebih baru.

Opsi 1: Instalasi Via PyPI (Direkomendasikan)

Untuk menggunakan rilis stabil Saka-NLP, instal langsung melalui PyPI:

pip install saka-nlp

Opsi 2: Instalasi dari Source Code (Versi Deployment/Development)

Gunakan langkah ini jika Anda ingin turut berkontribusi, memodifikasi script mesin Saka-NLP, ataupun menggunakan snapshot git yang belum dirilis:

# 1. Clone repository
git clone https://github.com/Muhammad-Ikhwan-Fathulloh/Saka-NLP.git
cd Saka-NLP

# 2. Instal library beserta seluruh dependency-nya
pip install -e .

📖 Panduan Penggunaan Modul Inti

Saka-NLP didesain agar kode Python Anda menjadi bersih. Cukup lakukan satu baris import saka untuk mengeluarkan beragam utilitas tanpa membuang namespace.

0. Cek Versi

import saka

print(saka.__version__)
# Output: 0.2.1

1. Tokenisasi Cerdas

import saka

text = "Belajar sambil beramal di era konektivitas."
tokens = saka.tokenize(text)
print(tokens)
# Output: ['Belajar', 'sambil', 'beramal', 'di', 'era', 'konektivitas']

2. Normalisasi Bahasa Gaul (Slang)

Menggunakan slang lexicon yang kuat dan lengkap dari data sosial media.

import saka

normalized = saka.normalize("klo gimana gw")
print(normalized)
# Output: 'kalau bagaimana saya'

3. Analisis Morfologi Teks

Saka dilengkapi dengan Heuristic Morphology Analyzer mutakhir. Modul ini bukan hanya sekedar memotong imbuhan secara serakah layaknya Stemming pada umumnya. Saka mampu merekonstruksi peleburan huruf (Morphophonemic Restructuring) dari imbuhan, menyelesaikan akar bentuk Kata Majemuk Serangkai, bahkan tervalidasi secara hibrida dengan pangkalan data daerah.

import saka

# Menangani kata majemuk & afiks luluh
print(saka.analyze("menyebarluaskan"))
# Output: {'root': 'sebar luas', 'prefixes': ['meny'], 'suffixes': ['kan'], 'type': 'unknown', 'regional_matches': []}

# Memanfaatkan validasi kamus daerah (*Early Stopping*)
print(saka.analyze("dipikanyaah"))
# Output: {'root': 'nyaah', 'prefixes': ['dipika'], 'suffixes': [], 'type': 'regional', 'regional_matches': ['sunda']}

4. Live Integrasi Pencarian KBBI

Saka menggunakan library pendukung (requests & bs4) untuk mengurai jawaban dari situs kbbi.web.id. Ini wajib menggunakan akses jaringan internet.

import saka

kbbi_result = saka.query_kbbi("belajar")

if kbbi_result["status"] == "found":
    for arti in kbbi_result["definitions"]:
        print(f"Arti: {arti}")
else:
    print("Kata tidak terdaftar di KBBI Daring.")

# Output:
# Arti: petunjuk yang diberikan kepada orang supaya diketahui (diturut)
# Arti: ilmu yang dituntut secara tidak sempurna, tidak akan berfaedah
# Arti: berusaha memperoleh kepandaian atau ilmu:
# Arti: berlatih:
# Arti: berubah tingkah laku atau tanggapan yang disebabkan oleh pengalaman

5. Koleksi Stopwords Nusantara & Internasional (Hybrid)

Kumpulan Stopwords yang langsung dirender ke dalam object Set Python agar latensinya O(1) untuk kebutuhan ML. Mendukung corpus Indonesia (Tala), daerah (Sunda, Jawa, Bali), hingga bahasa Internasional (English) dan Slang (Jaksel).

import saka

# 1. Mengambil semua stopword (gabungan semua bahasa)
all_stops = saka.get_stopwords(lang="all") # "all" adalah parameter default
print(f"Total Stopwords Gabungan: {len(all_stops)}") # Output: 900+

# 2. Mengambil stopword khusus bahasa Sunda
sunda_stops = saka.get_stopwords(lang="sunda")
print(f"Apakah 'saha' stopword Sunda? {'saha' in sunda_stops}") # Output: True

# 3. Mengambil stopword khusus Jawa ('jawa') atau Bali ('bali')
jawa_stops = saka.get_stopwords(lang="jawa")
bali_stops = saka.get_stopwords(lang="bali")

# 4. Bahasa Inggris ('en') dan Gaul Jakarta Selatan ('jaksel')
en_stops = saka.get_stopwords(lang="en")
jaksel_stops = saka.get_stopwords(lang="jaksel")
print(f"Jaksel slang: {'literally' in jaksel_stops}") # Output: True

6. Advanced Prompting & Agentic AI (v0.2.1+)

Saka-NLP kini mendukung perakitan prompt yang sangat terstruktur, efisien secara token, dan mendukung pola ReAct Agent serta pemanggilan fungsi (Tool Calling).

1. Structured Prompting & Token Evaluation

import saka

prompt_data = saka.build_prompt(
    role="Virtual Teacher",
    task="Bantuan belajar siswa.",
    input_data="Gw mau belajar kalkulus",
    return_meta=True # Mendapatkan metadata termasuk jumlah token
)

print(f"Tokens: {prompt_data['token_count']}")
print(prompt_data['prompt'])

2. Multi-Agent Orchestration

from saka import MultiAgentManager

mgr = MultiAgentManager()
mgr.add_agent("math", "Alih Matematika", "Selesaikan soal kalkulus.")
mgr.add_agent("science", "Ahli Sains", "Selesaikan soal fisika.")

# Dapatkan prompt untuk Router Agent
router_prompt = mgr.route_prompt("Soal tentang gravitasi")
print(router_prompt)

3. Dynamic Tool Calling

from saka import Agent

bot = Agent("Asisten Nilai", "Cek nilai siswa.")
bot.add_tool(
    name="get_grade",
    desc="Ambil nilai",
    params={"name": "string"},
    func=lambda name: f"Nilai {name}: 90" # Fungsi Python asli
)

# Simulasi eksekusi tool berdasarkan output LLM
res = bot.call_tool("get_grade", {"name": "Budi"})
print(res) # Output: Nilai Budi: 90

1. Ekosistem Sunda

Dukungan penuh untuk kamus digital SundaDigi dan transliterasi Aksara Sunda.

import saka

# Kamus Sunda
res = saka.query_sundadigi("wilujeng")
print(res["definitions"]["arti"]) # Output: selamat

# Aksara Sunda
print(saka.latin_to_aksara_sunda("saka")) # Output: ᮞᮊ

2. Ekosistem Jawa

Integrasi Leksikon Sastra.org dan mesin transliterasi Hanacaraka (Nglegena).

import saka

# Kamus Jawa
res = saka.query_sastra("sugeng")
print(res["definitions"][0]["arti"]) # Output: selamat

# Aksara Jawa
print(saka.latin_to_aksara_jawa("hanacaraka")) # Output: ꦲꦤꦕꦫꦏ

3. Ekosistem Bali

Pemanfaatan BASAbali Wiki dan dukungan penuh Aksara Bali (Wreastra).

import saka

# Kamus Bali
res = saka.query_basabali("rahajeng")
print(res["definitions"][0]["arti"]) # Output: selamat

# Aksara Bali
print(saka.latin_to_aksara_bali("bali 2026.")) 
# Output: ᬩᬮᬶ ᭒᭐᭒᭖᭟

🏛️ Detail Aksara Nusantara

Saka-NLP menggunakan pemetaan standar untuk transliterasi dasar bahasa daerah.

1. Aksara Sunda (Ngalagena)

Latin Aksara Latin Aksara
ha na
ca ra
ka da
ta sa
wa la
pa ja
ya nya
ma ga
ba nga

2. Aksara Jawa (Nglegena)

Latin Aksara Latin Aksara
ha na
ca ra
ka da
ta sa
wa la
pa dha
ja ya
nya ma
ga ba
tha nga

3. Aksara Bali (Wreastra)

Konsonan (Wreastra)

Latin Aksara Latin Aksara
ha da
na ta
ca sa
ra wa
ka la
ma pa
ga ja
ba ya
nga nya

Angka Bali

Angka Aksara Angka Aksara
0 5
1 6
2 7
3 8
4 9

Pangangge Suara (Sandhangan Bali)

Bunyi Aksara Nama
-i Ulu
-u Suku
Taling
-o Taling Detia
-e / -ě Pepet

🛠️ Penggunaan Melalui Command Line (CLI)

Saka-NLP menyertakan perintah langsung alias di dalam instalasinya. Anda dapat mengakses ini langsung di terminal!

# Melihat bantuan list CLI
saka --help

# Membedah morfologi kata secara cepat di Shell/CMD Anda
saka --stem "dimakan"

# Melakukan Normalisasi
saka --normalize "ngapain ke kampus klo libur"

📚 Sitasi (Citation)

Jika Anda menggunakan Saka-NLP dalam penelitian atau proyek Anda, mohon sitasi repositori ini menggunakan salah satu format berikut:

APA

Fathulloh, M. I. (2026). Saka-NLP: Indonesian NLP Toolkit for Tokenization and Slang Normalization (Version 0.2.0) [Computer software]. Zenodo. https://doi.org/10.5281/zenodo.20092641

BibTeX

@software{Fathulloh_Saka-NLP_2026,
  author = {Fathulloh, Muhammad Ikhwan},
  title = {{Saka-NLP: Indonesian NLP Toolkit for Tokenization and Slang Normalization}},
  month = {5},
  year = {2026},
  publisher = {Zenodo},
  version = {0.2.0},
  doi = {10.5281/zenodo.20092641},
  url = {https://github.com/Muhammad-Ikhwan-Fathulloh/Saka-NLP}
}

Untuk format lainnya, Anda dapat mengecek file CITATION.cff di repositori ini.


🗄️ Referensi & Sumber Data

❤️ Credits & Support

Lisensi Terbuka di bawah MIT License.

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.1.tar.gz (424.5 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.1-py3-none-any.whl (434.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: saka_nlp-0.2.1.tar.gz
  • Upload date:
  • Size: 424.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.0

File hashes

Hashes for saka_nlp-0.2.1.tar.gz
Algorithm Hash digest
SHA256 803720a716698e8934d0d51904b7a35f93c19ea06f6dd67877f49aac5078ffcf
MD5 22b077cc239a48c3c756570e90811ef4
BLAKE2b-256 31cfbd98c7d6f93c82df51df04639eebd4ded8de46173683b6f655488ee16501

See more details on using hashes here.

File details

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

File metadata

  • Download URL: saka_nlp-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 434.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.0

File hashes

Hashes for saka_nlp-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 36ca3b88e71bcd2ac7cd60fbe29998eafeb383f2b433e8c1d020bf27cfa75791
MD5 47635e7fa0f5e4242d5c9df913ff5c02
BLAKE2b-256 37a61d1a0310f71b082e6bf9d5f0ab29f9ff7fdea31bb727f5265d10915cb1ec

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