• Home
  • About
  • Archives
  • Contact
  • Projects
Logo

  • Data Science
  • Machine Learning
  • Research
  • Tutorial

Preprocessing Data Teks Menggunakan Python | Catatan Penelitian #4

10 October 2020
Rifqi Fauzi Rahmadzani
8 Comments
  • Email
  • Facebook
  • Twitter
  • Pinterest
  • LinkedIn
10 October 2020
8 Comments

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'
}
  • Email
  • Facebook
  • Twitter
  • Pinterest
  • LinkedIn
Previous

Proses Scraping Halaman Website Menggunakan Library Python Beautifulsoup4 | Catatan Penelitian #3

Next

Cara Kerja Word Embedding Word2Vec | Catatan Penelitian #5

The Author

Rifqi Fauzi Rahmadzani

Being someone who is able to contend with my interest and to learn new imaginative, intuitive, and communicative things. The greatest hope of my ability can be beneficial to others.

  • facebook
  • twitter
  • instagram
  • linkedin

8 Comments

  • Dani
    2 years ago
    Reply

    Say amendapatkan error ketika mau mengubah slang word berdasarkan dictionary yang dibuat solusiny abagiaman ya?

    • Rifqi Fauzi Rahmadzani
      2 years ago
      Reply

      Di sesuaikan formatnya kak, bisa email saja biar saya kirimkan slangword punya saya

  • Yasril
    2 years ago
    Reply

    boleh minta slangwords.txt nya?

    • Rifqi Fauzi Rahmadzani
      2 years ago
      Reply

      Bisa langsung email saja

  • faiq
    1 year ago
    Reply

    dictionary slangwordnya bisa dapat dimana ya?

    • Rifqi Fauzi Rahmadzani
      1 year ago
      Reply

      Reproduce sendiri

  • faiq
    1 year ago
    Reply

    boleh minta slangwords.txt nya?

  • Solihah
    11 months ago
    Reply

    Hai, kak!
    terimakasih ilmunya, sangat bermanfaat.

    Saya dapat error ‘list’ object has no attribute ‘keys’.
    Itu bagaimana ya kak?

Leave A Comment Cancel reply

author image

The Author

Rifqi Fauzi Rahmadzani

  • facebook
  • twitter
  • instagram

Being someone who is able to contend with my interest and to learn new imaginative, intuitive, and communicative things. The greatest hope of my ability can be beneficial to others.

Logo

© 2021 Rifqifai.com. Developed by Rifqi Fauzi Rahmadzani