Thursday, January 5, 2017

Peringkasan Teks Otomatis Sinopsis Film Berbahasa Indonesia Menggunakan Metode TF-IDF (Vector Space Retrieval)


1. PENDAHULUAN

Membaca merupakan salah satu kebutuhan manusia, baik membaca buku, surat kabar maupun informasi berupa teks lainnya. Perkembangan teknologi komunikasi berdampak pada penggunaan internet untuk mempublikasikan berbagai informasi baik berupa suara, gambar maupun tulisan. Synopsis pada sebuah film merupakan salah satu contoh informasi yang banyak dipublikasikan di dunia internet. Sinopis film dimaksudkan agar pembaca mengetahui inti cerita secara singkat dari sebuah film. Synopsis film juga dapat dikatakan review seseorang terhadap sebuah film, sehingga cara penyampaian informasi mengenai sebuah film berbeda-beda setiap orangnya. Ringkasan dibutuhkan untuk mendapatkan isi dokumen secara ringkas. Ringkasan merupakan ekspresi yang ketat dari isi utama suatu dokumen, tujuannya untuk memberitahu kepada pembaca inti dari suatu pikiran utama (Sartuni, Finozadan Sundari, 1987). Konsep sederhana ringkasan adalah mengmabil bagian penting dari keseluruhan isi dari sebuah dokumen. Ringkasan adalah mengambil isi yang paling penting dari sumber iformasi yang kemudian menyajikannya kembali dalam bentuk yang lebih ringkas bagi penggunanya (Mani dab Mayvury, 1999). Aplikasi peringkasan teks secara otomatis dengan hasil ringkasan (summary) dari sebuah dokumen teks.

2. TINJAUAN PUSTAKA

2.1 Peringkasan Teks Otomatis
Peringkasan teks otomatis (automatic text summarization) merupakan proses pembuatan bentuk yang lebih singkat dan sederhana dari sebuah dokumen dengan memanfaatkan aplikasi yang dijalankan dan dioperasikan pada komputer. Ringkasan merupakan teks yang dihasilkan dari sebuah teks atau banyak teks yang mengandung isi informasi dari teks asli dan panjangnya tidak lebih dari setengah panjang teks aslinya (Hovy, 2001). Penelitian peringkasan teks otomatis dipelopori oleh Luhn sejak tahun 1958. Teknik yang digunakan dalam peringkasan: (1) Teknik pendekatan statistika: eknik word frequency (Luhn, 1958), position in text (Baxendale, 1958), cue words and heading (Edmudson, 1969), sentence position (Lin dan Hoovy, 1997). (2) Teknik pendekatan dengan natural language analysis: inverse term frequency and NLP technique (Aone, 1990), lexical chain (Mc Keown, 1997), maximal marginal relevance (Cabonell dan Goldstein, 1998).
2.2 Text Mining
Text mining dapat didefinisikan secara luas sebagai satu proses menggali informasi dimana seseorang user berinteraksi dengan sekumpulan dokumen tools asalisis yang merupakan komponen-komponen dalam data mining yang salah satunya adalah kategorisasi. Text mining bisa dianggap subjek riset yang tergolong baru. Text mining dapat memberikan solusi dari permasalahan seperti pemrosesan, pengelompokkan dan menganalisa unstructured text dalam jumlah besar.
2.3 Tokenisasi
Secara garis besar tokenisasi adalah tahap pemecah sekumpulan karakter dalam suatu teks ke dalam satuan kata. Sekumpulan karakter tersebut dapat berupa karakter white space, seperti enter, tabulasi, spasi. Namun untuk karakter petik tunggal (‗), titik (.), semi kolon (;), titik dua (J atau lainnya juga dapat memiliki peran yang cukup banyak sebagai pemisah kata. Sebuah titik (.) biasanya untuk tanda akhir kalimat, tapi dapat juga muncul dalam singkatan, inisial orang, alamat internet dll. Kemudian tanda hypen (-) biasanya muncul untuk menggabungkan kedua token yang berbeda untuk membentuk token tunggal. Tapi dapat pula ditemukan untuk menyatakan rentang nilai, kata berulang dsb. Atau karakter slash (/) sebagai pemisah file atau direktori atau url atau untuk menyatakan ―dan atau‖.
2.4 Fitering
Filtering yaitu proses pembuangan stopwords yang dimaksudkan untuk mengetahui suatu kata masuk kea lam stopword atau tidak. Pembuangan stopword dalah proses pembuangan term yang tidak memiliki arti atau tidak relevan. Term yang diperoleh dari tahap tokenisasi dicek dalam suatu daftar stopword, apabila sebuah kata masuk di dalam daftar stopword maka kata tersebut akan masuk ke proses selanjutnya.
2.5 TF_IDF
Metode TF_IDF merupakan metode untuk emnghitung bobot setiap kata yang paling umum digunakan pada information retrieval. Metode ini juga terkenal efisien, mudah dan memiliki hasil yang akurat. Metode ini akan menghitung nilai Term Frequency (TF) dan Inverse Document Frequency (IDF) pada setiap token (kata) di setiap dokumen dalam korpus. Metode ini akan menghitung bobot setiap token t di dokumen dengan rumus:
Wdt =tfdt * IDFt
Dimana:
·         d : dokumen ke-d
·          t : kata ke-t dari kata kunci
·         W : bobot dokumen ke-d terhadap kata ke-t
·         Tf : banyaknya kata yang dicari pada sebuah dokumen
·         IDF : Inverse Document Frequency
·          Nilai IDF didapatkan dari IDF : log2 (D/df), dimana D merupakan total dokumen dan df meupakan banyak dokumen yan mengandung kata yang dicari
Setelah bobot (W) masingmasing dokumen diketahui, maka dilakukan proses pengurutan dimana semakin besar nilai W, semakin besar tingkat similarity dokumen tersebut terhadap kata kunci, demikian sebaliknya.
3. METODOLOGI

  1. Pada penelitian ini peringkaan teks otomatis yang dibuat merupakan sistem peringkasan dengan inputan berupa single dokumen dan secara otomatis menghasilkan ringkasan (summary). Proses peringkasan teks otomatis pada penelititan ini terdiri dari text mining, tokenisasi, filtering, stemming menggunakan metode TF-IDF.

3.1 Pemecahan Kalimat
Tahap pemecahan kalimat adalah memecah dokumen menjadi kumpulan kalimat dengan menghilangkan tandatanda akhir kalimat (delimiter). Tanda baca akhir kalimat seperti tanda titik ―.‖, tanda Tanya ―?‖ dan tanda seru ―!‖.
Implementasi pada bahasa php
// metode casefolding
      function casefolding($teks)
      {
            //merubah kalimat ke lowercase
            $teks = strtolower($teks);

            //menghilangkan special karakter
            $teks = preg_replace('/[-0-9+&@#\/%?=~_|$!:^>`{}<*,.;()"-$]/i', '', $teks);
           
            //menghilangkan backslash
            $teks = stripslashes($teks);
                       
                        // mengembalikan teks
                        return $teks;

3.2 Cae Folding
Pada tahap ini kumpulan kalimat hasil pemecahan diubah menjadi huruf kecil (lower case), menghilangkan angka, tanda baca maupun symbol dan hanya menerima karakter.
Implementasi pada bahasa php
// metode casefolding
function casefolding($teks)
{
//merubah kalimat ke lowercase
$teks = strtolower($teks);
//menghilangkan special karakter
$teks = preg_replace('/[-0-9+&@#\/%?=~_|$!:^>`{}<*,.;()"-$]/i', '', $teks);
//menghilangkan backslash
$teks = stripslashes($teks);
// mengembalikan teks
return $teks;
}
// metode stopword
function hapus_stopword($teks)
{
// mengganti kata kata yang umum pada situs, semisal dns situs seperti
blabla.com dll
$replace = array(
'com',
'co',
'id',
);
$teks = preg_replace(
array_map(
function($stopword){
return'/\b'.$stopword.'\b/';
}, $replace), '',$teks);
return $teks;
}
// untuk penormalan jika spasi berlebih
function normalkan($teks){
$teks = preg_replace('/\s\s+/', ' ', $teks); //menghilangkan spasi berlebih
$teks = trim($teks);
return $teks;
}

3.3 Tokenisasi
Kumpulan hasil dari case folding kemudian dilakukan proses tokenisasi kata, yaitu menghilangkan karakter pemisah (delimeter) yang menyusunnya berupa karakter spasi.
Implementasi dalam bahasa php
// tokenisasi dengan membuang stopwords
$token = preg_split("/[\d\W\s]+/", strtolower($load_file));
$token = array_diff($token, $stopwords);
$token = array_values($token); // perbaiki indeks
// menyimpan nilai df tiap token
$token = array_count_values($token); // hilangkan redudansi token
foreach ($token as $key => $value) {
// jika token sudah ada
if (array_key_exists($key, $df_token))
$df_token[$key]++;
// jika token belum ada
else if (!isset($df_token[$key]))
$df_token[$key] = 1;
}
}

3.4 Filtering
Pada tahap ini dilakukan pembuanagan kata-kata yang dianggap kurang penting. Stop word adalah kata-kata yang kurang deskriptif yang dapat dibuang dalam pendekatan bag-of-words. Pembuangan stop word dilakukan dengan mengecek stop word, jika terdapat kata yang sama dengan kamus maka akan dihapus.
Implementasi dalahm bahasa php
//fungsi pencarian akar kata
function stemming($kata){
$kataAsal = $kata;
$cekKata = cekKamus($kata);
if($cekKata == true){ // Cek Kamus
return $kata; // Jika Ada maka kata tersebut adalah kata dasar
}else{ //jika tidak ada dalam kamus maka dilakukan stemming
$kata = Del_Inflection_Suffixes($kata);
if(cekKamus($kata)){
return $kata;
}
$kata = Del_Derivation_Suffixes($kata);
if(cekKamus($kata)){
return $kata;
}
$kata = Del_Derivation_Prefix($kata);
if(cekKamus($kata)){
return $kata;
}
}

3.5 Stemming
Hasil filtering kemudian di-stemming untuk mendapatkan kata dasar (root). Proses stemming menggunakan bantuan kamuskamus kecil untuk membedakan suatu kata yang mengandung imbuhan baik prefix maupun sufiks yang salah satu suku katanya merupakan bagian dari imbuhan, terutama dengan kata dasar yang mempunyai suku kata lebih besar dari dua.
Implementasi dlaam bahasa php
//fungsi untuk menghapus suffix seperti -ku, -mu, -kah, dsb
function Del_Inflection_Suffixes($kata){
$kataAsal = $kata;
if(preg_match('/([km]u|nya|[kl]ah|pun)\z/i',$kata)){ // Cek Inflection Suffixes
$__kata = preg_replace('/([km]u|nya|[kl]ah|pun)\z/i','',$kata);
return $__kata;
}
return $kataAsal;
}
// Cek Prefix Disallowed Sufixes (Kombinasi Awalan dan Akhiran yang tidak diizinkan)
function Cek_Prefix_Disallowed_Sufixes($kata){
if(preg_match('/^(be)[[:alpha:]]+/(i)\z/i',$kata)){ // be- dan -i
return true;
}
if(preg_match('/^(se)[[:alpha:]]+/(i|kan)\z/i',$kata)){ // se- dan -i,-kan
return true;
}
if(preg_match('/^(di)[[:alpha:]]+/(an)\z/i',$kata)){ // di- dan -an
return true;
}
if(preg_match('/^(me)[[:alpha:]]+/(an)\z/i',$kata)){ // me- dan -an
return true;
}
if(preg_match('/^(ke)[[:alpha:]]+/(i|kan)\z/i',$kata)){ // ke- dan -i,-kan
return true;
}
return false;
}
// Hapus Derivation Suffixes ("-i", "-an" atau "-kan")
function Del_Derivation_Suffixes($kata){
$kataAsal = $kata;
if(preg_match('/(i|an)\z/i',$kata)){ // Cek Suffixes
$__kata = preg_replace('/(i|an)\z/i','',$kata);
if(cekKamus($__kata)){ // Cek Kamus
return $__kata;
}else if(preg_match('/(kan)\z/i',$kata)){
$__kata = preg_replace('/(kan)\z/i','',$kata);
if(cekKamus($__kata)){
return $__kata;
}
}
/*– Jika Tidak ditemukan di kamus –*/
}
return $kataAsal;
}
// Hapus Derivation Prefix ("di-", "ke-", "se-", "te-", "be-", "me-", atau "pe-")
function Del_Derivation_Prefix($kata){
$kataAsal = $kata;
/* —— Tentukan Tipe Awalan ————*/
if(preg_match('/^(di|[ks]e)/',$kata)){ // Jika di-,ke-,se-
$__kata = preg_replace('/^(di|[ks]e)/','',$kata);
if(cekKamus($__kata)){
return $__kata;
}
$__kata__ = Del_Derivation_Suffixes($__kata);
if(cekKamus($__kata__)){
return $__kata__;
}
if(preg_match('/^(diper)/',$kata)){ //diper-
$__kata = preg_replace('/^(diper)/','',$kata);
$__kata__ = Del_Derivation_Suffixes($__kata);
if(cekKamus($__kata__)){
return $__kata__;
}
}
if(preg_match('/^(ke[bt]er)/',$kata)){ //keber- dan keter-
$__kata = preg_replace('/^(ke[bt]er)/','',$kata);
$__kata__ = Del_Derivation_Suffixes($__kata);
if(cekKamus($__kata__)){
return $__kata__;
}
}
}
if(preg_match('/^([bt]e)/',$kata)){ //Jika awalannya adalah "te-","ter-", "be-","ber-
"
$__kata = preg_replace('/^([bt]e)/','',$kata);
if(cekKamus($__kata)){
return $__kata; // Jika ada balik
}
$__kata = preg_replace('/^([bt]e[lr])/','',$kata);
if(cekKamus($__kata)){
return $__kata; // Jika ada balik
}
$__kata__ = Del_Derivation_Suffixes($__kata);
if(cekKamus($__kata__)){
return $__kata__;
}
}
if(preg_match('/^([mp]e)/',$kata)){
$__kata = preg_replace('/^([mp]e)/','',$kata);
if(cekKamus($__kata)){
return $__kata; // Jika ada balik
}
$__kata__ = Del_Derivation_Suffixes($__kata);
if(cekKamus($__kata__)){
return $__kata__;
}
if(preg_match('/^(memper)/',$kata)){
$__kata = preg_replace('/^(memper)/','',$kata);
if(cekKamus($kata)){
return $__kata;
}
$__kata__ = Del_Derivation_Suffixes($__kata);
if(cekKamus($__kata__)){
return $__kata__;
}
}
if(preg_match('/^([mp]eng)/',$kata)){
$__kata = preg_replace('/^([mp]eng)/','',$kata);
if(cekKamus($__kata)){
return $__kata; // Jika ada balik
}
$__kata__ = Del_Derivation_Suffixes($__kata);
if(cekKamus($__kata__)){
return $__kata__;
}
$__kata = preg_replace('/^([mp]eng)/','k',$kata);
if(cekKamus($__kata)){
return $__kata; // Jika ada balik
}
$__kata__ = Del_Derivation_Suffixes($__kata);
if(cekKamus($__kata__)){
return $__kata__;
}
}
if(preg_match('/^([mp]eny)/',$kata)){
$__kata = preg_replace('/^([mp]eny)/','s',$kata);
if(cekKamus($__kata)){
return $__kata; // Jika ada balik
}
$__kata__ = Del_Derivation_Suffixes($__kata);
if(cekKamus($__kata__)){
return $__kata__;
}
}
if(preg_match('/^([mp]e[lr])/',$kata)){
$__kata = preg_replace('/^([mp]e[lr])/','',$kata);
if(cekKamus($__kata)){
return $__kata; // Jika ada balik
}
$__kata__ = Del_Derivation_Suffixes($__kata);
if(cekKamus($__kata__)){
return $__kata__;
}
}
if(preg_match('/^([mp]en)/',$kata)){
$__kata = preg_replace('/^([mp]en)/','t',$kata);
if(cekKamus($__kata)){
return $__kata; // Jika ada balik
}
$__kata__ = Del_Derivation_Suffixes($__kata);
if(cekKamus($__kata__)){
return $__kata__;
}
$__kata = preg_replace('/^([mp]en)/','',$kata);
if(cekKamus($__kata)){
return $__kata; // Jika ada balik
}
$__kata__ = Del_Derivation_Suffixes($__kata);
if(cekKamus($__kata__)){
return $__kata__;
}
}
if(preg_match('/^([mp]em)/',$kata)){
$__kata = preg_replace('/^([mp]em)/','',$kata);
if(cekKamus($__kata)){
return $__kata; // Jika ada balik
}
$__kata__ = Del_Derivation_Suffixes($__kata);
if(cekKamus($__kata__)){
return $__kata__;
}
$__kata = preg_replace('/^([mp]em)/','p',$kata);
if(cekKamus($__kata)){
return $__kata; // Jika ada balik
}
$__kata__ = Del_Derivation_Suffixes($__kata);
if(cekKamus($__kata__)){
return $__kata__;
}
}
}
return $kataAsal;
}

3.6 TF-IDF
Hasil prose teks preprocessing dilakukan pembobotan tf-idf. Pembobotan secara otomatis biasanya berdasarkan jumlah kemunculan suatu kata dalam sebuah dokumen (term frequency) dan jumlah kemunculannya dalam koleksi dokumen (Inverse Document Frequency). Bobot kata semakin besar jika sering muncul dalam suatu dokumen dan semakin kecil jika mncul dalam banyak dokumen. Pembobotan tf-idf dilakukan untuk pembobotan tahap selanjutnya, yaitu unutk menghitung bobot query-relevance dan bobot similarity kalimat. Alur aktivitas pada bobot tf-idf untuk relevance-query adalah sama seperti aktivitas pada bobot tf-idf untuk similarity kalimat.
3.7 Screenshoot Sebelum dan Sesudah Peringkasan
· tampilan halaman input dokumen

· tampilan input file yang akan diringkas


· tampilan hasil peringkasan

No comments:
Write komentar

Total Pageviews