Skip to main content

Saka-NLP: Indonesian Language Processing with Prompting and Agentic AI Support

Project description

Saka: Indonesian NLP with Prompting and Agentic AI Support 🇮🇩

Bahasa Indonesia | English

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).
  • Emoji & Emoticon Handling: Dukungan penuh untuk konversi Unicode emoji (3,800+) dan emotikon standar menjadi teks bahasa Indonesia.

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

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.2+)

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

1. Custom Output Formatting (Token Optimization)

Anda dapat mengonversi hasil LLM ke berbagai format (Markdown, HTML, Table, CSV, JSON) secara lokal untuk menghemat token.

import saka

data = [{"id": 1, "kata": "makan"}, {"id": 2, "kata": "sare"}]
# Mendukung format: html, markdown, table, csv, json
output = saka.OutputFormatter.format(data, format_type="json")
print(output)

2. 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 Language Processing with Prompting and Agentic AI Support (Version 0.2.3) [Computer software]. Zenodo. https://doi.org/10.5281/zenodo.20092640

BibTeX

@software{Fathulloh_Saka-NLP_2026,
  author = {Fathulloh, Muhammad Ikhwan},
  title = {{Saka-NLP: Indonesian Language Processing with Prompting and Agentic AI Support}},
  month = {5},
  year = {2026},
  publisher = {Zenodo},
  version = {0.2.3},
  doi = {10.5281/zenodo.20092640},
  url = {https://github.com/Muhammad-Ikhwan-Fathulloh/Saka-NLP}
}

[!NOTE] Anda dapat menyitasi seluruh versi Saka-NLP menggunakan DOI 10.5281/zenodo.20092640. DOI ini mewakili seluruh versi dan akan selalu mengarah ke versi terbaru.

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.3.tar.gz (427.1 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.3-py3-none-any.whl (438.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: saka_nlp-0.2.3.tar.gz
  • Upload date:
  • Size: 427.1 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.3.tar.gz
Algorithm Hash digest
SHA256 76a5aeea6e35b8b917487cc01889393431d4e842599c9f1b631ac1ed466c0d91
MD5 b79d6207db587c2b24dc990b971bcaec
BLAKE2b-256 3926fb81956941fb80512aa88585b802f59e4225f94420fafa6d274fc17c1eb2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: saka_nlp-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 438.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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 559c8061f92ad0e0563954febe5de4eb3c936e8f8838057f3447c67b6c6244e0
MD5 06b54a013cd00d69aeeb1f5fdc50c20b
BLAKE2b-256 d56b7bccabcc6f331c6605466f917d86444c75779a79d84c657d4b6a3f448e83

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