Skip to main content

Saka: Pilar Pemrosesan Bahasa Nusantara

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

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. Prompt Builder LLM (Optimasi Prompt)

Saka-NLP menyediakan alat untuk merakit struktur prompt LLM yang ideal (berdasarkan Anatomi Prompt) sekaligus melakukan optimasi token dan normalisasi bahasa gaul sebelum dikirim ke LLM.

import saka

prompt = saka.build_prompt(
    instruction="Klasifikasikan sentimen dari ulasan berikut.",
    context="Anda adalah asisten AI yang ahli dalam menganalisis sentimen restoran.",
    input_data="Makanannya enak bgt tpi pelayanannya lama parah...",
    output_indicator="JSON",
    optimize_text=True, # Otomatis mengubah "bgt tpi" -> "banget tapi" dll.
    max_tokens=50       # Memotong teks jika melebihi 50 token
)

print(prompt)
# Output:
# [Instruksi]:
# Klasifikasikan sentimen dari ulasan berikut.
# 
# [Konteks]:
# Anda adalah asisten AI yang ahli dalam menganalisis sentimen restoran.
# 
# [Data Input]:
# Makanannya enak banget tapi pelayanannya lama parah...
# 
# [Indikator Output]:
# JSON
# (Keluarkan output HANYA dalam format JSON tanpa pengantar maupun penjelasan tambahan)

Selain itu, Anda dapat mem-parsing (mengurai) hasil teks dari LLM menjadi objek native Python dengan mudah.

import saka

llm_response = """
Tentu, berikut adalah hasilnya:
```json
{"sentimen": "negatif", "alasan": "pelayanan lambat"}

"""

Otomatis mengekstrak markdown json block

hasil_dict = saka.parse_llm_output(llm_response, format_type="json") print(hasil_dict["sentimen"])

Output: negatif


#### 1. Ekosistem Sunda
Dukungan penuh untuk kamus digital SundaDigi dan transliterasi Aksara Sunda.

```python
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

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.0.tar.gz (421.6 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.0-py3-none-any.whl (429.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: saka_nlp-0.2.0.tar.gz
  • Upload date:
  • Size: 421.6 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.0.tar.gz
Algorithm Hash digest
SHA256 658add16bbe6dbf1fcd535f6885d78047bf8c90a52f88f9307cf4d354baeb84f
MD5 c080e48dcfe7a573e86ec5a62bb148c1
BLAKE2b-256 4d4e09ad66b96feee5aa2ef2d440e5f8fc74494c2a8cd9d597cca80d4f964c8d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: saka_nlp-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 429.8 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d145ccdbc800ae59e1b39385004c9df4aacfef7f9e296f99a1b750826a432995
MD5 4f3df64012d4a272a21d5a551e7883b9
BLAKE2b-256 351566cc5f7fd6fccec0768a90b75bd1221c46c2612bb00c52ba8ccc6a99a822

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