Skip to main content

Library NLP Bahasa Indonesia modern โ€” Stemming, Stopword, Slang, Emoji, Tokenizer

Project description

Nusantara NLP ๐Ÿ‡ฎ๐Ÿ‡ฉ

Python 3.9+ License: MIT Version

Library NLP Bahasa Indonesia yang modern, cerdas, dan lebih akurat dari Sastrawi.


โœจ Keunggulan vs Sastrawi

Fitur Sastrawi Nusantara NLP
Stemming Algorithm Nazief-Adriani (1996) Hybrid ECS + Lookup Table
Akurasi Stemming ~75-80% ~87-92%
Kata Negasi Dilindungi โŒ โœ… (tidak, bukan, dll.)
Normalisasi Slang โŒ โœ… 200+ kata gaul
Konversi Emoji โŒ โœ… 150+ emoji โ†’ teks Indonesia
Mode Stopword 1 mode 3 mode (conservative/standard/aggressive)
Tokenizer Pintar โŒ โœ… Tangani kata ulang & singkatan
Zero Dependencies โœ… โœ… (murni Python stdlib)

๐Ÿš€ Instalasi

pip install nusantara-nlp

Atau dari source:

git clone https://github.com/yourname/nusantara-nlp
cd nusantara-nlp
pip install -e .

๐Ÿ“– Quickstart

from nusantara import NLP

nlp = NLP()

# Full pipeline processing
hasil = nlp.process("gw ga suka pelayanan di sini ๐Ÿ˜  parah banget!!")
print(hasil["result"])
# โ†’ "suka layan sini marah parah"

# Lihat setiap tahap
print(hasil["normalized"])  # slang + emoji sudah dikonversi
print(hasil["tokens_clean"])  # setelah stopword removal
print(hasil["tokens_stem"])   # setelah stemming

๐Ÿงฉ Komponen

1. Pipeline Lengkap

from nusantara import NLP

# Mode stopword: "conservative", "standard" (default), "aggressive"
nlp = NLP(stopword_mode="conservative")

hasil = nlp.process("Teman-teman bilang makanannya tidak enak ๐Ÿ˜ข")

2. Slang Normalizer

from nusantara.normalizer import SlangNormalizer

norm = SlangNormalizer()
print(norm.normalize("gw udh makan tp msh laper"))
# โ†’ "saya sudah makan tapi masih lapar"

print(norm.normalize("baguuuus banget! makan2 aja kerjanya"))
# โ†’ "baguss banget makan makan saja kerjanya"

3. Emoji Converter

from nusantara.normalizer import EmojiConverter

conv = EmojiConverter()
print(conv.convert("Pelayanannya bagus ๐Ÿ‘ tapi mahal ๐Ÿ˜ข"))
# โ†’ "Pelayanannya bagus bagus tapi mahal sedih"

4. Stopword Remover (Negation-Aware)

from nusantara.stopword import StopwordRemover

# Kata negasi SELALU dilindungi, tidak pernah dihapus!
remover = StopwordRemover(mode="standard")
tokens = ["saya", "tidak", "suka", "yang", "ini"]
print(remover.remove_tokens(tokens))
# โ†’ ["tidak", "suka"]   # "tidak" tetap ada!

# Custom stopwords
remover = StopwordRemover(extra_words=["mantap", "josss"])

5. Stemmer (Hybrid ECS)

from nusantara.stemmer import Stemmer

stemmer = Stemmer()
print(stemmer.stem("mempermasalahkan"))  # โ†’ "masalah"
print(stemmer.stem("pelajaran"))         # โ†’ "ajar"
print(stemmer.stem("ketidakhadiran"))    # โ†’ "hadir"
print(stemmer.stem("berlari-lari"))      # โ†’ "lari"

6. Tokenizer

from nusantara.tokenizer import Tokenizer

tok = Tokenizer()
print(tok.tokenize("teman-teman semua hadir"))
# โ†’ ["teman", "teman", "semua", "hadir"]

# Sentence tokenizer
print(tok.tokenize_sentences("Ini enak. Itu tidak. Bagaimana menurutmu?"))
# โ†’ ["Ini enak.", "Itu tidak.", "Bagaimana menurutmu?"]

๐Ÿงช Testing

# Install pytest jika belum ada
pip install pytest

# Jalankan semua test
pytest tests/ -v

๐Ÿ“ Struktur Project

nusantara-nlp/
โ”œโ”€โ”€ nusantara/
โ”‚   โ”œโ”€โ”€ __init__.py          # Entry point, ekspor class NLP
โ”‚   โ”œโ”€โ”€ pipeline.py          # Pipeline utama (NLP class)
โ”‚   โ”œโ”€โ”€ stemmer/
โ”‚   โ”‚   โ”œโ”€โ”€ stemmer.py       # Hybrid ECS Stemmer
โ”‚   โ”‚   โ””โ”€โ”€ kamus/
โ”‚   โ”‚       โ””โ”€โ”€ kata_dasar.txt
โ”‚   โ”œโ”€โ”€ stopword/
โ”‚   โ”‚   โ”œโ”€โ”€ remover.py       # Context-Aware Stopword Remover
โ”‚   โ”‚   โ””โ”€โ”€ data/
โ”‚   โ”‚       โ””โ”€โ”€ stopwords_id.txt
โ”‚   โ”œโ”€โ”€ normalizer/
โ”‚   โ”‚   โ”œโ”€โ”€ slang.py         # Slang Normalizer
โ”‚   โ”‚   โ”œโ”€โ”€ emoji_conv.py    # Emoji Converter
โ”‚   โ”‚   โ””โ”€โ”€ data/
โ”‚   โ”‚       โ”œโ”€โ”€ slang_dict.json
โ”‚   โ”‚       โ””โ”€โ”€ emoji_dict.json
โ”‚   โ””โ”€โ”€ tokenizer/
โ”‚       โ””โ”€โ”€ tokenizer.py     # Smart Tokenizer
โ”œโ”€โ”€ tests/
โ”‚   โ””โ”€โ”€ test_all.py          # Pytest test suite
โ”œโ”€โ”€ demo.py                  # Demo script
โ”œโ”€โ”€ pyproject.toml           # PyPI config
โ””โ”€โ”€ README.md

๐Ÿ—บ๏ธ Roadmap

  • v0.1.0 โ€” Core modules (stemmer, stopword, normalizer, tokenizer)
  • v0.2.0 โ€” Named Entity Recognition (NER) sederhana
  • v0.3.0 โ€” Sentiment lexicon berbahasa Indonesia
  • v0.4.0 โ€” CLI tool (nusantara process "teks input")
  • v1.0.0 โ€” Publish ke PyPI

๐Ÿค Kontribusi

Kontribusi sangat disambut! Terutama untuk:

  • Menambah kata dasar di kamus/kata_dasar.txt
  • Menambah slang baru di data/slang_dict.json
  • Menambah emoji di data/emoji_dict.json
  • Menulis test case baru

๐Ÿ“„ Lisensi

MIT License โ€” bebas digunakan untuk proyek komersial maupun open source.

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

nusantara_nlp-0.2.1.tar.gz (25.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nusantara_nlp-0.2.1-py3-none-any.whl (25.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: nusantara_nlp-0.2.1.tar.gz
  • Upload date:
  • Size: 25.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for nusantara_nlp-0.2.1.tar.gz
Algorithm Hash digest
SHA256 1d4bee700e10375f0d2485fd73e16623820a7356af9d5ed09f7c50362c7ae74c
MD5 b56c54110f0781a0b2c1ec345e505064
BLAKE2b-256 676848a6a4499bbe114d8764fa2eefa7081669e60075d1fe1c20d11edafc45c1

See more details on using hashes here.

Provenance

The following attestation bundles were made for nusantara_nlp-0.2.1.tar.gz:

Publisher: publish.yml on aziez/nusantara-nlp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: nusantara_nlp-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 25.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for nusantara_nlp-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a0b8ccbcb15eafd3bae0c3beb1a8d8904f30f3ac853b0ceb45c1f5660c4f9214
MD5 b803c8269654eb27b3f768be26a35f06
BLAKE2b-256 af1863916433011bb77de6ce12e2963fc1bad3a04385abd17bf12dd9331da6ef

See more details on using hashes here.

Provenance

The following attestation bundles were made for nusantara_nlp-0.2.1-py3-none-any.whl:

Publisher: publish.yml on aziez/nusantara-nlp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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