📦 Panduan Instalasi

Saka-NLP sangat mudah diinstalasi dan dikelola secara resmi melalui repositori Python Package Index (PyPI). Pastikan Anda menggunakan versi Python minimal 3.8.


bash
pip install saka-nlp

Jika Anda tertarik untuk berpartisipasi dan berkontribusi secara mandiri (*source installation*):


bash
git clone https://github.com/Muhammad-Ikhwan-Fathulloh/Saka-NLP.git
cd Saka-NLP
pip install -e .

Pemrosesan Dasar: tokenize

Membelah kalimat Indonesia yang rumit menjadi token-token individual, melestarikan tanda baca dengan cerdas.

def tokenize(text: str) -> List[str]
Parameter Type Keterangan
text str Teks string murni yang ingin dipecah ke dalam representasi token.
python
import saka

tokens = saka.tokenize("Halo, apa kabar Dunia-ku?!")
print(tokens) 
# Output: ['Halo', ',', 'apa', 'kabar', 'Dunia-ku', '?', '!']

Note: Tersedia juga versi asynchronous await saka.async_tokenize(text) untuk pemrosesan dataset besar berbasis event loop.

Pemurnian Bahasa: normalize

Melakukan standardisasi bahasa gaul (Slang), *typographical error* umum ke dalam standar formal tata bahasa Indonesia.

def normalize(text: str) -> str
python
import saka

text = saka.normalize("gmn nih bro klo bsk ujiann")
print(text)
# Output: "bagaimana ini saudara kalau besok ujian"

Morfologi Tingkat Tinggi: analyze

Sistem heuritistik komprehensif yang mengatasi stemming konvensional. Fitur ini dilengkapi Morphophonemic Fix untuk peleburan kata dan Dictionary Early Stopping via leksikon daerah untuk mencegah over-stemming.

def analyze(word: str) -> Dict[str, Any]
python
import saka

# Morphophonemic Fusion & Pemisahan Kata Majemuk
res = saka.analyze("menyebarluaskan")
print(res["root"]) # Output: 'sebar luas'

# Deteksi dialek regional (Sunda / Minang)
res2 = saka.analyze("bundokanduang")
print(res2["root"], res2["regional_matches"])
# Output: 'bundo kanduang' ['minang']

Penyaringan Kata: get_stopwords

Memanggil *set* berisi daftar stopwords Nusantara dan Internasional dengan kecepatan baca O(1).

def get_stopwords(lang: str = "all") -> Set[str]
Argumen lang Cakupan *Corpus*
"all" (Default) Gabungan seluruh bahasa yang didukung. (900+ kata)
"id" Eksklusif Stopwords Indonesia versi Tala Dataset.
"sunda" / "jawa" / "bali" / "minang" Eksklusif Stopwords region yang diminta.
"en" / "jaksel" Eksklusif Stopwords Internasional (English) dan Slang (Jaksel).
python
import saka

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

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

# 3. Mengambil stopword Inggris ('en') dan Gaul Jaksel ('jaksel')
en_stops = saka.get_stopwords("en")
jaksel_stops = saka.get_stopwords("jaksel")
print("literally" in jaksel_stops) # Output: True
print("however" in en_stops) # Output: True

Optimalisasi Output: OutputFormatter

Mengonversi data hasil LLM ke berbagai format secara lokal untuk menghemat token dan meningkatkan performa.

class OutputFormatter:
  def format(data: Any, format_type: str) -> str
Format Type Hasil Transformasi
"html" Konversi Markdown/Data ke kode HTML (Local Process).
"markdown" Konversi ke tabel/list Markdown terstruktur.
"table" Konversi ke tabel Plain Text/ASCII.
"csv" Konversi List of Dicts ke format CSV.
"json" Konversi data ke format JSON string terformat.
python
import saka

data = [{"id": 1, "text": "makan"}, {"id": 2, "text": "sare"}]

# Format ke HTML secara lokal (Hemat Token!)
html_res = saka.OutputFormatter.format(data, "html")
print(html_res)

# Format ke JSON
json_res = saka.OutputFormatter.format(data, "json")

Prompt Builder LLM: build_prompt

Saka-NLP menyediakan fungsi untuk merakit struktur prompt LLM yang ideal beserta optimasi token dan fitur otomatisasi parsing (penguraian teks).

def build_prompt(instruction: str, input_data: str, context: str, ...) -> str
def parse_llm_output(text: str, format_type: str) -> Any
python
import saka

prompt = saka.build_prompt(
    instruction="Klasifikasikan sentimen dari ulasan berikut.",
    context="Anda adalah asisten AI.",
    input_data="Makanannya enak bgt tpi pelayanannya lama parah...",
    output_indicator="JSON",
    optimize_text=True, 
    max_tokens=50
)

print(prompt)

# Parsing Output LLM (Contoh)
llm_response = "```json\n{\"sentimen\": \"negatif\"}\n```"
hasil_dict = saka.parse_llm_output(llm_response, format_type="json")
print(hasil_dict["sentimen"]) # Output: negatif

Evaluasi & Benchmark: SakaEval

Modul untuk menjalankan evaluasi performa model pada berbagai tugas NLP (Sentiment, NER, QA) secara asynchronous.

class SakaEval:
  def load_hf_dataset(path: str, data_files: Optional[str]) -> None
  async def evaluate(model: Any, **column_mapping) -> Dict[str, Any]
python
from saka.evaluation.benchmarker import SakaEval

evaluator = SakaEval(task="sentiment")
evaluator.load_hf_dataset("Muhammad-Ikhwan-Fathulloh/Saka-Eval", name="sentiment")

# Evaluasi asinkron
results = await evaluator.evaluate(model, text="text", label="label")
evaluator.save_report("report.json")

Integrasi Daring: query_kbbi

Pencarian arti kata langsung mengekstraksi situs resmi Kemendikbud menggunakan pendekatan Web Scraping *Real-time*.

def query_kbbi(word: str) -> Dict[str, Any]
python
import saka

res = saka.query_kbbi("mahakarya")
print(res["definitions"])
# Output: ['karya besar', 'karya gemilang']

Ekosistem & Leksikon Sunda

Saka-NLP memiliki modul khusus Bahasa Sunda untuk meretrieve definisi secara lokal dan bertukar Aksara.

def query_sundadigi(word: str) -> Dict[str, Any]
def latin_to_aksara_sunda(text: str) -> str
def aksara_sunda_to_latin(text: str) -> str
python
import saka

# Dictionary Definition Search
res = saka.query_sundadigi("wilujeng")
print(res["definitions"]["arti"]) # Output: selamat

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

Ekosistem & Leksikon Jawa

Sinkronisasi offline kamus bahasa Jawa dan modul konversi Hanacaraka berbasis tata tulis Keraton/Sastra.

def query_sastra(word: str) -> Dict[str, Any]
def latin_to_aksara_jawa(text: str) -> str
def aksara_jawa_to_latin(text: str) -> str
python
import saka

# Dictionary Definition Search
res = saka.query_sastra("sugeng")
print(res["definitions"][0]["arti"]) # Output: selamat, sejahtera

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

Ekosistem & Leksikon Bali

Integrasi BASAbali Wiki untuk pencarian leksikal dan dukungan transliterasi Aksara Bali (Wreastra) yang komprehensif.

def query_basabali(word: str) -> Dict[str, Any]
def latin_to_aksara_bali(text: str) -> str
def aksara_bali_to_latin(text: str) -> str
python
import saka

# Dictionary Definition Search (Offline Fallback)
res = saka.query_basabali("rahajeng")
print(res["definitions"][0]["arti"]) # Output: selamat

# Transliterasi Aksara Bali (Latin -> Aksara)
aksara = saka.latin_to_aksara_bali("bali 2026.")
print(aksara) # Output: ᬩᬮᬶ ᭒᭐᭒᭖᭟

📚 Sitasi (Citation)

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

APA

Fathulloh, M. I. (2026). Saka-NLP: Indonesian NLP Toolkit for Tokenization and Slang Processing with Prompting and Agentic AI Support (Version 0.2.5) [Computer software]. Zenodo. https://doi.org/10.5281/zenodo.20092640

Note: Anda dapat menyitasi seluruh versi Saka-NLP menggunakan DOI 10.5281/zenodo.20092640. DOI ini mewakili seluruh versi dan selalu mengarah ke yang terbaru.

BibTeX

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.5},
  doi = {10.5281/zenodo.20092640},
  url = {https://github.com/Muhammad-Ikhwan-Fathulloh/Saka-NLP}
}