Text Preprocessing

By | September 26, 2022

Mangihin.com is a website that provides useful information, please share if there is interesting information that can help you. Thank you

Pada catatan ini konteks text preprocessing lebih ditekankan ke Bahasa Inggris.

Sebelum memulai, ada baiknya kita pahami apa itu text. Text dapat kita gambarkan sebagai rangkaian dari:

  • character
  • kata
  • frase dan nama entitas
  • kalimat
  • paragraph

Kata, pada umumnya kita memandang text sebagai rangkaian dari kata yang memiliki arti. Dan kita juga dapat mengatakan kata adalah rangkaian karakter yang memiliki arti. Pada Bahasa Inggris atau juga Bahasa Indonesia, kata dipisahkan oleh spasi dan tanda baca.

Contoh: Friends, Romans, Countrymen, lend me your ears;
Kalimat diatas dapat kita pisahkan menjadi

  • Friends
  • Romans
  • Countrymen
  • lend
  • me
  • your
  • ears

Untuk bahasa tertentu, terdapat kata majemuk tanpa spasi, contoh Bahasa Jerman,  “Rechtsschutzversicherungsgesellschaften” yang berarti “Perusahaan insurance yang menyediakan jasa legal protection”

Tokenization

Proses untuk memisahkan input text menjadi potongan yang memiliki arti disebut tokenization. Hasil dari proses tokenization disebut token. Token dapat berupa kata, kalimat, paragraph dan lainnya.

NLTK library

WhiteSpace tokenization, yaitu: nltk.tokenize.WhiteSpaceTokenizer. Library ini akan melakukan tokenization hanya berdasarkan whitespace (spasi).

Contoh: This is Andre’s text, isn’t it?
Akan dipecah menjadi

  • This
  • is
  • Andre’s
  • text,
  • isn’t
  • it?

Ada sedikit permasalahan dengan metoda diatas, karena token terkahir yaitu,  it? akan memiliki arti yang sama dengan token it (begitu juga dengan text, dan text saja)

Namun model text classification yang kita buat akan melihatnya sebagai token yang berbeda, dan mungkin akan menghasilkan efek yang tidak kita harapkan.

Punctuation Tokenizer, yaitu: nltk.tokenize.WordPunctTokenizer. Library ini akan melakukan tokenization berdasarkan punctuation atau tanda baca. Maka text diatas akan menjadi

  • This
  • is
  • Andre
  • s
  • text
  • ,
  • isn
  • t
  • it
  • ?

Token yang bermasalah adalah s, isn, t tidak memiliki arti sama sekali.

Rules based tokenizer, yaitu: nltk.tokenize.TreebankWordTokenizer. Library ini akan melakukan tokenization berdasarkan aturan grammar Bahasa Inggris, dimana hasil token lebih masuk akal untuk diproses lebih lanjut.

Hasil tokenization menggunakan library ini adalah seperti berikut:

  • This
  • is
  • Andre
  • ‘s
  • text
  • ,
  • is
  • n’t
  • it
  • ?

Implementasi dalam Python


import nltk

text = "This is Andre's text, isn't it?"

tokenizer = nltk.tokenize.WhitespaceTokenizer()
tokenizer.tokenize(text)


tokenizer = nltk.tokenize.WordPunctTokenizer()
tokenizer.tokenize(text)


tokenizer = nltk.tokenize.TreebankWordTokenizer()
tokenizer.tokenize(text)


Normalization

Langkah selanjutnya yang mungkin diperlukan adalah normalization. Normalization dilakukan biasanya pada kata plural atau irregular verb. Contoh:

  • wolf, wolves : wolf
  • talk, talks: talk

Proses normalization dapat dibagi dua:

  • Stemming, proses membuang atau mengganti suffix untuk mendapatakan root word, yang disebut stem. Metoda yang digunakan adalah heuristic, hasilnya biasanya akan ada masalah untuk kata-kata tertentu.
  • Lemmatization, proses berdasarkan aturan vocab  dan morphological analysis. Akan menghasilkan kata dasar, yang disebut lemma.

Contoh Stemming

Porter’s stemmer, adalah metoda stemming yang cukup terkenal dan banyak digunakan. Menggunakan 5 fase heuristic stemming yang dilakukan secara berurutan. Contoh fase pertama:

  • SSES -> SS, contoh: caresses -> caress
  • IES -> I, contoh: ponies -> poni (bermasalah, seharusnya pony)
  • SS -> SS, contoh: caress -> caress
  • S ->  , contoh cats -> cat

NLTK menyediakan library stemming dan dapat diimport dengan nltk.stem.PorterStemmer. PorterStemmer ini tidak bisa membedakan irregular form.

  • feet-> feet (seharusnya foot)
  • wolves -> wolv (seharusnya wolf)
Dapat dilihat dari contoh diatas, stemming memiliki kelemahan di irregular word dan menghasilkan kata yang meaningless, meskipun demikian dalam prakteknya hal ini belum tentu menjadi masalah.
Contoh Lemmatization
Lemmatization menggunakan WordNet database untuk mencari lemma. Library yang digunakan adalah nltk.stem.WordNetLemmatizer.

feet -> foot
wolves -> wolf
cats -> cat
talked -> talked

Dapat kita lihat dari contoh diatas lemma dapat menyelesaikan masalah irregular word.

Kesimpulan : kita harus mencoba stemming dan lemmatization, mana yang paling baik untuk kebutuhan kita.

Implementasi python

import nltk


text = "feet cats wolves talked"
tokenizer = nltk.tokenize.TreebankWordTokenizer()
tokens = tokenizer.tokenize(text)

stemmer = nltk.stem.PorterStemmer()
" ".join(stemmer.stem(token) for token in tokens) 


lemma = nltk.stem.WordNetLemmatizer()
" ".join(lemma.lemmatize(token) for token in tokens) 

Normalization Lanjutan

Langkah selanjutnya adalah menormalisasi huruf besar menjadi huruf kecil. Kita dapat melakukan langkah heuristic untuk rule berikut:

  • huruf kecil untuk awal kalimat
  • huruf kecil untuk judul
  • biarkan huruf besar yang berada di tengah text

Beberapa kasus yang perlu diperhatikan (contoh dalam Bahasa Inggris), misalnya us (kita) dengan US (negara US), kita tidak bisa membuat US kedua menjadi huruf kecil karena keduanya memiliki arti yang berbeda.

Namun untuk kasus review, sering orang meninggalkan review dengan huruf kapital, jadi US diatas bisa saja US (negara), atau Us (kita), adalah tugas kita untuk memastikan dapat membedakan hal tersebut.

Bila skill kita sudah advanced, kita dapat melakukan normalization dengan bantuan machine learning, namun hal ini sulit dan diluar lingkup bahasan pada artikel ini.

Normalisasi akronim juga perlu dilakukan contoh, eta, e.t.a, E.T.A -> E.T.A. hal ini dapat dilakukan dengan menggunakan regular expression (cukup sulit, karena kita harus memikirkan semua kemungkinan singkatan, dan setiap orang bisa berbeda cara penulisannya walaupun maksudnya sama).

Rangkuman

  • Kita dapat asumsikan text adalah rangkaian dari token-token.
  • Tokenization adalah proses memecah text menjadi token.
  • Token dapat kita normalize dengan metoda stemming dan lemmatization
  • Kita juga dapat melakukan normalisasi untuk huruf besar dan akronim

Next Article
Feature Extraction