cahyadsn

stemming arifin setiono

Dec 18th, 2015
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 12.24 KB | None | 0 0
  1. <?php
  2. function cekKamus($kata,$kamus_arr){
  3.  $hasilCari = 0;
  4.  if(in_array($kata,$kamus_arr)){
  5.  $hasilCari = 1;
  6.  }
  7.  return $hasilCari;
  8.  }
  9. /* ------------------------------------------------------------------
  10. potong kata yang berawalan me atau pe
  11. --------------------------------------------------------------------*/
  12. function potongAwalanMe($kata){
  13.  $_2hurufAwal = substr($kata,0,2);
  14.  $awalan = "";
  15.  $_4hurufAwal = substr($kata,0,4);
  16.  $_3hurufAwal = substr($kata,0,3);
  17.  $hurufPengganti="";
  18.  if($_4hurufAwal == "meng" || $_4hurufAwal == "peng"){
  19.  $awalan = $_4hurufAwal;
  20.  // hasil yang dipotong tambahkan dengan salah satu huruf berikut ini
  21.  // hurufPengganti=['v','k','g','h','q'];
  22.  }
  23.  else if($_4hurufAwal == "meny" || $_4hurufAwal == "peny"){
  24.  //awalan = _4hurufAwal.substr(0,2);
  25.  $awalan = $_4hurufAwal;
  26.  // ganti ny dengan huruf pengganti
  27.  //$hurufPengganti=['s'];
  28.  }
  29.  else if($_3hurufAwal == "mem" || $_3hurufAwal == "pem"){
  30.  $awalan = $_3hurufAwal;
  31.  // tambahkan huruf pengganti jika hasil kata yang dipotong berupa huruf vokal
  32.  //$hurufPengganti=['b','f','p','v'];
  33.  }
  34.  else if($_3hurufAwal == "men" || $_3hurufAwal == "pen"){
  35.  $awalan = $_3hurufAwal;
  36.  // tambahkan huruf pengganti jika hasil kata yang dipotong berupa huruf vokal
  37.  //$hurufPengganti=['c','d','j','s','t','z'];
  38.  }
  39.  else if($_3hurufAwal == "per"){
  40.  $awalan = $_3hurufAwal;
  41.  // hurufPengganti=['c','d','j','s','t','z'];
  42.  }
  43.  else if($_2hurufAwal == "me" || $_2hurufAwal == "pe"){
  44.  $awalan = $_2hurufAwal;
  45.  // hurufPengganti=['l','m','n','r','y','w'];
  46.  }
  47.  return $awalan;
  48. // return awalan+" "+kata.substr(awalan.length)+" "+hurufPengganti;
  49. }
  50. /* ------------------------------------------------------------------
  51. potong kata yang berawalan be
  52. --------------------------------------------------------------------*/
  53. function potongAwalanBe($kata){
  54.  $awalan = "";
  55.  $hurufPengganti="";
  56.  $_2hurufAwal = substr($kata,0,2);
  57.  $_3hurufAwal = substr($kata,0,3);
  58.  if($_3hurufAwal == "ber"){
  59.  $awalan = $_3hurufAwal;
  60.  }
  61.  else if($_2hurufAwal == "be" && $kata == "bekerja"){
  62.  $awalan = $_2hurufAwal;
  63.  }
  64.  else if($_3hurufAwal == "bel" && $kata == "belajar"){
  65.  $awalan = $_3hurufAwal;
  66.  }
  67.  return $awalan;
  68. // return $awalan+" "+$kata.substr($awalan.length)+" "+hurufPengganti;
  69. }
  70. /* ------------------------------------------------------------------
  71. potong $kata yang $awalannya selain me,pe,be
  72. --------------------------------------------------------------------*/
  73. function potongAwalanLainnya($kata){
  74.  $awalan = "";
  75.  $awalanLain = array("di","ke","ku","se");
  76.  //$hurufPengganti="";
  77.  $_2hurufAwal = substr($kata,0,2);
  78.  $_3hurufAwal = substr($kata,0,3);
  79.  if($_3hurufAwal == "ter"){
  80.  $awalan = $_3hurufAwal;
  81.  // $hurufPengganti=['r'];
  82.  }
  83.  else if(in_array($_2hurufAwal,$awalanLain)){
  84.  $awalan = $_2hurufAwal;
  85.  }
  86.  return $awalan;
  87. // return $awalan+" "+$kata.substr($awalan.length)+" "+hurufPengganti;
  88. }
  89. /* ------------------------------------------------------------------
  90. potong $awalan
  91. --------------------------------------------------------------------*/
  92. function potongAwalan($kata){
  93.  //jadikan huruf kecil semua
  94.  $kata = strtolower($kata);
  95.  $awalan1 =Array('me','di','ke','pe','se','be');
  96.  $awalan2 =Array('ber','ter','per');
  97.  $_2hurufAwal = substr($kata,0,2);
  98.  $awalan[0] ="";
  99.  $awalan[1] ="";
  100.  for( $i =0; $i < 2; $i++){
  101.  $awalanTmp="";
  102.  if($_2hurufAwal == "me" || $_2hurufAwal == "pe"){
  103.  $awalanTmp = potongAwalanMe($kata);
  104.  }
  105.  else if($_2hurufAwal == "be"){
  106.  $awalanTmp = potongAwalanBe($kata);
  107.  }
  108.  else {
  109.  $awalanTmp = potongAwalanLainnya($kata);
  110.  }
  111.  if($awalanTmp != ""){
  112.  //deklarasi ulang $kata dan $_2hurufAwal
  113.  $pjgAwalan = strlen($awalanTmp);
  114.  $kata = substr($kata,$pjgAwalan,strlen($kata) - $pjgAwalan);
  115.  $_2hurufAwal = substr($kata,0,2);
  116.  if(in_array($awalanTmp,$awalan2)){
  117.  // jika $awalan[1] sudah ada isinya masukkan ke $awalan[1];
  118.  //if($awalan[1] != ""){
  119.  //$awalan[0] = $awalanTmp;
  120.  // }
  121.  //else
  122.  $awalan[1] = $awalanTmp;
  123.  
  124.  }
  125.  else {
  126.  // pengecekan dilakukan untuk menangani $kata yang ber$awalan ke seperti kerja, kemul, kemudan dll
  127.  if($awalan[0] == ""){
  128.  $awalan[0] = $awalanTmp;
  129.  }
  130.  else {
  131.  $awalan[1] = $awalanTmp;
  132.  }
  133.  
  134.  }
  135.  
  136.  }
  137.  }
  138.  return $awalan;
  139.  }
  140. function potongAkhiran($kata){
  141.  //jadikan huruf kecil semua
  142.  $kata = strtolower($kata);
  143.  $akhiran1 = array('lah','kah','pun','tah');
  144.  $akhiran2 = array('ku','mu','nya');
  145.  $akhiran3 = array('i','an','kan');
  146.  $akhir = array('','','');
  147.  $_3hurufAkhir = substr($kata,strlen($kata) - 3);
  148.  $_2hurufAkhir = substr($kata,strlen($kata) - 2);
  149.  $_1hurufAkhir = substr($kata,strlen($kata) - 1);
  150.  for( $i = 0; $i < 3; $i++){
  151.  if($i == 0){
  152.  if( in_array($_3hurufAkhir,$akhiran1)){
  153.  $akhir[$i] = $_3hurufAkhir;
  154.  //potong $kata
  155.  $kata = substr($kata,0,strlen($kata) - 3);
  156.  //deklarasi ulang $akhiran
  157.  $_3hurufAkhir = substr($kata,strlen($kata) - 3);
  158.  $_2hurufAkhir = substr($kata,strlen($kata) - 2);
  159.  $_1hurufAkhir = substr($kata,strlen($kata) - 1);
  160.  }
  161.  }
  162.  else if($i == 1){
  163.  if( in_array($_3hurufAkhir,$akhiran2)){
  164.  $akhir[$i] = $_3hurufAkhir;
  165.  //potong $kata
  166.  $kata = substr($kata,0,strlen($kata) - 3);
  167.  //deklarasi ulang $akhiran
  168.  $_3hurufAkhir = substr($kata,strlen($kata) - 3);
  169.  $_2hurufAkhir = substr($kata,strlen($kata) - 2);
  170.  $_1hurufAkhir = substr($kata,strlen($kata) - 1);
  171.  }
  172.  else if( in_array($_2hurufAkhir,$akhiran2)){
  173.  $akhir[$i] = $_2hurufAkhir;
  174.  //potong $kata
  175.  $kata = substr($kata,0,strlen($kata) - 2);
  176.  //deklarasi ulang $akhiran
  177.  $_3hurufAkhir = substr($kata,strlen($kata) - 3);
  178.  $_2hurufAkhir = substr($kata,strlen($kata) - 2);
  179.  $_1hurufAkhir = substr($kata,strlen($kata) - 1);
  180.  }
  181.  }
  182.  else {
  183.  if( in_array($_3hurufAkhir,$akhiran3)){
  184.  $akhir[$i] = $_3hurufAkhir;
  185.  }
  186.  else if( in_array($_2hurufAkhir,$akhiran3)){
  187.  $akhir[$i] = $_2hurufAkhir;
  188.  }
  189.  else if( in_array($_1hurufAkhir,$akhiran3)){
  190.  $akhir[$i] = $_1hurufAkhir;
  191.  }
  192.  }
  193.  }
  194.  return $akhir;
  195.  }
  196. function cariKataDasar($kata){
  197.  $awalan = potongAwalan($kata);
  198.  $akhiran = potongAkhiran($kata);
  199.  $panjang2Awalan = strlen($awalan[0]) + strlen($awalan[1]);
  200.  $panjang3Akhiran = strlen($akhiran[0]) + strlen($akhiran[1]) + strlen($akhiran[2]);
  201.  $kataDasar = substr($kata,$panjang2Awalan,strlen($kata) - ($panjang3Akhiran +$panjang2Awalan));
  202.  return $kataDasar;
  203.  }
  204. function stemmingArifin($kata,$kamus){
  205. /* ------------------------------------------------------------------
  206. asumsikan bentuk kata adalah aw 1 + aw 2 + kd + akh 3 + akh 2 + akh 1
  207. --------------------------------------------------------------------*/
  208. /* ------------------------------------------------------------------
  209. cek apakah kata ada dalam $kamus
  210. --------------------------------------------------------------------*/
  211. if(in_array($kata,$kamus)){
  212.  return $kata;
  213.  }
  214. else {
  215. /* ------------------------------------------------------------------
  216. hasilkan $awalan, $akhiran dan kata dasar, periksa apakah kata telah
  217. ditemukan. asumsinya kata selalu memiliki susunan sebagai berikut
  218.  AW I + AW II + KD + AKH III + AKH II + AKH I
  219. --------------------------------------------------------------------*/
  220.  $awalan = potongAwalan($kata);
  221.  $akhiran = potongAkhiran($kata);
  222.  $panjang2Awalan = strlen($awalan[0]) + strlen($awalan[1]);
  223.  $panjang3Akhiran = strlen($akhiran[0]) + strlen($akhiran[1]) + strlen($akhiran[2]);
  224.  $kataDasar = substr($kata,$panjang2Awalan,strlen($kata) - ($panjang3Akhiran +$panjang2Awalan));
  225. /* -----------------------------------------------------------------
  226. periksa apakah terjadi perubahan $kata ketika $kata dasar mendapatkan $awalan
  227. * pertama cek perubahan $kata jika mendapat $awalan me
  228. --------------------------------------------------------------------*/
  229.  $_2hurufAwalAwalan = substr($awalan[0],0,2);
  230.  $_2hurufAkhirAwalan = substr($awalan[0],2,2);
  231.  $_1hurufAkhirAwalan = substr($awalan[0],2,1);
  232.  $tempKataDasar;
  233. if($_2hurufAkhirAwalan == "ng"){
  234.  // untuk $kata seperti kontak, kantuk akan dilebur menjadi mengantuk
  235.  // tambahkan dengan huruf k
  236.  $tempKataDasar = "k".$kataDasar;
  237.  if(cekKamus($tempKataDasar,$kamus)) {
  238.  return $tempKataDasar;
  239.  }
  240.  }
  241. if($_2hurufAkhirAwalan == "ny"){
  242.  // tambahkan dengan huruf s
  243.  $tempKataDasar = "s".$kataDasar;
  244.  if(cekKamus($tempKataDasar,$kamus)) {
  245.  return $tempKataDasar;
  246.  }
  247.  }
  248. if($_1hurufAkhirAwalan == "m"){
  249.  // tambahkan dengan huruf p
  250.  $tempKataDasar = "p".$kataDasar;
  251.  if(cekKamus($tempKataDasar,$kamus)) {
  252.  return $tempKataDasar;
  253.  }
  254.  }
  255. if($_1hurufAkhirAwalan == "n"){
  256.  // tambahkan dengan huruf t
  257.  $tempKataDasar = "t".$kataDasar;
  258.  if(cekKamus($tempKataDasar,$kamus)) {
  259.  return $tempKataDasar;
  260.  }
  261.  }
  262. /* -----------------------------------------------------------------
  263. AW II.KD.AKH III.AKH II.AKH I
  264. --------------------------------------------------------------------*/
  265. $tempKataDasar = $awalan[1].$kataDasar.$akhiran[2].$akhiran[1].$akhiran[0];
  266.  if(cekKamus($tempKataDasar,$kamus)) {
  267.  return $tempKataDasar;
  268.  }
  269. /* -----------------------------------------------------------------
  270. KD + AK III + AK II + AK I
  271. --------------------------------------------------------------------*/
  272. $tempKataDasar = $kataDasar.$akhiran[2].$akhiran[1].$akhiran[0];
  273.  if(cekKamus($tempKataDasar,$kamus)) {
  274.  return $tempKataDasar;
  275.  }
  276. /* -----------------------------------------------------------------
  277. KD + AK III + AK II
  278. --------------------------------------------------------------------*/
  279. $tempKataDasar = $kataDasar.$akhiran[2].$akhiran[1];
  280.  if(cekKamus($tempKataDasar,$kamus)) {
  281.  return $tempKataDasar;
  282.  }
  283. /* -----------------------------------------------------------------
  284. KD + AK III
  285. --------------------------------------------------------------------*/
  286. $tempKataDasar = $kataDasar.$akhiran[2];
  287.  if(cekKamus($tempKataDasar,$kamus)) {
  288.  return $tempKataDasar;
  289.  }
  290. /* -----------------------------------------------------------------
  291. KD
  292. --------------------------------------------------------------------*/
  293. if(cekKamus($kataDasar,$kamus)) {
  294.  return $kataDasar;
  295.  }
  296. /* -----------------------------------------------------------------
  297. AW I.KD
  298. --------------------------------------------------------------------*/
  299. $tempKataDasar = $awalan[0].$kataDasar;
  300.  if(cekKamus($tempKataDasar,$kamus)) {
  301.  return $tempKataDasar;
  302.  }
  303. /* -----------------------------------------------------------------
  304. AW I.AW II.KD
  305. --------------------------------------------------------------------*/
  306. $tempKataDasar = $awalan[0].$awalan[1].$kataDasar;
  307.  if(cekKamus($tempKataDasar,$kamus)) {
  308.  return $tempKataDasar;
  309.  }
  310. /* -----------------------------------------------------------------
  311. AW I.AW II.KD.AKH III
  312. --------------------------------------------------------------------*/
  313. $tempKataDasar = $awalan[0].$awalan[1].$kataDasar.$akhiran[2];
  314.  if(cekKamus($tempKataDasar,$kamus)) {
  315.  return $tempKataDasar;
  316.  }
  317. /* -----------------------------------------------------------------
  318. AW I.AW II.KD.AKH III.AKH II
  319. --------------------------------------------------------------------*/
  320. $tempKataDasar = $awalan[0].$awalan[1].$kataDasar.$akhiran[2].$akhiran[1];
  321.  if(cekKamus($tempKataDasar,$kamus)) {
  322.  return $tempKataDasar;
  323.  }
  324. /* -----------------------------------------------------------------
  325. AW I.AW II.KD.AKH III.AKH II.AKH I
  326. --------------------------------------------------------------------
  327. $tempKataDasar = $awalan[0].$awalan[1].$kataDasar.$akhiran[2].$akhiran[1].$akhiran[0];
  328.  if(cekKamus($tempKataDasar,$kamus)) {
  329.  return $tempKataDasar;
  330.  }
  331.  * gak jadi ini = kata sebelum dilakukan pemotongan
  332. --------------------------------------------------------------------------*/
  333. /* -----------------------------------------------------------------
  334. AW II.KD
  335. --------------------------------------------------------------------*/
  336. $tempKataDasar = $awalan[1].$kataDasar;
  337.  if(cekKamus($tempKataDasar,$kamus)) {
  338.  return $tempKataDasar;
  339.  }
  340. /* -----------------------------------------------------------------
  341. AW II.KD.AKH III
  342. --------------------------------------------------------------------*/
  343. $tempKataDasar = $awalan[1].$kataDasar.$akhiran[2];
  344.  if(cekKamus($tempKataDasar,$kamus)) {
  345.  return $tempKataDasar;
  346.  }
  347. /* -----------------------------------------------------------------
  348. AW II.KD.AKH III.AKH II
  349. --------------------------------------------------------------------*/
  350. $tempKataDasar = $awalan[1].$kataDasar.$akhiran[2].$akhiran[1];
  351.  if(cekKamus($tempKataDasar,$kamus)) {
  352.  return $tempKataDasar;
  353.  }
  354. }
  355. return $kata;
  356. }
  357. ?>
Advertisement
Add Comment
Please, Sign In to add comment