Skip to main content

Advanced Indonesian Natural Language Processing Library

Project description

nahiarhdNLP - Indonesian Natural Language Processing Library

Library Indonesian Natural Language Processing dengan fitur preprocessing teks, normalisasi slang, konversi emoji, koreksi ejaan, dan berbagai fungsi text processing lainnya.

๐Ÿš€ Instalasi

pip install nahiarhdNLP

๐Ÿ“ฆ Import Library

# Import functions dari preprocessing
from nahiarhdNLP.preprocessing import (
    # Fungsi pembersihan dasar
    remove_html, remove_url, remove_mentions, remove_hashtags,
    remove_numbers, remove_punctuation, remove_extra_spaces,
    remove_special_chars, remove_whitespace, to_lowercase,
    # Fungsi normalisasi dan koreksi
    replace_spell_corrector, replace_repeated_chars,
    # Fungsi emoji
    emoji_to_words, words_to_emoji,
    # Fungsi linguistic
    remove_stopwords, stem_text, tokenize,
    # Fungsi pipeline
    pipeline, preprocess
)

# Import kelas untuk penggunaan advanced
from nahiarhdNLP.preprocessing import (
    TextCleaner, SpellCorrector, StopwordRemover,
    Stemmer, EmojiConverter, Tokenizer, Pipeline
)

# Import dataset loader
from nahiarhdNLP.datasets import DatasetLoader

๐Ÿ“‹ Contoh Penggunaan

1. ๐Ÿงน TextCleaner - Membersihkan Teks

from nahiarhdNLP.preprocessing import TextCleaner

cleaner = TextCleaner()

# Membersihkan URL
url_text = "kunjungi https://google.com sekarang!"
clean_result = cleaner.clean_urls(url_text)
print(clean_result)
# Output: "kunjungi  sekarang!"

# Membersihkan mentions
mention_text = "Halo @user123 apa kabar?"
clean_result = cleaner.clean_mentions(mention_text)
print(clean_result)
# Output: "Halo  apa kabar?"

2. โœ๏ธ SpellCorrector - Koreksi Ejaan & Normalisasi Slang

from nahiarhdNLP.preprocessing import SpellCorrector

spell = SpellCorrector()

# Koreksi kata salah eja
word = "mencri"
corrected = spell.correct_word(word)
print(corrected)
# Output: "mencuri"

# Koreksi kalimat lengkap (termasuk normalisasi slang)
sentence = "gw lg mencri informsi"
corrected = spell.correct_sentence(sentence)
print(corrected)
# Output: "saya lagi mencuri informasi"

3. ๐Ÿšซ StopwordRemover - Menghapus Stopwords

from nahiarhdNLP.preprocessing import StopwordRemover

stopword = StopwordRemover()
stopword._load_data()  # Load dataset stopwords

# Menghapus stopwords
text = "saya suka makan nasi goreng"
result = stopword.remove_stopwords(text)
print(result)
# Output: "suka makan nasi goreng"

# Cek apakah kata adalah stopword
is_stop = stopword.is_stopword("adalah")
print(is_stop)  # True

4. ๐Ÿ˜€ EmojiConverter - Konversi Emoji

from nahiarhdNLP.preprocessing import EmojiConverter

emoji = EmojiConverter()
emoji._load_data()  # Load dataset emoji

# Emoji ke teks
emoji_text = "๐Ÿ˜€ ๐Ÿ˜‚ ๐Ÿ˜"
text_result = emoji.emoji_to_text_convert(emoji_text)
print(text_result)

# Teks ke emoji
text = "wajah_gembira"
emoji_result = emoji.text_to_emoji_convert(text)
print(emoji_result)

5. ๐Ÿ”ช Tokenizer - Tokenisasi

from nahiarhdNLP.preprocessing import Tokenizer

tokenizer = Tokenizer()

# Tokenisasi teks
text = "ini contoh tokenisasi"
tokens = tokenizer.tokenize(text)
print(tokens)
# Output: ['ini', 'contoh', 'tokenisasi']

6. ๐ŸŒฟ Stemmer - Stemming

from nahiarhdNLP.preprocessing import Stemmer

try:
    stemmer = Stemmer()
    text = "bermain-main dengan senang"
    result = stemmer.stem(text)
    print(result)
    # Output: "main main dengan senang"
except ImportError:
    print("Install Sastrawi dengan: pip install Sastrawi")

7. ๐Ÿ› ๏ธ Fungsi Individual

from nahiarhdNLP.preprocessing import (
    remove_html, remove_url, remove_mentions, remove_hashtags,
    remove_numbers, remove_punctuation, remove_extra_spaces,
    remove_special_chars, remove_whitespace, to_lowercase,
    replace_spell_corrector, replace_repeated_chars,
    emoji_to_words, words_to_emoji, remove_stopwords,
    stem_text, tokenize
)

# ๐Ÿงน FUNGSI PEMBERSIHAN DASAR

# Menghapus HTML tags
html_text = "website <a href='https://google.com'>google</a>"
clean_result = remove_html(html_text)
print(clean_result)
# Output: "website google"

# Menghapus URL
url_text = "kunjungi https://google.com sekarang!"
clean_result = remove_url(url_text)
print(clean_result)
# Output: "kunjungi  sekarang!"

# Menghapus mentions (@username)
mention_text = "Halo @user123 dan @admin apa kabar?"
clean_result = remove_mentions(mention_text)
print(clean_result)
# Output: "Halo  dan  apa kabar?"

# Menghapus hashtags (#tag)
hashtag_text = "Hari ini #senin #libur #weekend"
clean_result = remove_hashtags(hashtag_text)
print(clean_result)
# Output: "Hari ini   "

# โœจ FUNGSI NORMALISASI DAN KOREKSI

# Normalisasi slang dan koreksi ejaan (menggunakan SpellCorrector)
slang_text = "emg siapa yg nanya?"
normal_text = replace_spell_corrector(slang_text)
print(normal_text)
# Output: "memang siapa yang bertanya?"

# Mengatasi perpanjangan kata (word elongation)
elongation_text = "kenapaaa bangettt???"
clean_result = replace_repeated_chars(elongation_text)
print(clean_result)
# Output: "kenapa banget???"

# Koreksi ejaan kompleks
spell_text = "saya mencri informsi pnting"
corrected = replace_spell_corrector(spell_text)
print(corrected)
# Output: "saya mencari informasi penting"

# ๐Ÿ˜€ FUNGSI EMOJI

# Konversi emoji ke kata
emoji_text = "๐Ÿ˜€ ๐Ÿ˜‚ ๐Ÿ˜"
text_result = emoji_to_words(emoji_text)
print(text_result)

# Konversi kata ke emoji
text_to_emoji = "wajah_gembira wajah_sedih"
emoji_result = words_to_emoji(text_to_emoji)
print(emoji_result)

# ๐Ÿ”ฌ FUNGSI LINGUISTIC

# Menghapus stopwords
stopword_text = "saya sangat suka sekali makan nasi goreng"
clean_result = remove_stopwords(stopword_text)
print(clean_result)
# Output: "  suka  makan nasi goreng"

# Stemming teks (memerlukan Sastrawi)
try:
    stem_text_input = "bermain-main dengan gembira"
    stemmed = stem_text(stem_text_input)
    print(stemmed)
    # Output: "main main dengan gembira"
except ImportError:
    print("Install Sastrawi: pip install Sastrawi")

# Tokenisasi teks
tokenize_text = "Saya suka makan nasi goreng"
tokens = tokenize(tokenize_text)
print(tokens)
# Output: ['Saya', 'suka', 'makan', 'nasi', 'goreng']

8. ๐Ÿ”€ Pipeline - Preprocessing Sekaligus

Pipeline yang super simple - langsung pass functions yang mau dipakai!

from nahiarhdNLP.preprocessing import Pipeline, remove_html, remove_url, remove_mentions, to_lowercase

# ๐Ÿš€ CARA PAKAI YANG SIMPLE

# Langsung pass functions yang mau dipakai
pipeline = Pipeline(remove_html, remove_url, remove_mentions)
result = pipeline.process("Hello <b>world</b> @user https://example.com")
print(result)
# Output: "Hello world  "

# Bebas pilih functions sesuai kebutuhan
pipeline = Pipeline(remove_url, replace_spell_corrector, to_lowercase)
result = pipeline.process("Halooo https://google.com gw lg nyari info")
print(result)

# Pipeline bisa dipanggil langsung seperti function
result = pipeline("Test text lainnya")
print(result)

# Contoh lain - untuk social media text
social_pipeline = Pipeline(
    remove_mentions,
    remove_hashtags,
    remove_url,
    replace_spell_corrector,
    to_lowercase
)
result = social_pipeline.process("Halooo @user #trending https://example.com gw lg nyari info")
print(result)

# Untuk cleaning basic
basic_pipeline = Pipeline(remove_html, remove_extra_spaces, to_lowercase)
result = basic_pipeline.process("Hello <b>World</b>   !")
print(result)

# Tokenisasi juga bisa langsung
token_pipeline = Pipeline(remove_url, to_lowercase, tokenize)
tokens = token_pipeline.process("Hello https://google.com World")
print(tokens)  # ['hello', 'world']

# ๐ŸŽฏ FUNGSI PIPELINE HELPER

# Buat pipeline dengan helper function
from nahiarhdNLP.preprocessing import pipeline

my_pipeline = pipeline(remove_url, remove_mentions, to_lowercase)
result = my_pipeline.process("Hello @user https://example.com")
print(result)

# Atau langsung chain
result = pipeline(remove_html, to_lowercase).process("Hello <b>World</b>")
print(result)

๐ŸŽฏ Kenapa Pipeline Ini Lebih Baik?

โœ… Super Simple - No config dictionary, langsung pass functions! โœ… Flexible - Bebas pilih functions apa aja sesuai kebutuhan โœ… Clean Code - Cuma 30 baris, gak ada kompleksitas berlebih โœ… To The Point - Exactly what you need, nothing more โœ… Easy to Read - Pipeline(remove_url, to_lowercase) langsung jelas

๐Ÿ“ Available Functions untuk Pipeline

# Basic cleaning
remove_html, remove_url, remove_mentions, remove_hashtags,
remove_numbers, remove_punctuation, remove_special_chars,
remove_whitespace, remove_extra_spaces

# Text transformation
to_lowercase, replace_repeated_chars, replace_spell_corrector

# Emoji handling
emoji_to_words, words_to_emoji

# Linguistic processing
remove_stopwords, stem_text, tokenize

9. โš™๏ธ Preprocess Function (Backward Compatibility)

Untuk yang mau kontrol detail dengan parameter eksplisit:

from nahiarhdNLP.preprocessing import preprocess

# โš™๏ธ FUNGSI PREPROCESS (DETAIL CONTROL)

# Preprocess dengan parameter eksplisit
result = preprocess(
    "Halooo @user123 #trending https://example.com gw lg nyari info ๐Ÿ˜€!!!",
    remove_url=True,
    remove_mentions=True,
    remove_hashtags=True,
    remove_punctuation=True,
    replace_spell_corrector=True,
    to_lowercase=True,
    remove_stopwords=True
)
print(result)

# Preprocess dengan tokenisasi
tokens = preprocess(
    "Saya suka makan nasi goreng pedas",
    remove_stopwords=True,
    tokenize=True
)
print(tokens)

# Preprocess minimal (hanya cleaning dasar)
result = preprocess(
    "Halooo @user!!! 123",
    remove_mentions=True,
    remove_numbers=True,
    remove_punctuation=True,
    replace_repeated_chars=True,
    to_lowercase=True,
    # Nonaktifkan normalisasi advanced
    replace_spell_corrector=False,
    remove_stopwords=False
)
print(result)

9. ๐Ÿ“Š Dataset Loader

from nahiarhdNLP.datasets import DatasetLoader

loader = DatasetLoader()

# Load stopwords dari CSV lokal
stopwords = loader.load_stopwords_dataset()
print(f"Jumlah stopwords: {len(stopwords)}")

# Load slang dictionary dari CSV lokal
slang_dict = loader.load_slang_dataset()
print(f"Jumlah slang: {len(slang_dict)}")

# Load emoji dictionary dari CSV lokal
emoji_dict = loader.load_emoji_dataset()
print(f"Jumlah emoji: {len(emoji_dict)}")

# Load wordlist dari JSON lokal
wordlist = loader.load_wordlist_dataset()
print(f"Jumlah kata: {len(wordlist)}")

Catatan: Semua dataset (stopword, slang, emoji, wordlist) di-load langsung dari file CSV/JSON di folder nahiarhdNLP/datasets/. Tidak ada proses download dari external source.

๐Ÿšจ Error Handling

try:
    from nahiarhdNLP.preprocessing import SpellCorrector
    spell = SpellCorrector()
    result = spell.correct_sentence("test")
except ImportError:
    print("Package nahiarhdNLP belum terinstall")
    print("Install dengan: pip install nahiarhdNLP")
except Exception as e:
    print(f"Error: {e}")

๐Ÿ’ก Tips Penggunaan

  1. Untuk preprocessing simple: Gunakan Pipeline(function1, function2, ...) - langsung pass functions!
  2. Untuk kontrol detail: Gunakan preprocess() dengan parameter boolean
  3. Untuk kontrol penuh: Gunakan kelas individual (TextCleaner, SpellCorrector, dll)
  4. Untuk spell correction + slang: Gunakan SpellCorrector yang menggabungkan kedua fitur
  5. Untuk stemming: Install Sastrawi terlebih dahulu: pip install Sastrawi
  6. Untuk load dataset: Gunakan DatasetLoader dari nahiarhdNLP.datasets
  7. Untuk inisialisasi kelas: Panggil _load_data() untuk kelas yang memerlukan dataset
  8. Pipeline design: Pipeline(remove_url, to_lowercase) lebih jelas daripada config dictionary
  9. Function chaining: Pipeline bisa dipanggil seperti function dengan pipeline("text")

โšก Performance & Dataset

nahiarhdNLP menggunakan dataset lokal yang sudah disediakan:

  • Stopwords: File stop_word.csv (788 kata)
  • Slang Dictionary: File slang.csv (15,675 pasangan)
  • Emoji Mapping: File emoji.csv (3,530 emoji)
  • Wordlist: File wordlist.json (kamus kata Indonesia)
  • KBBI Dictionary: File kata_dasar_kbbi.csv (28,527 kata)
  • Kamus Tambahan: File kamus.txt (30,871 kata)

Semua dataset tersimpan di folder nahiarhdNLP/datasets/ dan diakses melalui DatasetLoader.

๐Ÿ“ฆ Dependencies

Package ini membutuhkan:

  • pandas - untuk load dan proses dataset CSV/JSON
  • Sastrawi - untuk stemming (opsional)
  • rich - untuk output formatting di demo (opsional)

๐Ÿ”ง Struktur Modul

```text
nahiarhdNLP/
โ”œโ”€โ”€ datasets/
โ”‚   โ”œโ”€โ”€ loaders.py          # DatasetLoader class
โ”‚   โ”œโ”€โ”€ emoji.csv           # Dataset emoji (3,530 entries)
โ”‚   โ”œโ”€โ”€ slang.csv           # Dataset slang (15,675 entries)
โ”‚   โ”œโ”€โ”€ stop_word.csv       # Dataset stopwords (788 entries)
โ”‚   โ”œโ”€โ”€ wordlist.json       # Dataset wordlist
โ”‚   โ”œโ”€โ”€ kata_dasar_kbbi.csv # Dataset KBBI (28,527 entries)
โ”‚   โ””โ”€โ”€ kamus.txt           # Dataset kamus tambahan (30,871 entries)
โ”œโ”€โ”€ preprocessing/
โ”‚   โ”œโ”€โ”€ cleaning/
โ”‚   โ”‚   โ””โ”€โ”€ text_cleaner.py # TextCleaner class
โ”‚   โ”œโ”€โ”€ linguistic/
โ”‚   โ”‚   โ”œโ”€โ”€ stemmer.py      # Stemmer class
โ”‚   โ”‚   โ””โ”€โ”€ stopwords.py    # StopwordRemover class
โ”‚   โ”œโ”€โ”€ normalization/
โ”‚   โ”‚   โ”œโ”€โ”€ emoji.py        # EmojiConverter class
โ”‚   โ”‚   โ””โ”€โ”€ spell_corrector.py # SpellCorrector class
โ”‚   โ”œโ”€โ”€ tokenization/
โ”‚   โ”‚   โ””โ”€โ”€ tokenizer.py    # Tokenizer class
โ”‚   โ””โ”€โ”€ utils.py            # Fungsi utility individual & Pipeline
โ””โ”€โ”€ demo.py                 # File demo penggunaan
```
## ๐Ÿ†• Changelog Versi 1.3.0

- ๐Ÿš€ **[MAJOR]** Pipeline sekarang super simple - langsung pass functions sebagai arguments!
- โœ… **[PERBAIKAN]** Tidak ada lagi config dictionary yang kompleks
- โœ… **[PERBAIKAN]** Pipeline cuma 30 baris kode - clean dan to the point
- โœ… **[BARU]** Pipeline bisa dipanggil langsung seperti function: `pipeline("text")`
- โœ… **[BARU]** Helper function `pipeline()` untuk membuat Pipeline dengan mudah
- โœ… **[PERBAIKAN]** Fungsi `preprocess()` tetap ada untuk backward compatibility
- โœ… **[PERBAIKAN]** Documentation dan contoh yang lebih jelas dan praktis
- โœ… **[PERBAIKAN]** Nama fungsi diperbaiki: `replace_spell_corrector` (menggabungkan slang + koreksi ejaan)
- โœ… **[PERBAIKAN]** Nama fungsi diperbaiki: `replace_repeated_chars` (mengatasi word elongation)
- โœ… Menggabungkan spell correction dan slang normalization dalam `SpellCorrector`
- โœ… Semua dataset menggunakan file lokal (CSV/JSON)
- โœ… Struktur yang lebih terorganisir dengan pemisahan kelas dan fungsi
- โœ… Penambahan `DatasetLoader` untuk manajemen dataset terpusat
- โœ… Dataset lengkap dengan 6 file berbeda (emoji, slang, stopwords, wordlist, KBBI, kamus)
- โŒ Menghapus dependency pada external APIs atau downloads

## ๐Ÿ› Troubleshooting

**Error saat import dataset:**

```python
# Pastikan memanggil _load_data() untuk kelas yang memerlukan dataset
stopword = StopwordRemover()
stopword._load_data()  # Penting!
```

Error Sastrawi tidak ditemukan:

pip install Sastrawi

Error pandas tidak ditemukan:

pip install pandas

๐Ÿ“„ License

MIT License

๐Ÿ‘จโ€๐Ÿ’ป Author

Raihan Hidayatullah Djunaedi raihanhd.dev@gmail.com


Untuk contoh penggunaan lengkap, lihat file demo.py di repository ini.

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

nahiarhdnlp-1.2.2.tar.gz (785.1 kB view details)

Uploaded Source

Built Distribution

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

nahiarhdnlp-1.2.2-py3-none-any.whl (788.0 kB view details)

Uploaded Python 3

File details

Details for the file nahiarhdnlp-1.2.2.tar.gz.

File metadata

  • Download URL: nahiarhdnlp-1.2.2.tar.gz
  • Upload date:
  • Size: 785.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.6

File hashes

Hashes for nahiarhdnlp-1.2.2.tar.gz
Algorithm Hash digest
SHA256 a4d4df66636223442d5d6df4be71cd4e66a547e63d90a3e5f005ad23e5fd0319
MD5 2038f8d06f10fe2ba0c38da04725eab0
BLAKE2b-256 32579834c532b35f5144ef98c68d12a3ba074d234e3c22d7cb17f52f178bdb5a

See more details on using hashes here.

File details

Details for the file nahiarhdnlp-1.2.2-py3-none-any.whl.

File metadata

  • Download URL: nahiarhdnlp-1.2.2-py3-none-any.whl
  • Upload date:
  • Size: 788.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.6

File hashes

Hashes for nahiarhdnlp-1.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 69480064870c9609f6d61e9da5c29f8bef113a33e2e4c492771d616224f5cb73
MD5 4d5b632cc61481060ed0583bdd375f85
BLAKE2b-256 aca394bf03a82ae4a22f6d9e9df3fc3d034630ab9365f85d9716e340dbd3ab4b

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