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_slang, replace_word_elongation, correct_spelling,
# 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_slang, replace_word_elongation, correct_spelling,
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 (menggunakan SpellCorrector)
slang_text = "emg siapa yg nanya?"
normal_text = replace_slang(slang_text)
print(normal_text)
# Output: "memang siapa yang bertanya?"
# Mengatasi perpanjangan kata (word elongation)
elongation_text = "kenapaaa bangettt???"
clean_result = replace_word_elongation(elongation_text)
print(clean_result)
# Output: "kenapa banget??"
# Koreksi ejaan
spell_text = "saya mencri informsi pnting"
corrected = correct_spelling(spell_text)
print(corrected)
# Output: "saya mencuri 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 memungkinkan Anda menjalankan beberapa fungsi preprocessing sekaligus dengan konfigurasi yang fleksibel.
from nahiarhdNLP.preprocessing import Pipeline, pipeline, preprocess
# ๐๏ธ MENGGUNAKAN KELAS PIPELINE
# Buat pipeline dengan konfigurasi default
pipe = Pipeline()
result = pipe.process("Halooo @user https://example.com gw lg nyari info ๐")
print(result)
# Buat pipeline dengan konfigurasi custom
config = {
'remove_html': True,
'remove_url': True,
'remove_mentions': True,
'remove_hashtags': True,
'normalize_slang': True,
'correct_spelling': True,
'remove_stopwords': True,
'stem_text': False,
'to_lowercase': True,
'tokenize': False
}
pipe = Pipeline(config)
messy_text = "gw lg mencri informsi pnting @user #trending https://example.com"
result = pipe.process(messy_text)
print(result)
# Update konfigurasi pipeline
pipe.update_config({'tokenize': True, 'remove_stopwords': False})
tokens = pipe.process("Saya suka makan nasi goreng")
print(tokens)
# Lihat konfigurasi aktif
print("Konfigurasi:", pipe.get_config())
print("Steps aktif:", pipe.get_enabled_steps())
# Reset ke konfigurasi default
pipe.reset_config()
# ๐ FUNGSI PIPELINE (SIMPLE)
# Gunakan konfigurasi default
result = pipeline("Halooo @user https://example.com gw lg nyari info ๐")
print(result)
# Gunakan konfigurasi custom
config = {
'remove_url': True,
'normalize_slang': True,
'to_lowercase': True,
'remove_mentions': True
}
result = pipeline("Gw lg browsing https://google.com @admin", config)
print(result)
# Dengan tokenisasi
config = {'normalize_slang': True, 'tokenize': True}
tokens = pipeline("gw suka makan nasi", config)
print(tokens)
# โ๏ธ 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,
normalize_slang=True,
correct_spelling=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_word_elongation=True,
to_lowercase=True,
# Nonaktifkan normalisasi advanced
normalize_slang=False,
correct_spelling=False,
remove_stopwords=False
)
print(result)
๐ Konfigurasi Pipeline Available
# Semua opsi konfigurasi yang tersedia
available_options = {
# Basic cleaning
'remove_html': True, # Hapus HTML tags
'remove_url': True, # Hapus URL
'remove_mentions': True, # Hapus @mentions
'remove_hashtags': True, # Hapus #hashtags
'remove_numbers': False, # Hapus angka
'remove_punctuation': False, # Hapus tanda baca
'remove_special_chars': True, # Hapus karakter khusus
'remove_whitespace': True, # Hapus whitespace berlebih
'remove_extra_spaces': True, # Hapus spasi berlebih
# Text normalization
'to_lowercase': True, # Ubah ke huruf kecil
'replace_word_elongation': True, # Normalisasi kata berulang (halooo -> halo)
'normalize_slang': True, # Normalisasi slang (gw -> saya)
'correct_spelling': True, # Koreksi ejaan
# Emoji handling
'emoji_to_words': False, # Ubah emoji ke kata
'words_to_emoji': False, # Ubah kata ke emoji
# Linguistic processing
'remove_stopwords': False, # Hapus stopwords
'stem_text': False, # Lakukan stemming
# Tokenization
'tokenize': False, # Tokenisasi (return list)
}
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
- Untuk preprocessing sekaligus: Gunakan
Pipeline,pipeline(), ataupreprocess() - Untuk kontrol penuh: Gunakan kelas individual (
TextCleaner,SpellCorrector, dll) - Untuk spell correction + slang: Gunakan
SpellCorrectoryang menggabungkan kedua fitur - Untuk stemming: Install Sastrawi terlebih dahulu:
pip install Sastrawi - Untuk load dataset: Gunakan
DatasetLoaderdarinahiarhdNLP.datasets - Untuk inisialisasi kelas: Panggil
_load_data()untuk kelas yang memerlukan dataset - Untuk kustomisasi pipeline: Gunakan kelas
Pipelinedengan konfigurasi dictionary - Untuk penggunaan sederhana: Gunakan fungsi
pipeline()ataupreprocess()
โก 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/JSONSastrawi- untuk stemming (opsional)rich- untuk output formatting di demo (opsional)
๐ง Struktur Modul
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
โโโ demo.py # File demo penggunaan
๐ Changelog Versi 1.2.0
- โ [BARU] Penambahan fitur Pipeline untuk preprocessing sekaligus
- โ
[BARU] Kelas
Pipelinedengan konfigurasi fleksibel - โ
[BARU] Fungsi
pipeline()untuk penggunaan sederhana - โ
[BARU] Fungsi
preprocess()dengan parameter eksplisit - โ
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
DatasetLoaderuntuk 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:
# 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nahiarhdnlp-1.2.1.tar.gz.
File metadata
- Download URL: nahiarhdnlp-1.2.1.tar.gz
- Upload date:
- Size: 786.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
373fb81ed6170c575942c2d0476ced0911fd81ee023de870f8f86ccca60874bd
|
|
| MD5 |
94ebaa2a57192e33e86e2e729e4c17df
|
|
| BLAKE2b-256 |
f8ecbbd1a9f6e3141f8310f01e8c89cb3fccfc62e8b7d1ee6211f5612b7c3f3c
|
File details
Details for the file nahiarhdnlp-1.2.1-py3-none-any.whl.
File metadata
- Download URL: nahiarhdnlp-1.2.1-py3-none-any.whl
- Upload date:
- Size: 789.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac01006ba20ef137df525fa1f14fa438608765a24554e1ee3fbd1c30a59b365d
|
|
| MD5 |
9f99a334c3b75ddb88087c0a66ee54e0
|
|
| BLAKE2b-256 |
565184e4a938e2c93bdd8058dfdbe8685009274a772d0261a4d026a64de9b11e
|