Script PHP - Cara Deteksi Bahasa dari Teks / Kata

Author : Sigit Purnomo | Released : August 06, 2017 | Category :
deteksi bahasa

Sudah lama saya tidak berbagi informasi seputar Personal Homepage (PHP). Berhubung saya sekarang sedang belajar membuat blog dengan bahasa script tingkat PHP, maka disinilah saya akan berbagi tentang apapun yang saya dapat dan pelajari di blog baru tersebut.

Mengenal Deteksi Bahasa

Deteksi bahasa (en - Language detection) pada intinya akan menebak bahasa apa yang digunakan pada beberapa kalimat menggunakan kata per kata yang ada sebagai kata kunci / query.

Sebagai pemahaman dasar, disini saya akan memberi sebuah contoh penggunaan dan bagaimana cara kerja script ini. Versi yang saya gunakan adalah versi dasar, dan masih banyak kekurangan, sehingga masih perlu diperbaiki jika ingin mendapatkan pengalaman yang lebih baik.

Pertama-tama, tentukan sebuah kalimat yang akan di deteksi. Sebagai contoh, disini saya menggunakan kalimat "Hari ini saya dapat senyum oleh suatu hal".


Perhatikan kedua kata kunci berikut:
  • $katakunci['BAHASA_INDONESIA'] = array ('cinta', 'marah', 'sayang', 'benci', 'senyum', 'peluk');
  • $katakunci['BAHASA_INGGRIS'] = array ('the', 'and', 'have', 'for', 'with', 'you');

Pada contoh kalimat "Hari ini saya dapat senyum oleh suatu hal", terdapat satu kata kunci di pilihan BAHASA_INDONESIA, yaitu "senyum". Sehingga nanti hasilnya adalah bahasa indonesia.

Berikut kode lengkapnya:
<?php
$tulisan = "Hari ini saya dapat senyum oleh suatu hal";
 function Bahasa($tulisan, $terjemahkan) {
      $bahasa_pilihan = array('BAHASA_INDONESIA','BAHASA_INGGRIS');
      $katakunci['BAHASA_INDONESIA'] = array ('cinta', 'marah', 'sayang', 'benci', 'senyum', 'peluk');
      $katakunci['BAHASA_INGGRIS'] = array ('the', 'and', 'have', 'for', 'with', 'you');
      $tulisan = preg_replace("/[^A-Za-z]/", ' ', $tulisan);
      foreach ($bahasa_pilihan as $bahasa) {
        $kalkulasi[$bahasa]=0;
      }
      for ($i = 0; $i < 6; $i++) {
        foreach ($bahasa_pilihan as $bahasa) {
          $kalkulasi[$bahasa] = $kalkulasi[$bahasa] +

            substr_count($tulisan, ' ' .$katakunci[$bahasa][$i] . ' ');;
        }
      }
      $max = max($kalkulasi);
      $maxs = array_keys($kalkulasi, $max);
      if (count($maxs) == 1) {
        $pemenang = $maxs[0];
        $pertamax = 0;
        foreach ($bahasa_pilihan as $bahasa) {
          if ($bahasa <> $pemenang) {
            if ($kalkulasi[$bahasa]>$pertamax) {
              $pertamax = $kalkulasi[$bahasa];
            }
          }
        }
        if (($pertamax / $max) < 0.1) {
          return $pemenang;
        }
      }
      return $terjemahkan;
    }
echo Bahasa($tulisan, $terjemahkan);
?>

Simpan di blog Anda dengan ekstensi .php
Buka dan lihat hasilnya. Pasti BAHASA_INDONESIA

Sekarang ganti bagian ini:
$tulisan = "Hari ini saya dapat senyum oleh suatu hal";
Menjadi:
$tulisan = "Hello sigit purnomo, how are you ?";
Pada contoh kedua hasilnya BAHASA_INGGRIS

Saya harap informasi ini jelas. Jika masih ada pertanyaan, tulis di komentar.

Update 07 Agustus 2017

Beberapa jam setelah saya memposting artikel ini, saya melihat ada link masuk dari sebuah forum stackoverflow.com/questions/45539468/matching-word-to-array-for-language-detection

Setelah saya selidiki, ternyata ada seseorang yang bertanya tentang kode yang saya berikan disini ke forum tersebut.

Kabar baiknya, pengguna tersebut mencantumkan link sumber, jadi saya bisa tahu ada seseorang yang menyalin kode ini.

Kabar yang lebih baik lagi, ada beberapa jawaban di forum tersebut yang isinya lebih baik dari apa yang saya bagikan disini.

Jadi disini saya mengucapkan terima kasih kepada mereka, sebab dari situ saya bisa tahu kekurangan dari apa yang sedang saya uji coba.

Nah, saya akan mencoba menyempurnakan kode sebelumnya dengan mengikuti petunjuk yang ada di StackOverflow.

Kekurangan pada widget lawas

Jika pada bagian objek yang akan di deteksi hanya terdapat kata-kata yang ada pada satu buah kata kunci, misalnya hanya dari bahasa Indonesia saja, itu masih bekerja. Tapi jika ternyata masih nyangkut satu atau lebih kata yang ada di keyword bahasa inggris, maka widget tidak dapat bekerja.

Perbaikan itulah yang akan saya update sekarang. Silahkan salin kode baru berikut yang saya dapat dari forum dan telah saya modifikasi menjadi lebih sempurna.

<?php
function Bahasa($cek) {
  $cek = "Hari ndasmu ini ngaco saya have senyum YOU? oleh weleh suatu manceng hal";
  $cek = preg_replace("/[^A-Za-z]/", ' ', $cek);
  $exp = explode(' ',$cek);

  $lang['INDONESIA'] = array ('cinta', 'marah', 'sayang', 'benci', 'senyum', 'peluk');
  $lang['ENGLISH'] = array ('the', 'and', 'have', 'for', 'with', 'you');
  $lang['JAWA'] = array ('ngaco', 'koplak', 'ngaret', 'manceng', 'ndasmu', 'weleh');
  $en=0;$id=0;$jw=0;

  foreach($exp as $str){
 if(in_array(strtolower($str), array_map("strtolower",$lang['ENGLISH']))){$en +=1;}
 if(in_array(strtolower($str), array_map("strtolower",$lang['INDONESIA']))){$id +=1;}
 if(in_array(strtolower($str), array_map("strtolower",$lang['JAWA']))){$jw +=1;}
    }
$detect = array('en'=>$en,'id'=>$id,'jw'=>$jw);
$max = max($detect);
$results = array_search($max, $detect);
if($results == 'en') {
echo "ENGLISH DETECTED";
}
if($results == 'id') {
echo "INDONESIAN DETECTED";
}
if($results == 'jw') {
echo "JOWO DETECTED";
}
}
Bahasa($cek);

Saya telah beberapa kali melakukan uji coba, dan tidak ada masalah di versi terbaru ini.
Jika ada yang membutuhkan tempat melakukan percobaan, pakai saja https://eval.in

Google+

Linkedin

1 comments:

Tulis comments
avatar
Anonymous
Admin
August 7, 2017 at 1:24 AM

makasih gan. ane ketinggalan info nih. nice post gan. ditunggu update perbaikan lagi biar makin jos hehe :D

Reply

Silahkan berkomentar sesuai topik yang dibahas