Langsung ke konten utama

Data Analysis Series: Text Mining - Tokenization

Setelah beberapa waktu yang lalu kita sudah mencoba untuk mengimplementasikan Naive Bayes untuk data numerik (structured), atau mungkin beberapa orang menyebutnya sebagai tabular, sekarang akan kita coba implementasi dari algoritma ini untuk data unstructured, dalam hal ini adalah data text.

Penelitian di bidang text mining saat ini sedang sangat intens dilakukan oleh banyak peneliti dan perusahaan-perusahaan besar. Dengan berbagai implementasi seperti search engine, topic summarization, sentiment analysis, dan speech recognition (speech to text, dengan implementasi signal processing tentunya). 

Banyak teori dan algoritma yang diterapkan di sini. Jika membahas tentang sistem, terutama di bidang data analysis, dan machine learning, tentunya ide dasar nya adalah sebagai berikut:

input --> preprocess --> train --> evaluate --> train (again) --> test

Di mana machine learning berperan sangat penting untuk tahap train dan test. Lalu bagaimana dengan preprocess nya? 

Preprocess dalam Text Mining, di mana yang diproses adalah unstructured data, sebenarnya mirip dengan preprocess structured data. Proses seperti cleansing, attribute/feature selection kerap dilakukan pada Text Mining.

Pada post kali ini akan saya coba jelaskan, dengan disertai contoh bagaimana (mudahnya) melakukan preprocess pada text.

Abstraksi Teks/Kata-kata dengan Ruang Vektor

Vektor memegang peranan penting pada Text Mining. Kerap kali saya ditanya oleh teman yang mau belajar Text Mining, bagaimana caranya agar bahasa, kata, kaliman, dan teks dapat dimengerti oleh komputer. Jawabannya adalah dengan mengabstraksi/menerjemahkan teks tersebut ke dalam bentuk vektor. 


Gambar terkait
Gambar 1 Representasi vektor dari kumpulan kata-kata (Sumber: TensorFlow)


Bagaimana cara kerja translasinya? Cara yang paling mudah adalah dengan melakukan proses perhitungan kemunculan kata dari dokumen, percakapan yang akan kita analisa. Sebenarnya cara ini tidak begitu akurat, namun menurut saya, ini adalah cara yang paling mudah untuk memulai belajar Text Mining.

Pada Gambar 1 ditunjukkan Representasi beberapa kata seperti man, woman, king, queen, dilihat dari jumlah kemunculannya (occurance) pada tiga aksis, yang merupakan reprsentasi dari jumlah dokumen. Pada contoh di atas, terdapat tiga aksis (x, y, z), representasi dari tiga dokumen, atau tiga percakapan yang dikumpulkan. Tentu contoh tersebut masih tergolong sederhana, karena untuk melakukan Text Mining bisa melibatkan ribuan, ratusan ribu, bahkan jutaan dokumen yang akan dijadikan aksis, sehingga dataset yang digunakan bisa disebut multi-dimensional dataset.


Tokenization

Abstraksi ke ruang vektor untuk memudahkan kita sebagai manusia untuk bisa memahami bagaimana komputer bisa membaca teks. Selanjutnya kita perlu melakukan kodifikasi agar benar-benar bisa dibaca mesin. Yaitu dengan membangun sebuah matriks korpus (pustaka dokumen) berukuran m x n, di mana m adalah jumlah  kata-kata (fitur) yang ada dalam korpus, dan n adalah jumlah dokumen.

Jika menggunakan contoh di atas, maka matriks korpus yang dibangun adalah sebagai berikut:

d1 d2 d3
king 5 4 1
queen 4 3 3
man 5 1 1
woman 1 2 3
Matriks yang berisikan jumlah kemunculan kata pada tiap-tiap dokumen dalam korpus ini juga lazim disebut sebagai bag of words.

Di mana nilai dari masing-masing vektor d1, d2, d3 yang menentukan bobot dan arah dari vektor tersebut, di ambil dari jumlah kemunculan tiap-tiap kata pada dokumen di dalam korpus:

d1 = ["king king king king king queen queen queen queen man man man man man woman"]
d2 = ["king king king king queen queen queen man woman woman"]
d3 = ["king queen queen queen man woman"]

Implementasi di Python

Berikut di bawah ini adalah implementasi di Python. Python sangat powerfull dalam hal array dan string manipulation, that's why I love it!

d1 = "king king king king king queen queen queen queen man man man man man woman"
d2 = "king king king king queen queen queen man woman woman"
d3 = "king queen queen queen man woman"

def wordount():
D = [d1, d2, d3]

V = []
bagofwords = []

for d in D:
for t in d.split(" "):
if t not in V:
V.append(t)

for v in V:
occurance_in_doc = []
for d in D:
num_occurance = 0
terms_in_d = d.split(" ")
num_occurance = terms_in_d.count(v)
occurance_in_doc.append(num_occurance)
bagofwords.append(occurance_in_doc)

print(bagofwords)

wordcount()

Sekian, post berikutnya akan dibahas algoritme classifier untuk Text Mining. Stay tuned!

Komentar

Postingan populer dari blog ini

Berkenalan dengan Laravel

Cukup disayangkan, Codeigniter sudah sampai ke tahap "penguburan" - paling tidak ini klaim dari Ellis Lab- dan ini cukup mengusik kenyamanan saya untuk menggunakan CI. Padahal juga sesuai dengan pengakuan rekan-rekan web developer, CI menurut saya cukup mudah dan powerful untuk digunakan dalam membangun sebuah web apps, dan terbukti juga CI sempat jadi trendsetter untuk framework PHP. Saya jadi penasaran framework PHP apa yang jadi the next PHP Framework star setelah CI, setelah menggali informasi beberapa kali, saya temukan Laravel saat ini banyak jadi batu loncatan developer CI. Alasannya sederhana, Laravel banyak kemiripan dengan CI. Dari analisa Google Trends juga terlihat kepopuleran Laravel saat tulisan ini dibuat juga menanjak meskipun masih kalah populer dengan CI (cukup mengherankan CI masih memimpin untuk masalah kepopuleran). Jadi langsung saja saya mencoba mengeksplorasi barang baru ini. Berikut langkah-langkahnya: 0. Install curl 1. Install composer: ...

Perbandingan Algoritme Dynamic Programming, Greedy, dan Backtrack Programming.

Sebetulnya posting ini bisa dibilang sudah kadaluarsa.  But, Better be late than never at all, right mate ? Ok, sebetulnya(lagi) Saya ingin menulis ulang semua yang ada di tugas semester 1 mata kuliah Analisa Algoritme, namun setelah dipikir-pikir lagi rasa-rasanya akan mubadzir, jadi di sini akan Saya gambarkan ulang secara ringkas saja apa perbedaan Dynamic Programming, Greedy dan Backtrack. Sebelum menyentuh ke dalam algoritmenya, Kita lihat terlebih dahulu kasus permasalahannya. Tentu belajar akan lebih mudah apabila tidak hanya dengan mempelajari teorinya saja. Umumnya orang akan lebih semangat apabila ada kasus menarik yang dipelajari. Tentang Knapsack Knapsack sendiri merupakan permasalahan pencuri yang ingin mencuri barang dengan cara memasukkan sebanyak-banyaknya dan seberharga-berharganya barang yang ada ( of course, its a theft ), sejumlah wadah yang pencuri tersebut punya. Diharapkan dengan menerapkan beberapa algoritme ini pencuri dapat meraup keuntungan sebanyak...

Data Analysis Series: Perceptron - Basic Artificial Neural Network

Pendahuluan Pada posting berikut ini saya akan menyampaikan materi tentang (Artificial) Neural Network. Algoritme yang satu ini terinspirasi dari cara kerja sel otak dalam memproses informasi. Sedikit di bawah ini pertama-tama akan saya sampaikam penjelasan bagaimana sel otak bekerja, untuk mempermudah pemahaman bagaimana ANN dapat terinspirasi. Sel Otak (Sumber:  www.wealltest.com ) Seperti yang kita ketahui, otak terdiri atas milyaran sel. Tiap-tiap sel tersebut terbagi atas tiga bagian, yaitu Dendrites, atau receptor, bagian yang menerima sinyal/stimulasi dari sel-sel otak yang lain. Sinyal/stimulasi yang masuk ke dendrite tersebut awalnya berasal dari indra perangsang kita, seperti mata, kulit, telinga, dan lidah. Dari dendrite, sinyal kemudian diteruskan melalui Axon, semacam pipa penghubung, yang mentransmisikan sinyal dari dendrite, untuk ditransmisikan ulang ke sel lain melalui Synapse. Bisa dikatakan, Synapse ini berfungsi sebagai akumulator untuk dari info...