Klasifikasi Artikel Berita Berbahasa Indonesia Berbasis Naïve Bayes Classifier Menggunakan Confix-stripping Stemmer 5210100106 - Amalia Anjani A. Dosen Pembimbing Dosen Pembimbing I Dosen Pembimbing II
: Prof. Ir. Arif Djunaidy, M.Sc, Ph.D : Renny Pradina Kusumawardani, S.T., M.T.
Metodologi Pengerjaan Penentuan tujuan dan studi literatur
Perancangan desain aplikasi
Penyiapan data
Praproses data
Latih klasifikasi
Tidak
Pembahasan Ya
Evaluasi uji klasifikasi
Tidak
Uji Klasifikasi Ya
Evaluasi model klasifikasi
Pendahuluan Latar belakang, rumusan masalah, tujuan, batasan pengerjaan, manfaat
Latar Belakang Berita mengalir begitu deras
Perlu diorganisir dengan cara kategorisasi
Latar Belakang (cont) Namun: • Editor harus membaca artikel satu per satu • Kurang efisien • Berita terlambat disampaikan
•
•
Aplikasi yang membantu kategorisasi secara mudah Diharapkan: • • •
Membantu kinerja editor Efisien Berita cepat tersampaikan
Latar Belakang – Metode (cont) Klasifikasi Dokumen
Bahasa Indonesia • • • •
Naïve Bayes Classifier (NBC) K-Nearest Neigbour Support Vector Machines (SVM) Rule Learning Algorthm
NBC
hanya butuhkan jumlah training data yang kecil untuk menentukan estimasi parameter yang diperlukan dalam proses klasifikasinya
Latar Belakang – Metode (cont) Klasifikasi Dokumen Berbahasa Indonesia
Stemming
Nazief Stemmer Kekurangan
Confix-Stripping Stemmer
Hilangkan awalan, akhiran, sisipan, dan confixes Lebih baik dari: Arifin dan Setiono, Vega
Rumusan Masalah dan Tujuan
Rumusan Masalah Bagaimana membangun aplikasi pengklasifikasi artikel berita berbahasa Indonesia berbasis NBC menggunakan confix-stripping stemmer yang dapat dengan mudah dioperasikan oleh editor berita?
Tujuan Membangun aplikasi pengklasifikasi artikel berita berbahasa Indonesia berbasis naïve bayes classifier menggunakan confix-stripping stemmer untuk membantu para editor berita dalam pengklasifikasian artikel berita.
Batasan Masalah •
•
Data yang digunakan merupakan artikel-artikel berita berbahasa Indonesia yang didapatkan dari portal berita kompas.com. Data yang digunakan pada tahap latih dan uji merupakan sampel artikel berita dalam rentang waktu mulai pertama artikel berita tersimpan di kompas.com hingga akhir tahun 2013.
•
Kategori yang digunakan terbatas pada 12 kategori yakni : •
•
nasional, internasional, olahraga, sains, edukasi, ekonomi, tekno, entertaintment, otomotif, health, properti, dan travel.
Kategori yang digunakan tidak bersifat hirarki atau bersusun.
Manfaat Pelaku Bidang Jurnalistik Penulis • Tugas akhir ini • Hasil tugas akhir ini merupakan diharapkan mampu sumbangsih dalam membantu para pelaku bidang ilmu klasifikasi di bidang jurnalistik teks secara umum, dan para editor berita dengan menggunakan khususnya dalam metode naïve bayes pengkategorian artikel classifiers dan confixberita sehingga stripping stemmer secara diharapkan dapat khususnya. meningkatkan efisiensi kerja dan mampu mempercepat tersampaikannya berita.
Ilmu Pengetahuan dan Teknologi •
Hasil tugas akhir ini diharapkan dapat menjadi dasar bagi pengembangan teknologi yang berkaitan dengan klasifikasi teks berbahasa indonesia
Tinjauan Pustaka Dasar teori pendukung pengerjaan tugas akhir
Praproses Teks
Case Folding
Mengubah semua teks menjadi huruf kecil Menghilangkan karakter selain huruf
Tokenizing
melakukan pemotongan string masukan yakni teks, berdasarkan tiap kata yang menyusunnya
Stopping
Menghilangkan kosakata yang bukan merupakan ciri unik pada suatu dokumen
Stemming
proses pemetaan dan penguraian berbagai bentuk dari suatu kata menjadi bentuk kata dasarnya
Nazief Stemmer •
•
Algoritma stemming Nazief dan Adriani dikembangkan berdasarkan aturan bahasa Indonesia Kata-kata bahasa Indonesia menggunakan berbagai imbuhan yakni : • • • •
awalan (prefix), sisipan (infix), akhiran (suffix) kombinasi awalan dan akhiran (confixes).
•
•
•
Inflection Suffixes : kelompok akhiran yang tidak mengubah bentuk kata dasar. Derivation Suffixes (Akhiran) : kumpulan akhiran yang secara langsung ditambahkan pada kata dasar. Derivation Prefixes (Awalan) : Kumpulan awalan yang dapat ditambahkan langsung pada kata dasar yang sudah mendapatkan penambahan sampai dua awalan.
Langkah Nazief Stemmer
Kata yang belum di-stemming dicari ke dalam kamus kata dasar. Jika ditemukan maka kata tersebut diasumsikan sebagai kata dasar dan tahapan berhenti. Akan tetapi jika tidak ditemukan maka dilanjutkan pada tahap kedua. Hilangkan Inflectional Particle ('-lah', '-kah', 'tah','-pun') dan kata ganti kepunyaan ('-ku', 'mu', '-nya'). Hilangkan imbuhan akhiran ('-i', '-kah', '-an') Hilangkan imbuhan awalan ('di-, 'ke-', 'se-', 'me-', 'be-', 'pe-', 'te-') dengan iterasi maksimum adalah tiga kali:
1. Langkah berhenti jika :
terjadi kombinasi awalan dan akhiran terlarang seperti pada tabel 4.1 awalan yang dideteksi saat ini sama dengan awalan yang dihilangkan sebelumnya Tiga awalan telah dihilangkan
2. Identifikasikan tipe awalan dan hilangkan. Awalan terbagi menjadi dua tipe:
standar = 'di-', 'ke-', 'se-' yang dapat langsung dihilangkan dari kata. kompleks = 'me-', 'be-', 'pe-', 'te-' merupakan tipe awalan yang dapat bermorfologi sesuai kata dasar yang mengikutinya. Sehingga digunakan aturan pada tabel 4.2 untuk mendapatkan pemenggalan yang tepat.
3. Cari kata yang telah dihilangkan awalannya dalam kamus. Jika tidak ditemukan maka seluruh tahap dihentikan.
Confix-Stripping Stemmer
Menggunakan kamus kata dasar yang lebih lengkap Memodifikasi dan menambahkan aturan pemenggalan untuk tipe awalan yang kompleks Menambahkan aturan stemming untuk kata ulang dan bentuk jamak Mengubah urutan stemming untuk beberapa kasus tertentu.
Penghilangan awalan dilakukan terlebih dahulu kemudian diikuti oleh penghilangan akhiran. Aturan ini disebut rule precedence dan berlaku jika kata memiliki kombinasi awalanakhiran 'be-lah', 'be-an', 'me-i', 'di-i', 'pe-i', atau 'te-i'.
Aturan
Format Kata
Pemenggalan
12
Mempe{r|l}…
Mem-pe..
16
Meng{g|h|q}…
Meng-{g|h|q}…
Aturan
Format Kata
Pemenggalan
12
Mempe…
Mem-pe…
16
Meng{g|h|q|k}
Meng-{g|h|q|k}
Aturan
Format Kata
Pemenggalan
34
terC1erC2…
terC1erC2… dimana C1!=’r’
35
peC1erC2…
peC1erC2… C1!={r|w|y|l|m|n}}
dimana
Naïve Bayes Classifier (NBC) •
Algoritma yang digunakan untuk mencari nilai probabilitas tertinggi untuk mengklasifikasi data uji pada kategori yang paling tepat.
Dua tahap dalam proses Pelatihan
dilakukan proses analisis terhadap sampel dokumen berupa pemilihan kosa kata dan penentuan probabilitas prior bagi tiap kategori berdasarkan sampel dokumen.
Klasifikasi /Pengujian
ditentukan nilai kategori dari suatu dokumen berdasarkan term yang muncul dalam dokumen yang diklasifikasi
Tahap Pelatihan Nilai P(vj) ditentukan pada saat pelatihan 𝑃 𝑣𝑗 =
|𝑑𝑑𝑑 𝑗| |𝑐𝑐𝑐𝑐𝑐𝑐|
Dimana : |doc j| = banyak dokumen (dalam hal ini artikel berita) yang memiliki kategori j dalam pelatihan |contoh| = banyak dokumen (dalam hal ini artikel berita) dalam contoh yang digunakan untuk pelatihan.
𝑃 𝑤𝑘
𝑛𝑘 + 1 𝑣𝑗 ) = 𝑛 + |𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘|
Dimana: P(wk | vj )= probabilitas kata wk dalam kategori j nk = frekuensi munculnya kata wk dalam dokumen yang berkategori vj n = banyaknya seluruh kata dalam dokumen berkategori vj |kosakata| = banyaknya kata dalam contoh pelatihan
Tahap Pengujian Pada saat klasifikasi algoritma akan mencari probabilitas tertinggi dari semua kategori dokumen yang diujikan (VMAP)
setiap dokumen direpresentasikan dengan pasangan atribut “a1, a2, a3,.. an” dimana a1 adalah kata pertama, a2 adalah kata kedua dan seterusnya. V adalah himpunan kategori berita
Sampel Data
Penentuan Besar Sampel
Rumus Slovin 𝑁 𝑛= 1 + 𝑁𝑒 2
Pengambilan Sampel
Systematic random sampling
Tetapkan interval pengambilan satu sampel 𝑁 𝑘= 𝑛 Pilih secara acak sebuah angka yang menjadi random start : 1 < random start < k Satuan sampel lainnya dipilih secara sistematis sesuai dengan intervalnya.
Data Data ini digunakan sebagai masukan dari aplikasi
Penyiapan Data
Data artikel berita Systematic No 1 2 3 4 5 6 7 8 9 10 11 12
Kategori Berita Nasional Internasional Olahraga Sains Edukasi Ekonomi Tekno Entertainment Otomotif Health Properti Travel
random sampling
Rentang Waktu Berita 4 Januari 2008 – 31 Desember 2013 5 Januari 2008 – 31 Desember 2013 7 Januari 2008 – 31 Desember 2013 8 Januari 2008 – 31 Desember 2013 3 Januari 2011 – 31 Desember 2013 7 Januari 2008 – 31 Desember 2013 11 Februari 2008 – 31 Desember 2013 10 Januari 2008 – 31 Desember 2013 21 Januari 2008 – 31 Desember 2013 21 Januari 2008 – 31 Desember 2013 1 Maret 2008 – 31 Desember 2013 2 Maret 2008 – 31 Desember 2013
No
Kategori Berita
1 Nasional 2 Internasional 3 Olahraga 4 Sains 5 Edukasi 6 Ekonomi 7 Tekno 8 Entertainment 9 Otomotif 10 Health 11 Properti 12 Travel TOTAL
Jumlah Sampel 100 100 100 99 97 100 100 100 99 100 100 100 1195
Jumlah Data Latih 70 70 70 70 68 70 70 70 70 70 70 70 838
Jumlah Data Uji 30 30 30 29 29 30 30 30 29 30 30 30 357
Penyiapan Data (cont)
Daftar Stopwords
Daftar Kata Dasar
Desain Aplikasi Desain basis data, diagram usecase, diagram sekuen, diagram aktivitas, dan diagram kelas
Desain Aplikasi
Desain basis data
Diagram usecase
uc Use Case Model
Artikel PK
FK1
ArtikelUji Kategori
IDArtikel Tanggal Judul Artikel IDKategori
PK
PK
Kategori FK1
KataDasar PK
IDKataDasar
Stopword PK
IDArtikelUji
Login Mengklasifikasi Artikel Berita
IDKategori
IDStopword
Tanggal Judul ArtikelUji HasilPraproses IDKategori
User PK
Username
Stopword
Password
Melakukan praproses data uj i
Menambahkan data artikel berita untuk uj i klasifikasi
Melakukan praproses data latih Administrator
PenggunaUmum (from Actors)
KataDasar
Menambahkan data artikel berita untuk latih klasifikasi
(from Actors) Melakukan uj i klasifikasi
Melakukan latih klasifikasi dan pembuatan model
Desain Aplikasi (cont)
Diagram sekuen
Diagram aktifitas
sd Sequence Insert act Activ ity Diagram Insert Administrator
Administrator
Form Input Artikel Berita
Sistem
Tabel Artikel
Memilih pilihan data
request artikel()
getArtikel()
Mengisi semua kolom inputan
display() Menekan tombol tambah artikel
isi kolom masukan artikel()
Menambahkan artikel ke dalam tabel artikelUj i
kolomIsNotNull()
kolomIsNull() showMessage()
isi kolom()
insertArtikel()
display()
Lebih lengkap dijelaskan pada masing-masing tahap
Diagram Kelas class Diagram Kelas Klasifikasi
Praproses -
ch: char file: File kata: String kataA: String kataAStem: String kataBStem: String kataUlangPecah: String lenght: int line: String pilihan: int pilihanProses: int text: char token: String ubah: String
+ + + + + + + + + + + + + + + +
cekPrecedence() : boolean doStem(String) : string flagCekKamus(String) : int isVowel(char) : boolean pilihJenis() : void pilihProses() : void PraProses() prosesStop(String, int) : void readFileInput() : void readFileKamus() : void readFileStopword() : void ReadKataDasar(String) : void readKataInput(String, int) : void readKataUlang(String) : void readStop(String) : void removeFirstOrderPrefix() : int removeParticle() : int removePossessivePronoun() : int removeSecondOrderPrefix() : int removeSuffix() : int writeOutput(String, String) : void writeOutput() : void
Learner
Koneksi + -
conn: Connection dbName: String driver: String pass: String url: string user: String
+
konek() : Connection
+ + +
classifier: FilteredClassifier fileName: String filter: StringToWordVector resTmp: String result: String resultDetail: String returnVal: int trainData: Instances
+ + + + + -
evaluate() : void learn() : string Learner() loadDataset(String) : void readFileLatih() : void saveModel(String) : void writeModel() : void
+ + +
classifier: FilteredClassifier file: File instances: instances pred: double result: string returnVal: int text: string
+ + + + + -
classify() : string Klasifikasi() load(String) : void loadModel(String) : void makeInstance() : void readFileKlasifikasi() : void writeModelKlasifikasi() : void
Insert Artikel Berita + +
conn: Connection pilihan: int rs: ResultSet sql: String stmt: Statement
+ +
ArtikelBerita() pilihJenis() : void
Klasifikasi
Praproses Data Case folding, tokenizing, stopping, dan stemming
Praproses Data
Empat tahap : case folding, tokenizing, stopping, dan stemming
sd Sequence Praproses
Administrator
HalamanPraproses
Case Folding
Stopwords
Stemming
Tabel Artikel Tabel Stopwords Tabel KataDasar FileKeluaran
cekKolomIsNotNull() KolomIsNull() Pesan Error() isi kolom() requestArtikel() getArtikel()
caseFolding() RequestStopwords() returnStopwords()
hapusStopwords()
RequestKamus() returnKamus()
cariKataDasar() writeOutput() displayMessage()
(from Actors)
Latih Klasifikasi Masukan : data latih yang telah melalui praproses Keluaran : model klasifikasi
Latih Klasifikasi sd Sequence Latih
Administrator
Form Learner
Evaluasi Data Latih
File Data Latih
Latih Model
File Model Klasifikaasi
KolomIsNull() showMessageError()
Isi semuaKolom() loadData() getData()
ubahStringToVector()
setClassifier NBC()
evaluasi() displayEvaluasi()
learn() writeModel()
displayMessage()
Uji Klasifikasi Masukan : data uji yang telah melalui praproses Keluaran : prediksi kelas
Uji Klasifikasi sd Sequence Uj i
Administrator Form Klasifikasi File Model tempObject
classifier Tabel ArtikelUji Buat instances Klasifikasi
load Model()
saveModel()
getArtikelUji()
classify() edit Artikeluji() displayResult()
Uji Klasifikasi Pengguna Umum act Activ ity Diagram Mengklasifikasikan Artikel Berita Umum
Pengguna menekan tombol praproses
Sistem
Melakukan praproses terhadap data uj i (diagram aktiv itas melakukan praproses terhadap data uj i)
Menampilkan pesan bahw a praproses selesai Menekan tombol mulai klasifikasi Melakukan klasifikasi (diagram aktiv itas melakukan uj i klasifikasi)
Menampilkan hasil klasifikasi
Uji Coba dan Analisis Hasil
Outline Uji Coba
Uji Verifikasi Uji
Verifikasi Fungsional Aplikasi Uji Verifikasi Hasil Uji Keluaran
Uji Validasi Uji
Validasi Evaluasi Model Klasifikasi Uji Validasi Evaluasi Hasil Uji Klasifikasi
Uji Verifikasi Fungsional Aplikasi
Semua fungsi aplikasi telah berjalan lancar Tidak ditemukan error pada aplikasi
Uji Verifikasi Hasil Uji
Aplikasi dapat menghasilkan hasil klasifikasi yang telah sesuai dengan hasil yang didapatkan dengan WEKA dan secara manual
Uji Validasi Model Klasifikasi
Metode evaluasi dengan cross-validation 10 folds
WEKA hasil lebih baik karena menghasilkan fitur lebih banyak daripada aplikasi Perbedaan tidak signifikan
Uji Validasi Hasil Uji Klasifikasi
Hasil uji klasifikasi aplikasi pengklasifikasi sama dengan yang dihasilkan oleh WEKA
Uji Validasi Hasil Uji Klasifikasi
Kesalahan terjadi karena kata/fitur yang memiliki nilai prediksi yang lebih tinggi di kelas lain daripada di kelas yang benar Hal ini terjadi karena fitur yang muncul pada suatu kategori juga muncul pada kategori yang lain
Fitur
Uji Validasi Hasil Uji Klasifikasi
Contoh 1
Nilai prediksi artikel tersebut pada kategori : nasional sebesar 0.115, internasional sebesar 0.001, edukasi sebesar 0.006, entertainment sebesar 0.877.
Contoh 2
Nilai prediksinya pada kategori nasional hanya 0.005 sedangkan kategori edukasi 0.995
Kesimpulan
Kesimpulan
Aplikasi berhasil diuji cobakan pada data sampel pada 12 kategori berita dengan total sebanyak 1195 artikel yang 70% data latih dan 30% data uji. Aplikasi pengklasifikasi artikel berita berhasil mengklasifikasikan artikel berita sesuai dengan kategori beritanya. Aplikasi mudah digunakan sehingga memungkinkan untuk diimplementasikan dan digunakan untuk membantu para editor berita dalam pengklasifikasian artikel berita berbahasa Indonesia Model yang dibuat oleh aplikasi WEKA sedikit lebih tinggi daripada aplikasi pengklasifikasi artikel berita. Karena jumlah fitur yang dihasilkan oleh aplikasi WEKA lebih banyak daripada fitur yang dihasilkan oleh aplikasi pengklasifikasi, namun perbedaan tidak signifikan
Evaluasi terhadap hasil uji klasifikasi yang dilakukan oleh aplikasi pengklasifikasi artikel berita memiliki memiliki nilai akurasi, precission, recall, dan f-measure sebesar 87.675%, 88.21%, 87.65%, dan 87.69%. Hasil uji klasifikasi dengan menggunakan aplikasi pengklasifikasi artikel berita memiliki hasil yang sama dengan aplikasi WEKA. Kesalahan klasifikasi terjadi karena nilai predikasi pada kelas yang benar lebih rendah daripada kelas yang salah. Hal ini dikarenakan banyak fitur yang sama pada beberapa kelas yang berbeda.
Referensi
Asian, J. A. (2007). Stemming Indonesian : a confix-stripping approach. ACM Trnsactions on Asian Language Information Processing (TALIP), 6(4), 1-33. Dragut, E. F. (2009). Stop word and related problems in web interface integration. Proceedings of the VLDB Endowment, 2(1), 349-360. Hamzah, A. (2012). Klasifikasi teks dengan Naive Bayes Classifier (NBC) untuk pengelompokkan teks berita dan abstract akademis. Seminar Nasional Aplikasi Sains dan Teknologi Periode III. Yogyakarta. Jian Sheu, J. (2008). An Efficient Two-Phase Spam Filtering Method. Sciendirect. Joko Samodra, S. S. (2009). Klasifikasi dokumen teks berbahasa Indonesia dengan menggunakan Naive Bayes. Seminar nasional electrical, informatics, and it's education.
Kamus Besar Bahasa Indonesia. (n.d.). Korpus. Retrieved Maret 14, 2014, from kbbi.web.id: http://kbbi.web.id/korpus
Miller, T. (2005). Data and Tekx Mining A Business Application Approach. New Jersey, USA: Prentice Hall.
Oracle. (n.d.). Classification. Retrieved Maret 14, 2014, from docs.oracle.com: http://docs.oracle.com/cd/B28359_01/datamine.111/b28129/classify .htm#i1005746 Oracle. (n.d.). Clustering. Retrieved Maret 14, 2014, from /docs.oracle.com: http://docs.oracle.com/cd/B28359_01/datamine.111/b28129/clusteri ng.htm#DMCON008 Pitoyo, A. (2014, Januari 15 ). Jumlah pengguna internet Indonesia capai 71,19 juta pada 2013. Retrieved Maret 14, 2014, from merdeka.com: http://www.merdeka.com/teknologi/jumlah-pengguna-internetindonesia-capai-7119-juta-pada-2013.html Rijsbergen, C. (1979). Information Retrieval Glasgow. Information retrival group, Univercity of Glasgow . Tala, a. Z. (2003). A Study of Stemming Effects on Information Retrieval in Bahasa Indonesia. Netherlands: Master of Logic Project. Institute for Logic, Language and Computation, Universiteit van Amsterdam. Tan, S. &. (2006). Introduction to Data Mining. Pearson Addison Weasley. Weiss, S. M. (2010). Text mining: predictive methods for analyzing unstructured information. New York: Springer.
“usaha tidak pernah mengkhianati” - RnV Team