npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

nusantara-nlp

v0.1.0

Published

Nusantara NLP library for JavaScript/TypeScript — Bahasa Indonesia

Downloads

161

Readme

Nusantara NLP (JS/TS) 🇮🇩

Porting pustaka Nusantara NLP dari Python ke JavaScript/TypeScript. Pustaka ini dirancang khusus untuk pemrosesan bahasa alami (Natural Language Processing - NLP) teks Bahasa Indonesia dengan performa tinggi dan dukungan penuh untuk modul ES (ESModules).

Pustaka ini sangat cocok untuk preprocessing teks sebelum analisis sentimen, klasifikasi teks, pembuatan chatbot, maupun kebutuhan data mining lainnya.


🚀 Fitur Utama

Pustaka ini membagi alur preprocessing teks Bahasa Indonesia menjadi beberapa tahap yang dapat digunakan secara terpisah atau sekaligus melalui satu pipeline utama:

  1. Text Normalizer:
    • Menghapus tanda baca, angka, spasi ganda, email, dan URL.
    • Konversi tulisan alay / Leetspeak (contoh: 4a, 3e).
    • Konversi emoji ke teks Bahasa Indonesia deskriptif (contoh: 😠marah).
    • Normalisasi kata slang / singkatan (contoh: udhsudah, ygyang).
  2. Tokenizer:
    • Tokenizer kata yang cerdas dan sadar konteks.
    • Mempertahankan kata ulang / reduplikasi (contoh: sehari-hari ➔ tetap satu token).
    • Sentence Tokenizer untuk memecah teks menjadi daftar kalimat.
  3. Stopword Removal:
    • Menghapus kata-kata umum yang tidak membawa nilai sentimen/makna penting dalam Bahasa Indonesia.
  4. Stemmer:
    • Stemmer Bahasa Indonesia cepat yang mengembalikan kata berimbuhan ke kata dasar menggunakan kamus kata dasar internal.

📦 Instalasi

Instal library menggunakan npm:

npm install nusantara-nlp-js

Atau menggunakan yarn / pnpm:

yarn add nusantara-nlp-js
# atau
pnpm add nusantara-nlp-js

💻 Penggunaan

1. Menggunakan Pipeline Utama (NusantaraNLP)

Cara termudah dan direkomendasikan untuk memproses teks secara end-to-end:

import { NusantaraNLP } from 'nusantara-nlp-js';

const nlp = new NusantaraNLP();

const rawText = "gw ga suka pelayanan 😠 parah banget!!";
const result = nlp.process(rawText);

console.log(result);
/*
Output:
{
  raw: 'gw ga suka pelayanan 😠 parah banget!!',
  cleaned: 'gw ga suka pelayanan marah parah banget',
  tokens: [ 'gw', 'ga', 'suka', 'pelayanan', 'marah', 'parah', 'banget' ],
  tokensClean: [ 'suka', 'pelayanan', 'marah', 'parah' ],
  tokensStem: [ 'suka', 'layan', 'marah', 'parah' ],
  result: 'suka layan marah parah'
}
*/

2. Menggunakan Komponen Secara Terpisah

A. Text Normalizer

Berguna untuk membersihkan teks kotor dari media sosial:

import { Normalizer } from 'nusantara-nlp-js';

const normalizer = new Normalizer();

// 1. Membersihkan teks dasar
console.log(normalizer.clean("Beli di sini: https://example.com !!!")); 
// Output: "Beli di sini"

// 2. Normalisasi Leetspeak / Tulisan Alay
console.log(normalizer.convertLeet("k3r3n b4ng3t")); 
// Output: "keren banget"

// 3. Konversi Emoji ke Deskripsi Bahasa Indonesia
console.log(normalizer.convertEmoji("Saya senang sekali 😊")); 
// Output: "Saya senang sekali senyum"

// 4. Normalisasi Slang / Singkatan
console.log(normalizer.convertSlang("yg udh msh ga tau")); 
// Output: "yang sudah masih tidak tahu"

B. Tokenizer

Pecah kalimat atau paragraf dengan benar:

import { Tokenizer } from 'nusantara-nlp-js';

const tokenizer = new Tokenizer();

// Tokenisasi Kata (Mempertahankan kata ulang)
console.log(tokenizer.tokenize("anak-anak bermain sehari-hari."));
// Output: [ 'anak-anak', 'bermain', 'sehari-hari' ]

// Tokenisasi Kalimat
console.log(tokenizer.tokenizeSentence("Saya belajar NLP. Sangat menyenangkan!"));
// Output: [ 'Saya belajar NLP.', 'Sangat menyenangkan!' ]

C. Stopword Removal

Saring kata-kata tidak penting:

import { Stopword } from 'nusantara-nlp-js';

const stopword = new Stopword();

const tokens = ["saya", "suka", "makan", "nasi", "yang", "enak"];
console.log(stopword.remove(tokens));
// Output: [ 'suka', 'makan', 'nasi', 'enak' ]

D. Stemmer

Kembalikan kata berimbuhan ke kata dasarnya secara presisi:

import { Stemmer } from 'nusantara-nlp-js';

const stemmer = new Stemmer();

console.log(stemmer.stem("mempermasalahkan")); // Output: "masalah"
console.log(stemmer.stem("ketidakhadiran"));   // Output: "hadir"
console.log(stemmer.stem("pelajaran"));        // Output: "ajar"

🛠️ Konfigurasi Tingkat Stopword Removal

Saat menginisialisasi NusantaraNLP, Anda dapat menentukan tingkat agresivitas penghapusan kata stopword (stopwordMode):

  • 'conservative' (Default): Menghapus kata hubung dasar, namun tetap mempertahankan kata-kata penting yang bisa memengaruhi konteks analisis sentimen (misal: "tidak", "belum").
  • 'aggressive': Menghapus semua kata yang terdaftar di kamus stopword secara penuh tanpa pengecualian.
import { NusantaraNLP } from 'nusantara-nlp-js';

// Menggunakan mode agresif
const nlpAggressive = new NusantaraNLP('aggressive');

📄 Lisensi

Proyek ini dilisensikan di bawah MIT License. Bebas digunakan untuk proyek pribadi maupun komersial.