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

  1. 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.
  2. Tala, Fadillah Z.(1999). A Study of Stemming Effect on Information Retrieval in Bahasa Indonesia.
  3. 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).
  4. Python Sastrawi (https://github.com/har07/PySastrawi).
  5. Natural Language Toolkit -NLTK (https://www.nltk.org).
  6. Matplotlib (https://matplotlib.org).