lifelong learner — urip iku urup, currently working on accenture.

[library][php] Modified enhanced confix stripping stemmer dan klasifikasi regex

6
Degananda.com -

Selayang Pandang

Berikut ini adalah sebuah project php yang berfungsi untuk melakukan stemming terhadap suatu kalimat dan mengklasifikasikan hasil stemming(sudah berbentuk kalimat kembali) tersebut menjadi kategori-kategori tertentu. Sejatinnya ini adalah hasil dari tugas akhir kami yang siapa tahu dapat bermanfaat bagi teman-teman lainnya. Sumber data berasal dari database(mysql) dan project ditulis dengan menggunakan php (tanpa framework). Nantinnya(maybe this weekend) project ini akan kami upload ke github dengan cara penggunaan tanpa perlu menggunaka database (mysql) sehingga dapat digunakan untuk database lainnya atau bahkan untuk plaintext. Stemmer ini mengacu pada literatur-literatur yang sudah ada seperti :

  1. A. Z. Arifin, Enhanced Confix Stripping Stemmer and Ants algorithm for classifying news document in indo- nesian language. 2014.
  2. V. B. Vega, Information retrieval for the Indonesian la- nguage. Master’s thesis, National University of Singa- pore. 2010.

jika ada kesalahan algoritma yang saya ikuti berdasarkan literatur diatas(pada project php) silahkan berkomentar dibawah terimakasih.

Modified Enhanced Confix Stripping Stemmer(MECS)

1. Unduh project

Download project MECS + Klasifikasi regex (bukan ML) pada link dibawah ini , mohon maaf kami upload digoogle bukan di github karena masih belum standar formatnya, next time jika ada waktu kami akan upload versi di github (tanpa memerlukan database , stemming dan klasifikasi akan terpisah).

https://drive.google.com/open?id=0By5rvYirLfy3blJmWTFZd1lXRlU

2. extract file .zip tersebut

Setelah anda mendownload mecs_stemming.1.0.0.zip extract pada server/xampp/localhost anda.

3. Import database & Masukan data dari file CSV anda ke Mysql

File SQL dapat diunduh disini. Databases ini berisi data katadasar dari KBBI serta databases message twitter(pesan twitter) yang digunakan untuk stemming. Pastikan data yang hendak distemming memiliki komponen berikut ini

  1. id_msg (kolom pada tabel)
  2. text_msg (kolom pada tabel)

Kemudian import file csv ke database yang telah anda buat.

4. Konfigurasi config.php

public $conn;
private $hostname = 'localhost'; // Alamat Server Anda
private $db_username = 'root'; // Username database
private $db_password = ''; // Password databases
private $db_name = 'eis_db'; // Nama databases anda

5. Jalankan Stemming.php

{url_server/localhost}/{path}/stemming.php

Pada proses ini pastikan nama tabel data yang diambil untuk distemming sesuai dengan data tabel yang anda miliki / jika menggunakan databases dari kami tidak perlu mengganti script ini.

query yang kami gunakan untuk mengambil data dari database (menghilangkan delimiter untuk selanjutnya data tersebut distemming.

try {
    $query = "SELECT text_msg,id_msg FROM tb_msg  WHERE is_stemmed = 0 LIMIT 0,25";
    $stmt = $this->conn->prepare($query);
    // no bind parameter.
    $stmt->execute();
    $dataSet = $stmt->fetchAll();
    $index = 0;
        foreach($dataSet as $row){
            $tmp = '';
            $delimited = str_replace($findWord,$replacedWith,$row['text_msg']);
            // jadikan huruf kecil.
            $this->delimitedMsg[$index] = strtolower($delimited);
            $this->msgId[$index] = $row['id_msg'];
            $index++;
        }
    } catch (PDOException $e){
        echo 'PDO Error';
}

6. Konfigurasi Model Regex pada klasifikasi.php

{url_server/localhost}/{path}/stemming.php
Pada proses ini pastikan beberapa hal :

6.1 Buat model keyword regex

$rule_layananpublik1 = "/^(?=.*\bgenang\b)(?=.*\bjalan\b)|(?=.*\bjln\b)/";
$rule_layananpublik2 = "/^(?=.*\baspal\b)(?=.*\brusak\b)/";
$rule_layananpublik3 = "/^(?=.*\blistrik\b)(?=.*\bmati\b)/";
$rule_layananpublik4 = "/^(?=.*\blistrik\b)(?=.*\bpadam\b)/";
$rule_layananpublik5 = "/^(?=.*\bpdam\b)(?=.*\bmati\b)/";
$rule_layananpublik6 = "/^(?=.*\bair\b)(?=.*\bmati\b)/";
$rule_layananpublik7 = "/^(?=.*\bair\b)(?=.*\bkeluar\b)/";
$rule_layananpublik8 = "/^(?=.*\bangkot\b)/";
$rule_layananpublik9 = "/^(?=.*\blistrik\b)(?=.*\bnyala\b)/";
$rule_layananpublik10 = "/^(?=.*\btidak\b)(?=.*\bnyala\b)/";
$rule_layananpublik11 = "/^(?=.*\blayak\b)/";
$rule_layananpublik12 = "/^(?=.*\bnyaman\b)/";
$rule_layananpublik13 = "/^(?=.*\basap\b)(?=.*\bganggu\b)/";
$rule_layananpublik14 = "/^(?=.*\basap\b)(?=.*\bpolusi\b)/";
$rule_layananpublik15 = "/^(?=.*\blubang\b)(?=.*\bjalan\b)|(?=.*\bjln\b)/";
$rule_layananpublik16 = "/^(?=.*\bpolusi\b)/";
$rule_layananpublik17 = "/^(?=.*\bsampah\b)/";
$rule_layananpublik18 = "/^(?=.*\bbau\b)/";
$rule_layananpublik19 = "/^(?=.*\bcamat\b)/";
$rule_layananpublik20 = "/^(?=.*\bpetugas\b)/";

6.2 Buat Kode If Else & Update Kategori

        
else if(preg_match($rule_layananpublik1, $key)
    || preg_match($rule_layananpublik2, $key)
    || preg_match($rule_layananpublik3, $key)
    || preg_match($rule_layananpublik4, $key)
    || preg_match($rule_layananpublik5, $key)
    || preg_match($rule_layananpublik6, $key)
    || preg_match($rule_layananpublik7, $key)
    || preg_match($rule_layananpublik8, $key)
    || preg_match($rule_layananpublik9, $key)
    || preg_match($rule_layananpublik10, $key)
    || preg_match($rule_layananpublik11, $key)
    || preg_match($rule_layananpublik12, $key)
    || preg_match($rule_layananpublik13, $key)
    || preg_match($rule_layananpublik14, $key)
    || preg_match($rule_layananpublik15, $key)
    || preg_match($rule_layananpublik16, $key)
    || preg_match($rule_layananpublik17, $key)
    || preg_match($rule_layananpublik18, $key)
    || preg_match($rule_layananpublik19, $key)
    || preg_match($rule_layananpublik20, $key)
    ){
        // klasifikasiMsg(INDEXMSG,NOMORKATEGORI)
        // Misal 1 = kemcetan, 2 = kehilangan , 4 = layanan publik
        $this->klasifikasiMsg($this->msgId[$index],4); 
    }        

6.3 jalankan klasifikasi

{url_server/localhost}/{path}/klasifikasi.php

6.3 Melihat hasil klasifikasi

Jalankan query ini :

SELECT * FROM tb_msg WHERE is_stemmed = 1 AND is_classified = 1 AND id_kategori_keluhan > 0

 

  • Al Hafiz Yunas

    mas, kamus stopwordnya pake apa?

    • degananda priyambada

      vega kalau nggak salah mas saya agak lupa udh lama soalnya nanti saya cb pastikan mas.

      • Al Hafiz Yunas

        oke mas, artikelnya sangat membantu

  • RISTY

    mas, jika saya ingin melihat melalui github apakah sudah bisa?

    • degananda priyambada

      weekend ini mungkin saya usahakan push ke github mbak.

  • Muhamad Raka Januarsyah

    permisi mas mau tanya, itu untuk file indexnya memang tidak ? thx