November 10, 2018

Review Prediksi Geolokasi Data Media Sosial - Conference International Kedua

Tahun 2018 sudah mulai memasuki kuartal ke-empatnya, sebentar lagi umur penulis bertambah dan 2018 akan berganti menjadi 2019. Ada banyak hal luar biasa yang terjadi ditahun 2018 ini yang belum sempat penulis dokumentasikan pada blog ini. Maka pada sesi kuartal empat tahun 2018 ini akan berusaha menuliskan beberapa hal penting yang terjadi pada penulis selama 2018, salah satunya adalah conference international kedua penulis pada bulan maret 2018.

Foto Bersama Setelah Materi Keynote Speaker
Pada bulan maret 2018 diselenggarakan sebuah conference international yang diselenggarakan di Yogyakarta, Indonesia dengan nama 2018 International Conference on Information and Communications Technology (ICOIACT). Conference ini dilangsungkan rutin tiap tahun dengan lokasi yang berpindah-pindah. Tahun ini, penulis berkesempatan ikut sebagai salah satu speaker dengan judul paper "Geolocation prediction in social media data using text analysis: A review". Judul tersebut merupakan hasil studi literatur mengenai topik penelitian yang sedang penulis kerjakan yaitu prediksi geolokasi data sosial media.

Paper yang penulis kirimkan pada conference ini dapat penulis katakan spesial karna butuh waktu sampai 6 bulan lamanya untuk penulis menulis dan membuatnya. Paper ini memakan waktu pengerjaan yang jauh lebih lama dari paper pertama penulis tahun 2017 lalu. Ada beberapa hal yang membuat pengerjaannya sangat lama, beberapa diantaranya seperti banyaknya paper yang harus dibaca dan dimengerti, kemampuan penulis menulis literatur yang belum baik (menulis paper review punya kerumitan tersendiri dalam perangkaiannya ketimbang paper teknis), hingga pembimbing yang sangat ketat dalam membaca dan memberikan persetujuan ACC. hehe

Koreksi-koreksi dari pembimbing selama proses pengerjaan paper sempat membuat depresi, beberapa kali garis besar paper dirumah, belum lagi sulitnya bertemu karna jadwal beliau yang sulit. Saat mengerjakan paper ini, pengalaman pertama mendapat seorang pembimbing yang benar-benar membaca isi paper penulis dapatkan. Hal yang pada akhirnya penulis syukuri karna banyak pelajaran dalam menulis paper yang didapatkan dari beliau, dengan pengalaman dan hasil bimbingan beliau yang seringnya tembus jurnal-jurnal internasional bereputasi maka tidak mungkin koreksinya mengada-ngada, selalu ada pelajaran yang bisa diambil pada setiap perbaikan.

Pada akhirnya papernya disetujui dan penulis kirim pada conference ICOIACT dan berhasil diterima dengan minor revision. Hanya sedikit perbaikan saja yang diminta oleh reviewer, ini yang membedakan dengan paper pertama tanpa bimbingan yang terlalu banyak. Paper dengan pembimbingan yang serius dapat diterima dengan minor revision dan paper dengan sedikit bimbingan diterima dengan major revision. Kedua paper menunjukkan bahwa pembimbingan bisa sangat mempengaruhi hasil review.

Setelah menyelesaikan perbaikan minor dan mengirim final manuscript akhirnya presentasi paper dilangsungkan pada Maret 2018 kemarin. Pengalaman presentasi kedua ini juga sangat berbeda dengan pengalaman pertama dimana ada banyak sekali audience pada conference ICOIACT ini. Audience sebagian berasal dari akademisi Indonesia dan sebagian lagi berasal dari berbagai negara ASIA seperti Malaysia, Laos, Filipina, hingga China. Penulis mendapat kesempatan presentasi pagi, selama prosesnya ada banyak pertanyaan dari audience (sekitar 4-5 - lupa. hehe) yang dapat penulis jawab dengan baik (insyaAllah). Hingga presentasi penulis selesai rasanya sangat lega dan puas atas prosesnya. Seletah ini akan melanjutkan penelitian dari sisi teknis dan menyelesaikan penelitian ini.

Pesannya, dengarkan dan terima dengan baik koreksi-koreksi yang berdatangan saat menulis paper, karna bisa jadi apa yang kita tulis sudah benar menurut penulis sendiri tapi dapat membingungkan bagi pembaca. Paper terbaik dan sukses menurut penulis adalah paper yang mudah dipahami, bukan paper yang membuat pembaca menjadi bingung. hehe 

Ohiya, papernya bisa dibaca di: https://ieeexplore.ieee.org/document/8350674

Salam

March 25, 2018

Tentang Side Project Membuat Aplikasi Sentiment Analysis Indonesia

#TesOmbak

Sedang mengembangkan side project sederhana untuk mengisi waktu luang disela-sela proses penyelesaian projek akhir kuliah. Side project ini berupa app sentiment analysis yang mengolah data Twitter (karna Facebook sudah milik Cambridge Analytica hehe). Setelah beberapa waktu mengembangkan app ini, sekarang saatnya melakukan sedikit testing.

Jadi topik yang lagi hangat baru-baru ini adalah soal "koalisi Habib Rizieq" untuk pilpres 2019. Testing ini mencoba memanfaatkan topik tersebut sebagai objek uji coba. Sebenarnya tidak ada tujuan bahas politik, hanya karena topik ini sedang hangat-hangatnya dalam beberapa hari ini.
Crawl data twitter
Testing app ini diawali dengan mengambil Tweet yang diposting hari kemarin (topiknya baru booming kemarin juga). Pengambilan data dibatasi 1000 Tweet, walau demikian data Tweet yang berhasil di crawl cuma 181 data (no retweet dan no reply). Sebanyak 181 data ini kemudian diolah untuk mencari polaritas sentimennya, siapa saja pelaku berpengaruh pada topik ini, feature word-nya, dan lokasi Tweet yang berbicara soal topik ini. Berikur hasilnya:

# Sentiment
Hasil analisis sentimen
Tweet dengan sentimen positif
Hasil analisis sentimen menunjukkan 51.9% data Tweet memiliki sentiment postive untuk topik ini, 45.9% neutral dan hanya dan hanya 2.2% negative. Penasaran dengan hasil ini, jadilah akhirnya "kepo" ke Tweet-tweet positive. Hasilnya bisa diliat digambar, memang banyak Tweet positive dari netizen Twitter soal topik ini, contohnya Tweet dari @al_rayha yang mengatakan "persatuan ummat selalu membawa maslahat bagi bangsa. PBB Siap Patuhi Habib Rizieq Koalisi dengan Gerindra-PAN-PKS" atau dari @_mediaislam yang mengatakan "Menangkan Pilpres 2019, PKS Siap Sambut Saran Koalisi Habib Rizieq". Hasil ini menunjukkan banyak yang mendukung partai-partai tersebut untuk bersatu, dan ini mungkin jadi momen baik untuk mewujudkan hal tersebut.

# Tweet Berpengaruh
Tweet berpengaruh
Pengguna Twitter dengan Tweet paling berpengaruh untuk topik ini adalah BangPino_, Tweet-nya di like/favorite sebanyak 1K lebih, mendapat 68 reply, dan 829 retweet. Tweet ini bersentimen negative (banyak yg kegalauannya terwakili oleh Tweet dia sepertinya). Sedikit info soal user ini, dia menuliskan "Industrial Engineer | Praktisi Kesehatan | Pemerhati Sosial Politik | Santri Modern | Profesional Photographer." pada profilnya. Jadi bukan dari orang politik atau news akun. Untuk Tweet lain yang berpengaruh bisa diliat digambar.

# Feature Word
Feature word
Jadi orang-orang yang membicarakan soal koalisi ini banyak menyebutkan partai-partai seperti PKS, Gerindra, PAN, PBB yang mana memang itu partai yang disarankan untuk berkoalisi. Namun ada sedikit netizen juga menyinggung Nasdem dan PDIP disana. Kedua partai tersebut disebutkan beberapa kali oleh netizen sebagai lawan dari koalisi yang disarankan.

# Lokasi Tweet
Sebaran data lokasi tweet
Tidak semua Tweet diketahui asal lokasinya. Lebih spesifik ada 55 data yang tidak diketahui asal lokasinya. Sisanya tersebar, Tweet yang berasal dari Jakarta ada 67 Tweet, yang lainnya tersebar diberbagai daerah sepeti Jogja, Medan, Pekanbaru, Bandung, Bengkulu, Bogor hingga Sorong, Papua. Walaupun asal datanya terlihat menyebar, namun kebanyakan Tweet berasal dari daerah-daerah dipulau Jawa, di ikuti Sumatra, Kalimantan, Sulawesi dan kemudian Papua. Tandanya topik koalisi ini sudah masuk isu Nasional.

# Potensi Pengembangan Side Project Ini

Saat ini masih banyak kekurangan yang perlu dibenahi, khusunya pada:
  • Classifier Sentimen
    Saat ini masih menggunakan statistical method merujuk paper : jurnal.ugm.ac.id/ijccs/article/view/16625. Sudah ada modifikasi yang dilakukan sebagai upaya agar classifier-nya bisa bekerja lebih bagus untuk data sosmed, tapi yakin improvment-nya belum begitu besar dengan akurasi masih 60%-70% atau bahkan bisa turun. Untuk pastinya belum hitung akurasi ulang. Rencananya classifier ini akan dipindahkan ke machine learning secepatnya.
  • Soal Tweet Retweet
    Kedepannya data retweet juga harus di crawl dan diperhitungkan. Hal ini didasari dari pengamatan Tweet berpengaruh (bagian: # Tweet Berpengaruh). Tweet yang paling banyak di retweet adalah Tweet negative, Tweet-tweet Retweet ini belum masuk dalam kalkulasi sentiment. Jika masuk mungkin bisa memberikan hasil berbeda.
  • Source Data
    Kedepannya objek data tidak hanya dari Twitter tapi juga dari Facebook, Instagram dan Mainstream Media Indonesia.
Masih banyak yang potensi pengembangan dan hal-hal yang harus diperbaiki. Namanya juga side project. Tapi app ini sudah lumayan untuk digunakan "kepo" soal pilkada, soal viral-viral, atau soal analisis sentiment brand tertentu.

Itu saja.
Terimakasih kepada yang membaca sampai dibawah sini. 
So ya. That's it.

February 11, 2018

Penentuan Kelas UKT Mahasiswa - Pengalaman Pertama Ikut Conference International

Pada artikel ini saya hanya ingin sedikit cerita pengalaman mengikuti conference international pada bulan November tahun 2017 lalu. Saya mengikuti conference ini sebagai salah satu presenter setelah paper saya dinyatakan lulus untuk dipublikasi.

Paper yang presentasikan pada conference tersebut merupakan paper dengan topik data mining berjudul "Determining Single Tuition Fee of Higher Education in Indonesia: A Comparative Analysis of Data Mining Classification Algorithms". Sebuah paper yang membahas bagaimana cara mengklasifikasi kelas Uang Kuliah Tunggal (UKT) mahasiswa berdasarkan kemampuan ekonomi dengan menggunakan machine learning. Ide dasar yang ada pada paper tersebut adalah bagaimana membuat system yang dapat menentukan beban biaya pendidikan berdasarkan kemampuan ekonomi secara otomatis berdasarkan penilaian komputer. Caranya adalah memberikan komputer pengetahuan agar dapat menilai kemampuan ekonomi mahasiswa berdasarkan data training hasil klasifikasi oleh manusia dengan feature seperti penghasilan orang tuanya, asal daerahnya, jumlah saudaranya dll. Kemampuan ini akan membantu kampus dalam menentukan kelas UKT mahasiswa secara otomatis sehingga dapat mengurangi beban kerja penetuan UKT yang biasanya dilakukan manual oleh panitia pendaftaran. Pada akhirnya, masalah penentuan UKT saya selesaikan dengan menggunakan pendekatan supervised learning dengan membanding akurasi beberapa metode seperti SVM, Decission Tree dan Naive bayes.

Paper tersebut sebenarnya berasal dari salah satu tugas mata kuliah yang saya ambil pada semester genap tahun ajaran 2016/2017, namun pada akhirnya dinilai layak untuk coba dipublikasikan oleh dosen pengampu mata kuliah. Setelah proses bimbingan mengenai penulisan naskah paper, akhirnya saya mengirim naskahnya pada salah satu conference international.

Pada awalnya saya sempat ragu paper itu akan diterima karna proses penulisannya yang sedikit dipercepat mengingat deadline yang ada saat itu. Namun, saat penguman saya sangat senang karna paper itu dinyatakan "accepted with mayor revision". Maksudnya adalah paper tersebut bisa saja diterima untuk dipublikasikan jika dapat direvisi sesuai dengan masukan dari reviewer yang ada, masukkannya ada banyak, makanya disebut "mayor revision". Revisinya tak tanggung-tanggung, cukup bikin galau karena harus mengubah cara evaluasi, tapi saya menyadari bahwa masukan dari reviewer tersebut adalah cara yang terbaik untuk mengevaluasi hasil klasifikasi yang saya kembangkan dan tuliskan pada paper. Pada akhirnya saya mendapat mengalaman dan masukan, sekaligus dapat menyelesaikan revisi dengan tepat waktu. Selanjutnya tinggal mempresentasikan paper pada tanggal yang telah ditentukan.


Presentasi saya jika boleh jujur sedikit kaku, mungkin karna itu adalah kali pertama saya mengikuti conference, khawatir jika ada pertanyaan dari audience yang tidak bisa saya jawab. Wajar saja mengingat audiencenya adalah kalangan akademisi dengan paper-paper yang keren menurut saya. Saya bahkan sampai tidak bisa mengatur irama pernafasan saat presentasi (sering terjadi klw sedang gugup) didepan mereka. Pada akhirnya saya mendapat cukup banyak pertanyaan yang menunjukkan bahwa audience cukup tertarik dengan materi saya karna alokasi penanya harus ditambah hingga 2 kali, semuanya bisa saya jawab dengan baik (insyaAllah).  

Dua bulan setelah presentasi akhirnya paper tersebut telah terbit dan terindeks pada IEEE: http://ieeexplore.ieee.org/document/8266041/. Harapannya ini menjadi awal yang baik untuk publikasi-publikasi selanjutnya.

November 28, 2017

Web Based Sentiment Analysis Bahasa Indonesia dengan Metode Naive Bayes

Beberapa waktu lalu mendapat tugas dari salah satu mata kuliah yang saya ambil semester ini yaitu software testing. Tugas ini bertujuan untuk memastikan kehandalan software sebelum digunakan oleh pengguna. Sebagai objek software untuk di test, saya memutuskan menggunakan module sentiment analysis yang sempat saya buat awal tahun 2017 ini yaitu sentiment analysis bahasa Indonesia berbasis web dengan metode Naive Bayes.

Sentiment analysis merupakan salah satu bidang dalam text mining yang bertugas untuk klasifikasi sentimen sebuah data text. Sentimen dalam hal ini adalah kecenderungan sebuah data text berbicara hal positif, netral atau negatif mengenai suatu hal.

Penggunaan sentiment analysis, khususnya bagi negara dengan pengguna social media yang besar seperti Indonesia sangat penting karna dapat mempengaruhi berbagai keputusan. Dengan menggunakan sentiment analysis, organisasi bisnis misalnya dapat mengetahui produk mana yang disukai dan tidak disukai konsumen. Dalam bidang politik, sentiment dapat membantu dalam prediksi pemenang Pemilu dari data text social media yang dianalisis.

Aplikasi sentiment analysis yang dikembangkan merupakan module sentiment analysis yang dimodifikasi dari project phpInsight. Aplikasi ini menggunakan metode probabilitas Naive Bayes sebagai classifier. Secara sederhana metode Naive Bayes merupakan metode klasifikasi dengan perhitungan probabilitas sederhana dengan mengaplikasikan Teorema Bayes dengan asumsi yang kuat (naif) bahwa setiap kejadian independen atau tidak tergantung dengan kejadian lain.

Github: https://github.com/yasirutomo/php-sentianalysis-id

Artikel ini tidak membahas proses perhitungan Naive Bayes yang dapat ditemukan dengan mudah diberbagai artikel, ataupun proses coding secara step-by-step. Walau demikian, proses ini dapat dimengerti dengan sangat mudah karna menggunakan bahasa PHP yang sudah umum dengan struktur yang rapi. Bagi yang tertarik untuk mempelajari prosesnya atau memodifiaksi algoritmanya, penentuan hasil sentiment dilakukan pada file /lib/PHPInsight/Sentiment.php pada project Github php-sentianalysis-id yang telah saya upload.

Gambar 1. Tampilan Standar Aplikasi Sentiment Analysis Bahasa Indonesia

Saat ini, hasil prediksi sentimen analysis aplikasi ini sangat bergantung pada dataset dan data yang diuji. Dataset yang digunakan merupakan kumpulan kata yang sesuai dengan ejaan baku bahasa Indonesia sehingga cocok untuk data uji dengan ejaan baku juga. Penyesuaian selanjutnya dapat dilakukan dengan melakukan perubahan dataset yang terdapat pada directory lib/PHPInsight/.


Gambar 2. Module Sentiment Analysis Digunakan Untuk Analysis Data Twitter Bahasa Indonesia

Untuk penggunaan lebih jauh, modul ini juga dapat diintegrasikan dengan API Twitter untuk analysis setiap tweet pengguna social media sebagaimana terlihat pada Gambar 2.

Selamat mencoba.

July 27, 2017

Menghitung Jarak Satu Titik Koordinat dengan Titik Koordinat Lain (Antar Koordinat) dengan Python

Beberapa waktu lalu mendapat sebuah kasus untuk menghitung jarak satu titik koordinat (latitude dan longitude) dengan titik koordinat lain. Setelah searching ke beberapa referensi akhirnya mendapat satu persamaan yang bisa digunakan untuk menghitung jarak 2 titik koordinat. Nama persamaan ini disebut Haversine Formula.

Haversine Formula adalah persamaan yang penting dalam bidang navigasi untuk mencari jarak antara dua lokasi. Persamaan ini bekerja dengan menarik sebuah garis dari satu titik ke titik kedua. Pada artikel ini, implementasi dari persamaan haversine ini akan dibuat dengan Python. Untuk satuan jarak yang digunakan adalah Kilometer.

Kode
from math import radians, cos, sin, asin, sqrt

def haversine(lon1, lat1, lon2, lat2):
    """
    Calculate the great circle distance between two points 
    on the earth (specified in decimal degrees)
    """
    # convert decimal degrees to radians 
    lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])

    # haversine formula 
    dlon = lon2 - lon1 
    dlat = lat2 - lat1 
    a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
    c = 2 * asin(sqrt(a)) 
    r = 6371 # Radius of earth in kilometers. Use 3956 for miles
    return c * r

center_point = [{'lat': -7.7940023, 'lng': 110.3656535}]
test_point = [{'lat': -7.79457, 'lng': 110.36563}]

lat1 = center_point[0]['lat']
lon1 = center_point[0]['lng']
lat2 = test_point[0]['lat']
lon2 = test_point[0]['lng']

a = haversine(lon1, lat1, lon2, lat2)

print('Distance (km) : ', a)

area = 1.00 # in kilometer
if a <= area:
    print('Inside the area')
else:
    print('Outside the area')

Variabel lat1 dan lon2 merupakan titik koordinat lokasi pertama, sedangkan lat2 dan lon2 merupakan titik koordinat lokasi kedua. Koordinat-koordinat ini kemudia dikirim pada fungsi def haversine yang merupakan fungsi penghitung jarak dengan persamaan haversine.

Sebagai tambahan saya membuat kondisi senderhana, yang menenapkan titik1 berada didalam luas area tertentu dari titik2 atau tidak. Variabel area menginisialisasi jarak radius yang diinginkan, misal dalam contoh adalah 1.00 (1 KM), jika jarak antar kedua titik kurang dari 1 KM maka bernilai true, jika tidak berinai false, atau diluar jangkauan area/radius.

Hasil

Selamat mencoba.

July 20, 2017

Spell Checker / Pengecekan Ejaan untuk Deteksi dan Perbaikan Typo Bahasa Indonesia

Pengolah data text dari social media merupakan pekerjaan yang membutuhkan tahap preprocessing data yang baik. Sebagaimana telah di jelaskan dalam artikel "Normalisasi Data Text (Text Preprocessing) dengan Python", data text dari social media mengandung banyak kosa kata tidak baku yang dituliskan dengan berbagai macam cara oleh user.

Salah satu kebiasaan user dalam menuliskan sebuah kata, khususnya user dari Indonesia adalah menyingkat-nyingkat kata dan typo. Sebagai contoh: 'mkan' yang berarti makan, 'cpt' yang berarti cepat dan lain sebagainya. Belum lagi yang memang tidak sengaja salah ketik seperti: 'bukam' yang bisa berarti bukan, 'tugsa' yang berarti tugas dan lainnya.

Masalah
Jika dalam proses pengolahan kata, type penulisan singkatan dan typo tidak diperbaiki, ada kemungkinan besar dapat mempengaruhi hasil analisis akhirnya. Diperlukan sebuah tahap normalisasi dimana kesalahan type penulisan tidak baku dan kesalahan pengetikan dapat diminimalisir sebisa mungkin.

Solusi
Salah satu solusi untuk mengatasi masalah ini adalah dengan melakukan pengecekan ejaan kata (spell checker). Dalam bahasa pemograman Python sebenarnya telah terdapat library untuk melakukan tugas ini yang difasilitasi oleh NLTK, namun sayangnya library ini belum mendukung proses tersebut untuk bahasa Indonesia. Solusi lain adalah membuat sendiri proses spell checker ini. Untungnya, banyak referensi yang dapat digunkan untuk mengatasi masalah ini. Salah satu solusi paling sederhana dijabarkan oleh Peter Norvic dalam lamannya http://norvig.com/spell-correct.html.

Peter Norvic yang seorang ahli bidang ilmu komputer dari US, membuat sebuah fungsi spell checker yang dapat digunakan untuk berbagai bahasa yang ada di dunia, termasuk Bahasa Indonesia. Salah satu kelebihan dari fungsi ini adalah code yang sangat sederhana sehingga mudah dipahami, dengan dataset yang dapat diubah-ubah sesuai keinginan.

Kode
Terdapat setidaknya 2 file yang dibutuhkan untuk membuat spell checker ini, yaitu file untuk eksekusi dalam format Python, dan satu lagi file yang mengandung kata-kata baku berbahasa indonesia.

spellchecker.py
import re
from collections import Counter

def words(text): return re.findall(r'\w+', text.lower())

WORDS = Counter(words(open('katadasar.txt').read()))

def P(word, N=sum(WORDS.values())): 
    # "Probability of `word`."
    return WORDS[word] / N

def correction(word): 
    # "Most probable spelling correction for word."
    return max(candidates(word), key=P)

def candidates(word): 
    # "Generate possible spelling corrections for word."
    return (known([word]) or known(edits1(word)) or known(edits2(word)) or [word])

def known(words): 
    # "The subset of `words` that appear in the dictionary of WORDS."
    return set(w for w in words if w in WORDS)

def edits1(word):
    # "All edits that are one edit away from `word`."
    letters    = 'abcdefghijklmnopqrstuvwxyz'
    splits     = [(word[:i], word[i:])    for i in range(len(word) + 1)] # [('', 'kemarin'), ('k', 'emarin'), ('ke', 'marin'), dst]
    deletes    = [L + R[1:]               for L, R in splits if R] # ['emarin', 'kmarin', 'kearin', dst]
    transposes = [L + R[1] + R[0] + R[2:] for L, R in splits if len(R)>1] # ['ekmarin', 'kmearin', 'keamrin', dst]
    replaces   = [L + c + R[1:]           for L, R in splits if R for c in letters] # ['aemarin', 'bemarin', 'cemarin', dst]
    inserts    = [L + c + R               for L, R in splits for c in letters] # ['akemarin', 'bkemarin', 'ckemarin', dst]
    return set(deletes + transposes + replaces + inserts)

def edits2(word): 
    # "All edits that are two edits away from `word`."
    return (e2 for e1 in edits1(word) for e2 in edits1(e1))

kata = 'mkan'
print('kata typo : ', kata)
print('koreksi : ', correction(kata))

katadasar.txt
makan
cepat
dengan
bagaimana
itu
dia
saya
lagi
kamu

Cara Kerja
Spell Checker ini bekerja dengan memanfaatkan perhitungan probabilitas Teorema Bayes (bagi yang belum familiar dapat mencari informasi dari berbagai sumber). Untuk bagian-bagian dari spell checker ini hingga mengeluarkan rekomendasi kata dapat dijabarkan secara sederhana sebagai berikut:
  1. Selection Mechanism
    Mekanisme pemilihan kata yang benar dilakukan dengan memilih kandidat yang memiliki nilai kombinasi probabilitas tertinggi.
  2. Candidate Model
    Untuk mencari kandidat kata-kata yang mungkin merupakan kata yang benar dari sebuah kata sinkat atau typo. Proses ini dilakukan dengan mengeksplorasi kata, penghapusan huruf, pemindahan huruf, penambahan huruf, dan penggantian huruf pada objek kata dilakukan. Proses ini dilakukan oleh function edits1 pada file spellchecker.py.
  3. Language Model
    Language Model adalah probabilitas sebuah kata muncul pada dataset yang digunakan. Dalam hal ini adalah dataset katadasar.txt.
  4. Error Model
    Error model meruapakan probabilitas sebuah kata yang dipresiksi meleset dari maksud asli penulisnya. Tugas ini dihandle oleh function edits2 pada file spellchecker.py
Hasil
Ouput dari spell checker ini berupa rekomendasi kata yang mungkin benar dari sebuah kata singkat atau kata typo sebagaimana diperlihatkan oleh gambar berikut:


Sebagai penutup, beberapa kekurangan pada spell checker ini adalah hasil rekomendasi pengecekan kata tidak mengeluarkan hasil yang kurang baik jika dataset yang digunakan tidak pas. Sehingga penggunaan dataset yang pas untuk kasus-kasus tertentu mungkin dibutuhkan.