Text Preprocessing
Data teks perlu dibersihkan dan dikodekan ke nilai numerik sebelum diberikan ke model pembelajaran mesin, proses pembersihan dan pengkodean ini disebut sebagai preprocessing teks.Perlu dipersiapkan untuk library ini yakni natural language toolkit atau disingkat nltk yang merupakan library Python dengan pemodelan teks nltk ini juga menyediakan alat yang sebelum digunakan pada mesin learning atau Algo algoritma Deep learning untuk menginstal nltk menggunakan pip pada command Line atau terminal
Natural Languange Toolkit (NLKT)
Perlu dipersiapkan untuk library ini yakni natural language toolkit atau disingkat nltk yang merupakan library Python dengan pemodelan teks nltk ini juga menyediakan alat yang sebelum digunakan pada mesin learning atau Algo algoritma Deep learning untuk menginstal nltk menggunakan pip pada command Line atau terminal
pip install nltk
Sebelum menginstal nltk user harus mengunduh paket nltk
import nltk
nltk.download()
Case Folding
Text Processing yang sederhana dan efektif yang mempunyai tujuan untuk merubah semua huruf didalam dokumen menjadi huruf kecil abjad huruf a sampai z yang diterima karakter selain objek tersebut dihilangkan dan diangkat delimiter.
Mengubah text menjadi lowercase
mesin pencarian sangatlah penting contohnya untuk mencari dokumen yang mengandung Indonesia namun tidak ada yang muncul karena indonesia di indeks sebagai INDONESIA.
Ini contoh source code Python untuk mengubah teks menjadi lower case
kalimat = "Berikut ini adalah 5 negara dengan pendidikan terbaik di dunia adalah Korea Selatan, Jepang, Singapura, Hong Kong, dan Finlandia."
lower_case = kalimat.lower()
print(lower_case)
#output
#berikut ini adalah 5 negara dengan pendidikan terbaik di dunia adalah korea selatan, jepang, singapura, hong kong, dan finlandia.
Menghapus angka
Tulisan angka yang tidak relevan dengan apa yang akan dianalisa seperti nomor rumah nomor telepon dan lain-lain regular expression dapat juga digunakan untuk menghapus karakter angkaContoh source code paytren untuk menghapus angka dalam sebuah kalimat
import re # impor modul regular expression
kalimat = "Berikut ini adalah 5 negara dengan pendidikan terbaik di dunia adalah Korea Selatan, Jepang, Singapura, Hong Kong, dan Finlandia."
hasil = re.sub(r"\d+", "", kalimat)
print(hasil)
# ouput
# Berikut ini adalah negara dengan pendidikan terbaik di dunia adalah Korea Selatan, Jepang, Singapura, Hong Kong, dan Finlandia.
Menghapus tanda baca
Sama halnya dengan angka, tanda baca dalam kalimat tidak memiliki pengaruh pada text preprocessing. Menghapus tanda baca seperti [!”#$%&’()*+,-./:;<=>?@[]^_`{|}~] dapat dilakukan di pyhton seperti dibawah ini :
kalimat = "Ini &adalah [contoh] kalimat? {dengan} tanda. baca?!!"
hasil = kalimat.translate(str.maketrans("","",string.punctuation))
print(hasil)
# output
# Ini adalah contoh kalimat dengan tanda baca
Menghapus whitepace (karakter kosong)
Untuk menghapus spasi di awal dan akhir, anda dapat menggunakan fungsi strip()pada pyhton. Perhatikan kode dibawah ini :
kalimat = " \t ini kalimat contoh\t "
hasil = kalimat.strip()print(hasil)
# output
# ini kalimat contoh
Tokenizing
Merupakan proses teks menjadi potongan-potongan yang disebut token yang akan dianalisa kata angka simbol dan tanda baca yang memiliki entitas penting dianggap sebagai tokenFungsi split()pada pyhton dapat digunakan untuk memisahkan teks. Perhatikan contoh dibawah ini :
kalimat = "rumah idaman adalah rumah yang bersih"
pisah = kalimat.split()
print(pisah)
Macam-macam Tokenizing:
Tokenizing kata
Kalimat atau data dapat dipisahkan menjadi kata-kata yang memiliki kelas word_tokenize()
di dalam modul NLTK.
# impor word_tokenize dari modul nltk
from nltk.tokenize import word_tokenize
kalimat = "Andi kerap melakukan transaksi rutin secara daring atau online."
tokens = nltk.tokenize.word_tokenize(kalimat)
print(tokens)# ouput
# ['Andi', 'kerap', 'melakukan', 'transaksi', 'rutin', 'secara', 'daring', 'atau', 'online', '.']
dari output tersebut terdapat kemunculan tanda baca titik dan koma dan juga token "Andi" menggunakan huruf kapital. Alangkah lebih baiknya teks harus melewati case folding untuk menghasilkan hasil yang konsisten.
salah satu fungsi case folding sebagai penghilang tanda baca serta mengubah teks ke bentuk lowercase.
kalimat = kalimat.translate(str.maketrans('','',string.punctuation)).lower()
# output
# ['andi', 'kerap', 'melakukan', 'transaksi', 'rutin', 'secara', 'daring', 'atau', 'online']
Tokenizing kalimat
Untuk memisahkan kalimat di dalam pararaf menggunakan sent_tokenize
() di dalam modul NLTK, seperti contoh di bawah ini:
kalimat = kalimat.translate(str.maketrans('','',string.punctuation)).lower()
# output
# ['andi', 'kerap', 'melakukan', 'transaksi', 'rutin', 'secara', 'daring', 'atau', 'online']
Stopword
Stopword merupakan kata umum yang sering muncul dalam jumlah yang besar dan tidak mempunyai makna. Contoh stopword dalam bahasa Indonesia adalah “yang”, “dan”, “di”, “dari”, dll.
from nltk.tokenize import sent_tokenize, word_tokenize
from nltk.corpus import stopwords
kalimat = "Andi kerap melakukan transaksi rutin secara daring atau online. Menurut Andi belanja online lebih praktis & murah."
kalimat = kalimat.translate(str.maketrans('','',string.punctuation)).lower()
tokens = word_tokenize(kalimat)
listStopword = set(stopwords.words('indonesian'))
removed = []
for t in tokens:
if t not in listStopword:
removed.append(t)
print(removed)# ouput
# ['andi', 'kerap', 'transaksi', 'rutin', 'daring', 'online', 'andi', 'belanja', 'online', 'praktis', 'murah']
Stemming
Stemming adalah proses menghilangkan tatanan kata ke bentuk dasar semulanya. contohnya "membaca", "membacakan" akan diubah menjadi "baca".
Stemming dengan NLTK (bahasa inggris)
Algoritma stemming yang sering digunakan adalah PorterStemmer()
from nltk.stem import PorterStemmer
ps = PorterStemmer()
kata = ["program", "programs", "programer", "programing", "programers"]
for k in kata:
print(k, " : ", ps.stem(k))# ouput
# program : program
programs : program
programer : program
programing : program
programers : program
Stemming bahasa Indonesia menggunakan Python Sastrawi
Di dalam teks berbahasa inggris, proses yang paling penting yaitu penghilangan sufiks. Di dalam bahasa Indonesia kata imbuhan sufiks dan prefiks dihilangkan juga.
from Sastrawi.Stemmer.StemmerFactory import StemmerFactoryfactory = StemmerFactory()
stemmer = factory.create_stemmer()
kalimat = "Andi kerap melakukan transaksi rutin secara daring atau online. Menurut Andi belanja online lebih praktis & murah."hasil = stemmer.stem(kalimat)print(hasil)# ouput
# andi kerap laku transaksi rutin cara daring atau online turut andi belanja online lebih praktis murah
Source Code Tugas Kuliah Web Mining
import pandas as pd import re import csv import string
df = pd.read_csv('dataTrain.csv', encoding='utf-8') df = df['sentences'].str.lower()
emoticons_str = r""" (?: [:=;] # Eyes [oO-]? # Nose (optional) [D)](]/\OpP] # Mouth )"""
regex_str = [ emoticons_str, r'<[^>]+>', # HTML tags r'(?:@[\w_]+)', # @-mentions r"(?:#+[\w_]+[\w\'_-][\w_]+)", # hash-tags r'http[s]?://(?:[a-z]|[0-9]|[$-_@.&+]|[!(),]|(?:%[0-9a-f][0-9a-f]))+', # URLs
r'(?:(?:\d+,?)+(?:\.?\d+)?)', # numbers
r"(?:[a-z][a-z'\-\_]+[a-z])", # words with - and '
r'(?:[\w_]+)', # other words
r'(?:\S)' # anything else
]
tokens_re = re.compile(r'('+'|'.join(regex_str)+')', re.VERBOSE | re.IGNORECASE) emoticon_re = re.compile(r'^'+emoticons_str+'$', re.VERBOSE | re.IGNORECASE)
def tokenize(s): return tokens_re.findall(s)
def preproses(s, lowercase=False): tokens = tokenize(s) filtered_words = [w for w in tokens] filt = " ".join(filtered_words) filt = re.sub(r"http\S+|www\S+|https\S+", '', filt, flags=re.MULTILINE) # URLs filt = re.sub(r'@[\w_]+','', filt) # @-mentions filt = re.sub(r"(?:#+[\w_]+[\w\'-]*[\w]+)", '', filt) #hash-tags filt = re.sub(r"\d+", "", filt) # angka filt = filt.translate(str.maketrans('','',string.punctuation)) # hapus tanda baca return filt
def removeNonWord(doc): result = doc.replace({'[\W_]+': ' '}, regex=True) return result[result.notnull()]
def writeToCsv(): count_row = df.shape[0]
with open('dataTest.csv', 'w', encoding='utf-8') as file:
w = csv.writer(file)
w.writerow(['sentences']) #menulis baris header
for i in range(count_row):
x = preproses(df.loc[i])
x = x.strip()
w.writerow([x])
writeToCsv()
doc = pd.read_csv('dataTest.csv', encoding='utf-8')
doc = doc['sentences'].str.lower()
doc = removeNonWord(doc)
doc.to_csv(r'dataTest.csv', index = False)
print('Output saved in "dataTest.csv"')
Referensi
- Adriani, M., Asian, J., Nazief, B., Tahaghoghi, S. M. M., & Williams, H. E. (2007). Stemming Indonesian. ACM Transactions on Asian Language Information Processing, 6(4), 1–33.
- Tala, Fadillah Z.(1999). A Study of Stemming Effect on Information Retrieval in Bahasa Indonesia.
- Geovedi, Jim.(2014).Karena Data Gak Mungkin Bohong dan karena Bisa Diolah Sesuai Pesanan (https://medium.com/curahan-rekanalar/karena-data-gak-mungkin-bohong-a17ff90cef87).
- Python Sastrawi (https://github.com/har07/PySastrawi).
- Natural Language Toolkit -NLTK (https://www.nltk.org).
- Matplotlib (https://matplotlib.org).