Dataset yang telah diperoleh melalui proses scrapping halaman website menggunakan library Python Beautifulsoup4 masih berupa data asli/mentah sehingga memerlukan pengolahan ke dalam format sebagaimana mestinya. Proses Preprocessing kali ini memanfaatkan library Python diantaraya library Re untuk melakukan hal-hal yang berkaitan dengan reguler expression (regex), library NLTK digunakan untuk melakukan proses pengolahan bahasa natural, dan library Pandas digunakan untuk manipulasi data dalam bentuk dataframe. Untuk kode preprocessing yang saya implementasikan adalah sebagai berikut.
import re
import nltk
import pandas as pd
def casefolding(review):
review = review.lower()
return review
def tokenize(review):
token = nltk.word_tokenize(review)
return token
def filtering(review):
# Remove link web
review = re.sub(r'http\S+', '', review)
# Remove @username
review = re.sub('@[^\s]+', '', review)
# Remove #tagger
review = re.sub(r'#([^\s]+)', '', review)
# Remove angka termasuk angka yang berada dalam string
# Remove non ASCII chars
review = re.sub(r'[^\x00-\x7f]', r'', review)
review = re.sub(r'(\\u[0-9A-Fa-f]+)', r'', review)
review = re.sub(r"[^A-Za-z0-9^,!.\/'+-=]", " ", review)
review = re.sub(r'\\u\w\w\w\w', '', review)
# Remove simbol, angka dan karakter aneh
review = re.sub(r"[.,:;+!\-_<^/=?\"'\(\)\d\*]", " ", review)
return review
def replaceThreeOrMore(review):
# Pattern to look for three or more repetitions of any character, including newlines (contoh goool -> gool).
pattern = re.compile(r"(.)\1{1,}", re.DOTALL)
return pattern.sub(r"\1\1", review)
def convertToSlangword(review):
kamus_slangword = eval(open("slangwords.txt").read()) # Membuka dictionary slangword
pattern = re.compile(r'\b( ' + '|'.join (kamus_slangword.keys())+r')\b') # Search pola kata (contoh kpn -> kapan)
content = []
for kata in review:
filteredSlang = pattern.sub(lambda x: kamus_slangword[x.group()],kata) # Replace slangword berdasarkan pola review yg telah ditentukan
content.append(filteredSlang.lower())
review = content
return review
def removeStopword(review):
stopwords = open(stopwords_Reduced.txt', 'r').read().split()
content = []
filteredtext = [word for word in review.split() if word not in stopwords]
content.append(" ".join(filteredtext))
review = content
return review
data = pd.read_csv(data-review.csv', encoding='latin-1')
# Keeping only the neccessary columns
datasets = [data]
for teks in datasets:
label = teks['sentimen']
teks = teks['ulasan'].apply(casefolding)
teks = teks.apply(filtering)
teks = teks.apply(replaceThreeOrMore)
teks = teks.apply(tokenize)
teks = teks.apply(convertToSlangword)
teks = teks.apply(" ".join)
teks = teks.apply(removeStopword)
teks = teks.apply(" ".join)
print(teks)
# Creating a pandas dataframe from a list first I create a dictionary then convert that to a dataframe
review_dict = {'ulasan': teks, 'sentimen' : label}
df = pd.DataFrame(review_dict, columns = ['ulasan', 'sentimen'])
print(df.info())
# Writing a pandas DataFrame to CSV file
df.to_csv(data-bersih.csv', sep= ',' , encoding='utf-8')
Dalam kode di atas terdapat beberapa tahapan preprocessing diantaranya:
Case folding (line 5-7), Tidak semua ukuran karakter huruf dalam sebuah kalimat sama. Oleh karena itu, tahap ini bertujuan untuk menyetarakan karakter huruf dalam sebuah kalimat menjadi karakter huruf kecil semua.
Tokenisasi (line 9-11), Selanjutnya baru dilakukan tahap tokenisasi yaitu pemotongan kalimat menjadi kata-kata secara terpisah.
Filtering (line 13-28), Tahap ini diawali dengan menghilangkan karakter-karakter khusus dalam kalimat seperti tanda baca, simbol, angka numerik, serta menghilangkan kata yang tidak sesuai hasil parsing, seperti username yang diawali simbol “@”, hastag “#”, dan berbagai emoticon.
Normalisasi (line 13-28), Pada tahap kali ini digunakan untuk mengubah karakter yang berulangan / berlebihan pada suatu kata menjadi non-reduplikasi.
Slang word (line 35-43), Pada tahap ini bertujuan merubah kata-kata slang menjadi kata baku. Proses ini memerlukan kamus slang word dalam format txt.
Stop word (line 45-51), Digunakan untuk menghapus karakter / kata yang tidak perlukan. Kalian dapat menambahkan daftar karakter atau kata yang tidak perlukan pada file stopword Reduced.txt tersebut.
Dari rangkaian tahap tersebut kemudian data akan ditulis ke dalam bentuk dataframe lalu disimpan dengan format csv. Pada kode preprocessing di atas juga dapat dilakukan modifikasi sesuai dengan kebutuhan pada kasus penelitian yang kalian lakukan. Kode tersebut juga tersedia dalam format .ipynb (jupyter notebook) pada repository berikut https://github.com/rifqifai/text-preprocessing.
Berhubung banyaknya permintaan mengenai slangword, kalian dapat menuliskan formatnya seperti berikut:
{
'kata1':'kata ganti1',
'kata2':'kata ganti2',
'kata3':'kata ganti3'
}
Say amendapatkan error ketika mau mengubah slang word berdasarkan dictionary yang dibuat solusiny abagiaman ya?
Di sesuaikan formatnya kak, bisa email saja biar saya kirimkan slangword punya saya
boleh minta slangwords.txt nya?
Bisa langsung email saja
dictionary slangwordnya bisa dapat dimana ya?
Reproduce sendiri
boleh minta slangwords.txt nya?
Hai, kak!
terimakasih ilmunya, sangat bermanfaat.
Saya dapat error ‘list’ object has no attribute ‘keys’.
Itu bagaimana ya kak?