Minggu, 29 Mei 2022

Import File .XLSX Terbaru 2022

 Gunakan Library:

https://drive.google.com/file/d/1kt6Py4ijXea_uKr_O0uQh6LrfLNJ7dFC/view?usp=sharing

Gunakan Script CRUDS Tabel BARANG

<?php

require_once 'XLS/vendor/autoload.php';

use Shuchkin\SimpleXLSX;



$tanggal=WKT(date("Y-m-d"));

$pro="simpan";

$status="Tersedia";

$nama_barang="";

$deskripsi="";

$keterangan="";

$gambar0="avatar.jpg";

$gambar="avatar.jpg";

?> 


<script type="text/javascript"> 

function PRINT(pk){ 

win=window.open('barang/barang_print.php?pk='+pk,'win','width=1000, height=400, menubar=0, scrollbars=1, resizable=0, location=0, toolbar=0, status=0'); } 


</script>

<script language="JavaScript">

function buka(url) {window.open(url, 'window_baru', 'width=800,height=600,left=320,top=100,resizable=1,scrollbars=1');}

</script>


<?php

  $sql="select `id_barang` from `$tbbarang` order by `id_barang` desc";

  $jum= getJum($conn,$sql);

  $kd="BRG";

if($jum > 0){

$d=getField($conn,$sql);

    $idmax=$d['id_barang'];

$urut=substr($idmax,3,2)+1;//01

if($urut<10){$idmax="$kd"."0".$urut;}

else{$idmax="$kd".$urut;}

}

else{$idmax="$kd"."01";}

  $id_barang=$idmax;

?>

<?php

if(isset($_GET["pro"]) && $_GET["pro"]=="ubah"){

$id_barang=$_GET["kode"];

$sql="select * from `$tbbarang` where `id_barang`='$id_barang'";

$d=getField($conn,$sql);

$id_barang=$d["id_barang"];

$id_barang0=$d["id_barang"];

$nama_barang=$d["nama_barang"];

$deskripsi=$d["deskripsi"];

$gambar=$d["gambar"];

$gambar0=$d["gambar"];

$keterangan=$d["keterangan"];

$pro="ubah";

}

?>

 <link rel="stylesheet" href="jsacordeon/jquery-ui.css">

  <link rel="stylesheet" href="resources/demos/style.css">

<script src="jsacordeon/jquery-1.12.4.js"></script>

  <script src="jsacordeon/jquery-ui.js"></script>

  <script>

  $( function() {

    $( "#accordion" ).accordion({

      collapsible: true

    });

  } );

  </script>

<script type="text/javascript" src="jscripts/tiny_mce/tiny_mce.js"></script>

<script type="text/javascript">

   tinyMCE.init({

mode : "textareas",

theme : "advanced",

   }); 

</script>

    <div id="accordion">

  <h4>Tambah  Barang</h4>

  <div>


<form name="import_export_form" method="post" action="" enctype="multipart/form-data">

<table width="60%">

<tr>

<td><label  class="btn btn-dark">Pilih File Datalatih (.xls):</label>

<td><input type="file" id="excelfile" required name="excelfile"  class="btn btn-light"/>

<td><input type="submit" id="import"  value="IMPORT" name="IMPORT" class="btn btn-warning"/>

<td><a href="downloadgetfile.php?file=DataLatih.xlsx">

<input type="button" id="import" value="DOWNLOAD" name="Download" class="btn btn-success"/>

</a>

</tr>

</table>

</form><br>

<hr>


<?php

 if(isset($_POST['IMPORT'])){

$filename = $_FILES['excelfile']['tmp_name'];

$nf = $_FILES['excelfile']['name'];

 $n=0;

 process($conn, "Truncate tb_barang");

 process($conn, "Truncate tb_transaksi");

 

 $sukses=0;

 $tanggal0=date("Y-m-d");

 $pelanggan0="";

 

$xlsx = new SimpleXLSX($filename);

if ( $xlsx->success() ) {

    foreach( $xlsx->rows() as $r ) {

      if(!empty($r[3]) && $n>1){

$tanggal = $r[0];//Tanggal

$pelanggan= $r[1];//Pelanggan

$nama_barang= $r[2];//Keterangan

$jumlah= $r[3];//Qty

$unit= $r[4];//Unit

$harga= $r[5];//Harga

$subtotal= $r[6];//subtotal

if($tanggal==""){$tanggal=$tanggal0;}

if($pelanggan==""){$pelanggan=$pelanggan0;}

$nama_barang = str_replace('\'', '', $nama_barang);

$nama_barang = str_replace("'", '', $nama_barang);

$nama_barang = str_replace('\"', '', $nama_barang);


$keterangan=$unit;

$deskripsi="Satuan $unit, Harga $harga";


$sqla="select `nama_barang` from `$tbbarang` where `nama_barang` like '%$nama_barang%'";

$juma= getJum($conn,$sqla);

if($juma <1){

$sql="select `id_barang` from `$tbbarang` order by `id_barang` desc";

  $jum= getJum($conn,$sql);

  $kd="BRG";

if($jum > 0){

$d=getField($conn,$sql);

    $idmax=$d['id_barang'];

$urut=substr($idmax,3,2)+1;//01

if($urut<10){$idmax="$kd"."0".$urut;}

else{$idmax="$kd".$urut;}

}

else{$idmax="$kd"."01";}

$id_barang=$idmax;

  

$sql="INSERT INTO `$tbbarang` (

`id_barang` ,

`nama_barang` ,

`deskripsi` ,

`gambar` ,

`keterangan`

) VALUES (

'$id_barang', 

'$nama_barang',

'$deskripsi',

'avatar.jpg',

'$keterangan'

)";

$simpan=process($conn,$sql);

}//blm ada


 $tanggal0=$tanggal;

 $pelanggan0=$pelanggan;


$sukses++;

echo "$sql<hr>";



$id_barang=getIDBarang($conn,$nama_barang);

$sql=" INSERT INTO `$tbtransaksi` (

`tanggal` ,

`id_barang` ,

`frekuensi` ,

`persediaan` ,

`pembelian` ,

`pemakaian` ,

`sisa` ,

`keterangan`

) VALUES (

'$tanggal',

'$id_barang',

'$jumlah',

'', 

'',

'',

'',

'$pelanggan  ($jumlah x Rp. $harga =RP. $subtotal)'

)";

$simpan=process($conn,$sql);

  }

  

  $n++; 

    }//for

echo "<script>alert('Import Data $nf Sebanyak $sukses Item berhasil disimpan... !');document.location.href='?mnu=barang';</script>";

} else {

    echo 'xlsx error: '.$xlsx->error();

}

 

}//isset


?>

<form action="" method="post" enctype="multipart/form-data">

<table  class="table table-bordered">

<tr>

<th width="180"><label for="id_barang">ID Barang</label>

<th width="12">:

<th colspan="2"><b><?php echo $id_barang;?></b></tr>

<tr>

<td><label for="nama_barang">Nama Barang</label>

<td>:<td width="458"><input required name="nama_barang" class="form-control" type="text" id="nama_barang" value="<?php echo $nama_barang;?>" size="25" />

</td>

</tr>



<tr>

<td height="24"><label for="deskripsi">Deskripsi</label>

<td>:<td><textarea name="deskripsi" cols="25" required="required" class="form-control" id="dekripsi"><?php echo $deskripsi;?></textarea></td>

</tr>



<tr>

  <td height="24"><label for="gambar">Gambar</label>

    <td>:<td colspan="2">

        <input class="form-control" name="gambar" type="file" id="gambar" size="20" /> 

      => <a href='#' onclick='buka("barang/zoom.php?id=<?php echo $id_barang;?>")'><?php echo $gambar0;?></a></td>

</tr>



<tr>

<td height="24"><label for="keterangan">Keterangan</label>

<td>:<td>

<textarea name="keterangan" class="form-control" cols="55" rows="2"><?php echo $keterangan;?></textarea>

</td>

</tr>


<tr>

<td>

<td>

<td colspan="2">

<input name="Simpan" type="submit" id="Simpan" value="Simpan" />

<input name="pro" type="hidden" id="pro" value="<?php echo $pro;?>" />

<input name="gambar0" type="hidden" id="gambar0" value="<?php echo $gambar0;?>" />

<input name="id_barang" type="hidden" id="id_barang" value="<?php echo $id_barang;?>" />

<input name="id_barang0" type="hidden" id="id_barang0" value="<?php echo $id_barang0;?>" />

<a href="?mnu=barang"><input name="Batal" type="button" id="Batal" value="Batal" /></a>

</td></tr>

</table>

</form>

<br />

</div>

<h4>Data Barang :</h4>

<div>

 

| <img src='ypathicon/print.png' title='PRINT' OnClick="PRINT('<?php echo $status;?>')"> |

<br>


<table  class="table table-bordered">

  <tr bgcolor="#cccccc">

    <th width="3%">No</td>

<th width="3%">IDBRG</td>

<th width="10%">Gambar</td>

    <th width="30%">Nama Barang</td>

<th width="20%">Keterangan</td>

    <th width="13%">Menu</td>

  </tr>

<?php  

  $sql="select * from `$tbbarang`  order by `id_barang` desc";

  $jum=getJum($conn,$sql);

if($jum > 0){

//--------------------------- 

$batas   = 10;

$page = 1;

if(isset($_GET['page'])){

$page = $_GET['page'];

}

if(empty($page)){$posawal  = 0;$page = 1;}

else{$posawal = ($page-1) * $batas;}


$sql2 = $sql." LIMIT $posawal,$batas";

$no = $posawal+1;

//-------------------------------

$arr=getData($conn,$sql2);

foreach($arr as $d) {

$id_barang=$d["id_barang"];

$nama_barang=ucwords($d["nama_barang"]);

$deskripsi=$d["deskripsi"];

$gambar=$d["gambar"];

$gambar0=$d["gambar"];

$keterangan=$d["keterangan"];

$color="#dddddd";

if($no %2==0){$color="#eeeeee";}

echo"<tr bgcolor='$color'>

<td>$no</td>

<td><div align='center'>";

echo"<a href='#' onclick='buka(\"barang/zoom.php?id=$id_barang\")'>

<img src='$YPATH/$gambar' width='40' height='40' /></a></div>";

echo"</td>

<td>$id_barang</td>

<td><b>$nama_barang </b></td>

<td><small>$deskripsi <i>$keterangan</i></small></td>

<td><div align='center'>

<a href='?mnu=barang&pro=ubah&kode=$id_barang'><img src='ypathicon/ub.png' title='ubah'></a>

<a href='?mnu=barang&pro=hapus&kode=$id_barang&nama_barang=$nama_barang'><img src='ypathicon/ha.png' title='hapus' 

onClick='return confirm(\"Apakah Anda benar-benar akan menghapus $nama_barang pada data barang ?..\")'></a></div></td>

</tr>";

$no++;

}//for dalam

}//if

else{echo"<tr><td colspan='6'><blink>Maaf, Data barang belum tersedia...</blink></td></tr>";}

?>

</table>


<?php

$jmldata = $jum;

if($jmldata>0){

if($batas<1){$batas=1;}

$jmlhal  = ceil($jmldata/$batas);

echo "<div class=paging>";

if($page > 1){

$prev=$page-1;

echo "<span class=prevnext><a href='$_SERVER[PHP_SELF]?page=$prev&mnu=barang'>« Prev</a></span> ";

}

else{echo "<span class=disabled>« Prev</span> ";}


for($i=1;$i<=$jmlhal;$i++)

if ($i != $page){echo "<a href='$_SERVER[PHP_SELF]?page=$i&mnu=barang'>$i</a> ";}

else{echo " <span class=current>$i</span> ";}


if($page < $jmlhal){

$next=$page+1;

echo "<span class=prevnext><a href='$_SERVER[PHP_SELF]?page=$next&mnu=barang'>Next »</a></span>";

}

else{ echo "<span class=disabled>Next »</span>";}

echo "</div>";

}//if jmldata


$jmldata = $jum;

echo "<p align=center>Total data <b>$jmldata</b> item</p>";


echo"</div>";

?>



</div>


<?php

if(isset($_POST["Simpan"])){

$pro=strip_tags($_POST["pro"]);

$id_barang=strip_tags($_POST["id_barang"]);

$id_barang0=strip_tags($_POST["id_barang0"]);

$nama_barang=strip_tags($_POST["nama_barang"]);

$deskripsi=$_POST["deskripsi"];

$gambar0=strip_tags($_POST["gambar0"]);

if ($_FILES["gambar"] != "") {

move_uploaded_file($_FILES["gambar"]["tmp_name"],"$YPATH/".$_FILES["gambar"]["name"]);

$gambar=$_FILES["gambar"]["name"];

else {$gambar=$gambar0;}

if(strlen($gambar)<1){$gambar=$gambar0;}

$keterangan=$_POST["keterangan"];

if($pro=="simpan"){

 $sql=" INSERT INTO `$tbbarang` (

`id_barang` ,

`nama_barang` ,

`deskripsi` ,

`gambar` ,

`keterangan`

) VALUES (

'$id_barang', 

'$nama_barang',

'$deskripsi',

'$gambar',

'$keterangan'

)";

$simpan=process($conn,$sql);

if($simpan) {echo "<script>alert('Data $nama_barang berhasil disimpan !');document.location.href='?mnu=barang';</script>";}

else{echo"<script>alert('Data $nama_barang gagal disimpan...');document.location.href='?mnu=barang';</script>";}

}

else{

$sql="update `$tbbarang` set 

`nama_barang`='$nama_barang',

`deskripsi`='$deskripsi',

`gambar`='$gambar' ,

`keterangan`='$keterangan'

where `id_barang`='$id_barang0'";

$ubah=process($conn,$sql);

if($ubah) {echo "<script>alert('Data $nama_barang berhasil diubah !');document.location.href='?mnu=barang';</script>";}

else{echo"<script>alert('Data $nama_barang gagal diubah...');document.location.href='?mnu=barang';</script>";}

}//else simpan

}

?>


<?php

if(isset($_GET["pro"]) && $_GET["pro"]=="hapus"){

$id_barang=$_GET["kode"];

$nama_barang=$_GET["nama_barang"];

$sql="delete from `$tbbarang` where `id_barang`='$id_barang'";

$hapus=process($conn,$sql);

if($hapus) {echo "<script>alert('Data $nama_barang berhasil dihapus !');document.location.href='?mnu=barang';</script>";}

else{echo"<script>alert('Data $nama_barang gagal dihapus...');document.location.href='?mnu=barang';</script>";}

}

?>





Sabtu, 07 Mei 2022

PHP Winnowing dan Ngram

 

Algoritma Winnowing merupakan algoritma pencocokan string yang akan menggunakan fungsi hash sebagai pembanding antara string yang dicari (m) dengan substring pada teks (n).

Artinya  jika hash value keduanya adalah sama maka akan dilakukan perbandingan sekali lagi terhadap karakter-karakternya. Apabila hasil keduanya tidak sama, maka substring akan bergeser ke kanan. Pergeseran dilakukan sebanyak (n-m) kali. Perhitungan nilai hash yang efisien pada saat pergeseran akan mempengaruhi performa dari algoritma ini. (David Indra Lesmana, 2012).

Langkah-langkah dalam Algortima Winnowing:

1. Normalisasi text : Lowertext + Stopword (menghilangkan tanda baca, spasi, angka)  + Stemming (mengubah ke kata dasar).

2. Membagi teks kedalam gram-gram yang ditentukan nilai n-gramnya+window+base

3. Mencari nilai hash dengan fungsi hash dan fingerprint dari tiap kata yang terbentuk sesuai batasan window nya

4. Mencari nilai fingerprint yang sama antara dua dokumen/teks


Parsing k-gram adalah membentuk pola kata pada teks dengan memecah kata menjadi potongan-potongan dimana setiap potongan mengandung karakter sebanyak k.N-gram merupakan sebuah metode yang diaplikasikan untuk pembangkitan kata ataukarakter.Metode N-grams ini digunakan untuk mengambil potongan-potongankarakter huruf sejumlah k dari sebuah kata yang secara kontinuitas dibaca dari teks sumber hingga akhir dari dokumen.

Setelah melakukan Parsing N-gram maka langkah selanjutnya adalah hashing terhadap seluruh pecahan string hasil dari proses parsing k-gram. Hashing itu sendiri adalah suatu cara untuk mentransformasi string menjadi suatu nilai yang unik (hash value)dengan panjang tertentu (fixed-length) yang berfungsi sebagai penanda string tersebut. Pada sistem ini proses hashing memanfaatkan tabel ascii dengan rumus Hash (Diana dkk,2011):


Keterangan :

c = Nilai ascii karakter (desimal)

k = Banyak karakter (indeks karakter)

b = Basis Bilangan (nilai dari basis bilangan harus bilangan prima).

Alasan kenapa Basis bilangan (b) harus dipilih bilangan prima yang cukup besar, adalah untuk mengurangi kemungkinan adanya dua hash value yang sama.

Normalisasi Tabel:






Penampakan Hasil Script PHP Winnowing



https://media.neliti.com/media/publications/68455-ID-none.pdf
<?php

$time_start = microtime_float();

ini_set('memory_limit', '256M');

$tanggal=WKT(date("Y-m-d"));

$gram=5;
$base=3;
$window=4;
				
if(isset($_POST["Proses"])){
	$gram=strip_tags($_POST["gram"]);
	$base=strip_tags($_POST["base"]);
	$judul=strip_tags($_POST["judul"]);
	$abstrak=strip_tags($_POST["abstrak"]);
	$id_pengujian=strip_tags($_POST["q"]);
	$window=strip_tags($_POST["window"]);
}
 
$sql="select * from `$tbpengujian` order by `id_pengujian` desc";
if(isset($_GET["q"])){
	$id_pengujian=$_GET["q"];
	$sql="select * from `$tbpengujian` where `id_pengujian`='$id_pengujian'";
}

$d=getField($conn,$sql);
	$id_pengujian=$d["id_pengujian"];
	$judul=$d["judul"];
	$abstrak=$d["abstrak"];
	$rekapitulasi=$d["rekapitulasi"];
	$id_user=$d["id_user"];
	$kategori=$d["kategori"];
	$keterangan=$d["keterangan"];
	$norm=$d["normalisasi"];
	$window=$d["window"];
	$gram=$d["ngram"];
	$base=$d["base"];
?>
 <link rel="stylesheet" href="jsacordeon/jquery-ui.css">
  <link rel="stylesheet" href="resources/demos/style.css">
<script src="jsacordeon/jquery-1.12.4.js"></script>
  <script src="jsacordeon/jquery-ui.js"></script>
  <script>
  $( function() {
    $( "#accordion" ).accordion({
      collapsible: true
    });
  } );
  </script>
</head>
<body>
 
<div id="accordion">
<h3>Form Uji</h3>
<div>

<form action="" method="post" enctype="multipart/form-data">
<table border="1" width="90%" class="table table-hover rable-striped table-bordered" >
<tr>
<td>Judul
<td>:
<td>
<textarea name="judul" class="form-control" required cols="55" rows="2"><?php echo $judul;?></textarea>
</tr>

<tr>
<td>Abstrak
<td>:
<td>
<textarea name="abstrak" class="form-control" cols="55" rows="3"><?php echo $abstrak;?></textarea>
</tr>


<tr>
<td>
Konfigurasi
<td>:
<td>
<label>N-gram</label> 
<select name="gram" id="gram"  required />
<option <?php if($gram=="choose"){echo"selected";}?>>Pilih Angka</option>
<option value="3" <?php if($gram=="3"){echo"selected";}?>>3</option>
<option value="4" <?php if($gram=="4"){echo"selected";}?>>4</option>
<option value="5" <?php if($gram=="5"){echo"selected";}?>>5</option>
<option value="6" <?php if($gram=="6"){echo"selected";}?>>6</option>
<option value="7" <?php if($gram=="7"){echo"selected";}?>>7</option>
<option value="8" <?php if($gram=="8"){echo"selected";}?>>8</option>
<option value="9" <?php if($gram=="9"){echo"selected";}?>>9</option>
<option value="10" <?php if($gram=="10"){echo"selected";}?>>10</option>
</select>
<label>Base</label> 
<select name="base" id="base" required />
<option <?php if($base=="choose"){echo"selected";}?>>Angka Prima</option>
<option value="2" <?php if($base=="2"){echo"selected";}?>>2</option>
<option value="3" <?php if($base=="3"){echo"selected";}?>>3</option>
<option value="5" <?php if($base=="5"){echo"selected";}?>>5</option>
<option value="7" <?php if($base=="7"){echo"selected";}?>>7</option>
<option value="11" <?php if($base=="11"){echo"selected";}?>>11</option>
<option value="13" <?php if($base=="13"){echo"selected";}?>>13</option>
<option value="17" <?php if($base=="17"){echo"selected";}?>>17</option>
</select>
<label>Window</label> 
<select name="window" id="window"  required />
<option <?php if(window){echo"selected";}?>>Pilih Angka</option>
<option value="3" <?php if($window=="3"){echo"selected";}?>>3</option>
<option value="4" <?php if($window=="4"){echo"selected";}?>>4</option>
<option value="5" <?php if($window=="5"){echo"selected";}?>>5</option>
<option value="6" <?php if($window=="6"){echo"selected";}?>>6</option>
<option value="7" <?php if($window=="7"){echo"selected";}?>>7</option>
<option value="8" <?php if($window=="8"){echo"selected";}?>>8</option>
<option value="9" <?php if($window=="9"){echo"selected";}?>>9</option>
<option value="10" <?php if($window=="10"){echo"selected";}?>>10</option>
</select>
</tr>

<tr>
<td>
<td colspan="2">
<input name="q" type="hidden" id="q" value="<?php echo $id_pengujian;?>" />
<input name="Proses" type="submit" id="Proses" value="Analisa" />
<a href="?mnu=winnowing"><input name="Batal" type="button" id="Batal" value="Clear" /></a>
</td>

</tr> 
</table>
</form>
<?php
if(isset($_POST["Proses"])){	
	$window=strip_tags($_POST["window"]);
	$gram=strip_tags($_POST["gram"]);
	$base=strip_tags($_POST["base"]);
	$judul=strip_tags($_POST["judul"]);
	$abstrak=strip_tags($_POST["abstrak"]);
	$gab="$judul $abstrak";
	$norm=getNorm($gab);
}

//$norm="deteksiplagiarisme";////
echo "<h1><font color='#ffAA08'>$norm</font></h1><hr>";
echo "<h3><font color='#AA08ff'>Ngram: $gram, Base: $base, Window $window,</font></h3>";
$array = prosesWIN($norm,$gram,$base,$window); 

$arV=$array[0];
$arS=$array[1];
$arI=$array[2];
$arGS=$array[3];
$arGV=$array[4];
echo "<br><img src='ypathfile/winnowing1.png'></br>";

$gab1=gabAR($arS,$arV,$arGV);
echo $gab1;
echo "<br><img src='ypathfile/coeff.png'></br>";

$ars1 = $array[3];
$arv1 = $array[4];
$arr1=getUnix($arv1);
  
$nom=0;
$maxkemiripan=0;
$idmax=0;
$rekapitulasimax="";
$id_crawlingmax=0;
$ketmax="";

 $sql="select * from `$tbcrawling` order by `id_crawling` asc";
  $jum=getJum($conn,$sql);
		if($jum > 0){							
	$arr=getData($conn,$sql);
		foreach($arr as $d) {		
				$id_crawling=$d["id_crawling"];
				$judul=ucwords($d["judul"]);
				$abstrak=$d["abstrak"];
				$normalisasi=$d["normalisasi"];
				$kategori=$d["kategori"];
				$keterangan2=$d["keterangan"];
				$nom++;
		echo "<b><font color='green'>".$nom. ".".$judul."</font></b><br>"; 
		echo "<i><small><font color='magenta'>$normalisasi</font></small><br>"; 
		
			$array = prosesWIN($normalisasi,$gram,$base,$window);
			$arV2=$array[0];
			$arS2=$array[1];
			$arI2=$array[2];
			$ars2 = $array[3];
			$arv2 = $array[4];
			$gab2=gabAR($arS2,$arV2,$arv2);
			echo $gab2;

			$arr=array_merge($arr1,$arv2);
			$arr2=getUnix($arr);
			$sama=0;
			$gabv="";
			$H1=count($arr1);
			$H2=count($arv2);
			$H3=count($arr2);
			for($i=0;$i<$H1;$i++){
				for($j=0;$j<$H3;$j++){
					if($arr1[$i]==$arr2[$j]){
						$sama=$sama+1;
						$gabv.="{".$arr2[$j]."} ";
						//break;
					}
				}
			}

			$acc=($sama/$H3) *100;
			$acc=round($acc,2);
			$rekapitulasi= "Jumlah Hash DataUji : $H1<br>";
			$rekapitulasi.=  "Jumlah Hash Datalatih : $H2<br>";
			$rekapitulasi.=  "Fingerprint Sama: $gabv<br>";
			$rekapitulasi.=  "<font color=\"red\"><b>Jumlah Hash Irisan / Join : $sama / $H3 =$acc %</b></font>";

			echo"<hr>";
			echo $rekapitulasi;
			echo"<hr>";

			if($maxkemiripan<$acc){
				$maxkemiripan=$acc;
				$idmax=$id_crawling;
				$rekapitulasimax=$rekapitulasi;
				$id_crawlingmax=$id_crawling;
				$ketmax="$sama / $H3 =$acc %";
			}
 
	}//foreach
}//jum foreach
 
$kategori="Tidak Plagiarism"; 
if($maxkemiripan>50){$kategori="Plagiarism Tinggi";}
else if($maxkemiripan>30){$kategori="Plagiarism Sedang";}
else if($maxkemiripan>20){$kategori="Plagiarism Rendah";}	 


$time_end = microtime_float();
$waktu = $time_end - $time_start;

  $sql="update `$tbpengujian` set 
	`window`='$window',`ngram`='$gram',`id_crawling`='$id_crawlingmax',
	`rekapitulasi`='$rekapitulasimax',`waktu`='$waktu',`prosentase`='$maxkemiripan',
	`base`='$base',`kategori`='$kategori',`keterangan`='$ketmax' where `id_pengujian`='$id_pengujian'";
	$ubah=process($conn,$sql); 
	
	echo "<font color='blue'><b><h1>Kategori $kategori : $maxkemiripan %</h1><br>lama proses: $waktu ms</b></font>";	
?>
</div>
</div>


 
<?php
function gabAR($ar1,$ar2,$ar3){
$c=count($ar1);
$gabs="";
$gabv="";
for($i=0;$i<$c;$i++){
	$ds=$ar1[$i];
	$dv=$ar2[$i];
	$df=$ar3[$i];
	$gabs.="{".$ds."}";
	$gabv.="{".$dv."}";
	$gabf.="{".$df."}";
}
$gab="<small>
<font color='red'>GRAM:$gabs</font><br>
<font color='green'>HASH:$gabv</font><br>
<font color='blue'>FINGER:$gabf</font><br></small>";
return $gab;
}
 ?>

Formulas Kemiripan:




PHP Rabin Karp

 Algoritma Rabin Karp merupakan algoritma pencocokan string yang akan menggunakan fungsi hash sebagai pembanding antara string yang dicari (m) dengan substring pada teks (n).

Artinya  jika hash value keduanya adalah sama maka akan dilakukan perbandingan sekali lagi terhadap karakter-karakternya. Apabila hasil keduanya tidak sama, maka substring akan bergeser ke kanan. Pergeseran dilakukan sebanyak (n-m) kali. Perhitungan nilai hash yang efisien pada saat pergeseran akan mempengaruhi performa dari algoritma ini. (David Indra Lesmana, 2012).

Langkah-langkah dalam algortima Rabin Karp :

1. Normalisasi text : Lowertext + Stopword (menghilangkan tanda baca, spasi, angka)  + Stemming (mengubah ke kata dasar).

2. Membagi teks kedalam gram-gram yang ditentukan nilai k-gramnya

3. Mencari nilai hash dengan fungsi hash dari tiap kata yang terbentuk

4. Mencari nilai hash yang sama antara dua tek


Parsing k-gram adalahmembentuk pola kata pada teks dengan memecah kata menjadi potongan-potongan dimana setiap potongan mengandung karakter sebanyak k.K-grammerupakansebuah metode yang diaplikasikan untuk pembangkitan kata ataukarakter.Metode k-grams ini digunakan untuk mengambil potongan-potongankarakter huruf sejumlah k dari sebuah kata yang secara kontinuitas dibaca dari teks sumber hingga akhir dari dokumen.

Setelah melakukan Parsing K-gram maka langkah selanjutnya adalah hashing terhadap seluruh pecahan string hasil dari proses parsing k-gram. Hashing itu sendiri adalah suatu cara untuk mentransformasi string menjadi suatu nilai yang unik (hash value)dengan panjang tertentu (fixed-length) yang berfungsi sebagai penanda string tersebut. Pada sistem ini proses hashing memanfaatkan tabel ascii dengan rumus Hash (Diana dkk,2011):


Keterangan :

c = Nilai ascii karakter (desimal)

k = Banyak karakter (indeks karakter)

b = Basis Bilangan (nilai dari basis bilangan harus bilangan prima).

Alasan kenapa Basis bilangan (b) harus dipilih bilangan prima yang cukup besar, adalah untuk mengurangi kemungkinan adanya dua hash value yang sama.

Penampakan Hasilnya:


Dan hasil akumulasi akurasinya adalah sbb:


Dengan Script PHP Rabin Karp sbb:

<?php

$time_start = microtime_float();
ini_set('memory_limit', '256M');

$tanggal=WKT(date("Y-m-d"));

$gram=7;
$base=5;
				
if(isset($_POST["Proses"])){
	$gram=strip_tags($_POST["gram"]);
	$base=strip_tags($_POST["base"]);
	$judul=strip_tags($_POST["judul"]);
	$abstrak=strip_tags($_POST["abstrak"]);
	$id_pengujian=strip_tags($_POST["q"]);
}
 
$sql="select * from `$tbpengujian` order by `id_pengujian` desc";
if(isset($_GET["q"])){
	$id_pengujian=$_GET["q"];
	$sql="select * from `$tbpengujian` where `id_pengujian`='$id_pengujian'";
}

$d=getField($conn,$sql);
	$id_pengujian=$d["id_pengujian"];
	$judul=$d["judul"];
	$abstrak=$d["abstrak"];
	$rekapitulasi=$d["rekapitulasi"];
	$id_user=$d["id_user"];
	$kategori=$d["kategori"];
	$keterangan=$d["keterangan"];
	$norm=$d["normalisasi"];
?>
 <link rel="stylesheet" href="jsacordeon/jquery-ui.css">
  <link rel="stylesheet" href="resources/demos/style.css">
<script src="jsacordeon/jquery-1.12.4.js"></script>
  <script src="jsacordeon/jquery-ui.js"></script>
  <script>
  $( function() {
    $( "#accordion" ).accordion({
      collapsible: true
    });
  } );
  </script>
</head>
<body>
 
<div id="accordion">
<h3>Form Uji</h3>
<div>

<form action="" method="post" enctype="multipart/form-data">
<table border="1" width="90%" class="table table-hover rable-striped table-bordered" >
<tr>
<td>Judul
<td>:
<td>
<textarea name="judul" class="form-control" required cols="55" rows="2"><?php echo $judul;?></textarea>
</tr>

<tr>
<td>Abstrak
<td>:
<td>
<textarea name="abstrak" class="form-control" cols="55" rows="3"><?php echo $abstrak;?></textarea>
</tr>


<tr>
<td>
Konfigurasi
<td>:
<td>
<label>N-gram</label> 
<select name="gram" id="gram"  required />
<option <?php if($gram=="choose"){echo"selected";}?>>Pilih Angka</option>
<option value="3" <?php if($gram=="3"){echo"selected";}?>>3</option>
<option value="4" <?php if($gram=="4"){echo"selected";}?>>4</option>
<option value="5" <?php if($gram=="5"){echo"selected";}?>>5</option>
<option value="6" <?php if($gram=="6"){echo"selected";}?>>6</option>
<option value="7" <?php if($gram=="7"){echo"selected";}?>>7</option>
<option value="8" <?php if($gram=="8"){echo"selected";}?>>8</option>
<option value="9" <?php if($gram=="9"){echo"selected";}?>>9</option>
<option value="10" <?php if($gram=="10"){echo"selected";}?>>10</option>
</select>
<label>Base</label> 
<select name="base" id="base" required />
<option <?php if($base=="choose"){echo"selected";}?>>Angka Prima</option>
<option value="2" <?php if($base=="2"){echo"selected";}?>>2</option>
<option value="3" <?php if($base=="3"){echo"selected";}?>>3</option>
<option value="5" <?php if($base=="5"){echo"selected";}?>>5</option>
<option value="7" <?php if($base=="7"){echo"selected";}?>>7</option>
<option value="11" <?php if($base=="11"){echo"selected";}?>>11</option>
<option value="13" <?php if($base=="13"){echo"selected";}?>>13</option>
<option value="17" <?php if($base=="17"){echo"selected";}?>>17</option>
</select>
</tr>

<tr>
<td>
<td colspan="2">
<input name="q" type="hidden" id="q" value="<?php echo $id_pengujian;?>" />
<input name="Proses" type="submit" id="Proses" value="Analisa" />
<a href="?mnu=rk"><input name="Batal" type="button" id="Batal" value="Clear" /></a>
</td>

</tr> 
</table>
</form>
<?php
if(isset($_POST["Proses"])){	
	$gram=strip_tags($_POST["gram"]);
	$base=strip_tags($_POST["base"]);
	$judul=strip_tags($_POST["judul"]);
	$abstrak=strip_tags($_POST["abstrak"]);
	$gab="$judul $abstrak";
	$norm=getNorm($gab);
}

echo"<b>Judul Uji:</b>";
echo "<h1><font color='#ffAA08'>$norm</font></h1>";
echo "<h3><font color='#AA08ff'>Ngram: $gram, Base: $base</font></h3><hr>";

$nom=0;
$maxkemiripan=0;
$idmax=0;
$rekapitulasimax="";
$id_crawlingmax=0;
$ketmax="";

$array = prosesRK($norm,$gram,$base); 
  
$ars1 = $array[0];
$arv1 = $array[1];
$nom=0;
 $sql="select * from `$tbcrawling` order by `id_crawling` asc";
  $jum=getJum($conn,$sql);
		if($jum > 0){							
	$arr=getData($conn,$sql);
		foreach($arr as $d) {		
				$id_crawling=$d["id_crawling"];
				$judul=ucwords($d["judul"]);
				$abstrak=$d["abstrak"];
				$normalisasi=$d["normalisasi"];
				$kategori=$d["kategori"];
				$keterangan=$d["keterangan"];
				$nom++;
		echo "<b><font color='green'>".$nom. ".".$judul."</font></b><br>"; 
		echo "<i><small><font color='magenta'>$normalisasi</font></small><br>"; 
		
			$array = prosesRK($normalisasi,$gram,$base);
			$ars2 = $array[0];
			$arv2 = $array[1];

			$sama=0;
			$gabs="";
			$gabv="";
			$H1=count($arv1);
			$H2=count($arv2);
			for($i=0;$i<$H1;$i++){
				for($j=0;$j<$H2;$j++){
					if($arv1[$i]==$arv2[$j]){
						$sama=$sama+1;
						$gabv.="{".$arv2[$j]."} ";
						$gabs.="{".$ars2[$j]."} ";
						break;
					}
				}
			} 
$PN=($H1+$H2-$sama);
if($PN<$sama){
	$hmin=$H1;
	if($H2<$H1){$hmin=$H2;}
	$sama=$hmin;
	$PN=($H1+$H2-$sama);
		$sim=$sama/$PN * 100;
		$sim=round($sim,3);
		$ssim="$sama/($H1+$H2-$sama) x 100%";
	}
else{	
	$sim=$sama/$PN * 100;
	$sim=round($sim,3);
	$ssim="$sama/($H1+$H2-$sama) x 100%";
} 
	
	$rekapitulasi= "Jumlah Hash DataUji : $H1<br>";
	$rekapitulasi.=  "Jumlah Hash Datalatih : $H2<br>";
	$rekapitulasi.=  "Fingerprint Sama: $gabv<br>";
	$rekapitulasi.=  "Fingerprint Sama: $gabs<br>";
	$rekapitulasi.=  "<font color=\"red\"><b>Kemiripan : $ssim = $sim %</b></font>";

	echo"<hr>";
	echo $rekapitulasi;
	echo"<hr>";
			
		if($maxkemiripan<$sim){
			$maxkemiripan=$sim;
			$idmax=$id_crawling;
			$rekapitulasimax=$rekapitulasi;
			$id_crawlingmax=$id_crawling;
			$ketmax="$ssim = $sim %";
		} 		
		
	}//foreach
}//jum foreach
 
 
$kategori="Tidak Plagiarism"; 
if($maxkemiripan>50){$kategori="Plagiarism Tinggi";}
else if($maxkemiripan>30){$kategori="Plagiarism Sedang";}
else if($maxkemiripan>20){$kategori="Plagiarism Rendah";}	 


$time_end = microtime_float();
$waktu = $time_end - $time_start;

  $sql="update `$tbpengujian` set 
	`window`='$window',`ngram`='$gram',`id_crawling`='$id_crawlingmax',
	`rekapitulasi`='$rekapitulasimax',`waktu`='$waktu',`prosentase`='$maxkemiripan',
	`base`='$base',`kategori`='$kategori',`keterangan`='$ketmax' where `id_pengujian`='$id_pengujian'";
	//$ubah=process($conn,$sql); 
	
	echo "<font color='blue'><b><h1>Kategori $kategori : $maxkemiripan %</h1><br>lama proses: $waktu ms</b></font>";
	
?>
</div>
</div>
 
Dan sbb adalah tabel yang digunakan:


PDF to TEXT

 <?php
$time_start = microtime_float();

$doc="ypathfile/Kejuaraan-Nasional-Karate-Piala-Panglima-TNI-III-2014.pdf";
$ada=strpos($doc,".txt")+0;


require_once __DIR__ . '/vendor/autoload.php';
$isidoc="";

if(strpos($doc,".txt")>0){
$fh = fopen($doc,'r');
while ($line = fgets($fh)) {
$isidoc.=$line;
}
fclose($fh);
    }

else{//pdf
$initop = new \Smalot\PdfParser\Parser();
$ekstrakpdf = $initop->parseFile($doc);
$isidoc= $ekstrakpdf->gettext();
    }

$initos = new \Sastrawi\Stemmer\StemmerFactory();
$bikinos = $initos->createStemmer();
$stemming=$bikinos->stem($isidoc);
echo"Isi Doc=$isidoc<hr>";
echo"Stemming=$stemming<hr>";

 

$time_end = microtime_float();
$waktu = $time_end - $time_start;


function microtime_float(){
    list($usec, $sec) = explode(" ", microtime());
   return ((float)$usec + (float)$sec);
}

?>

Bonus Normalisasi Text:

 <?php

function getBersih($var){	
$var = mb_convert_encoding($var, 'UTF-8', 'UTF-8');
$var = preg_replace('/\xE0[\x80-\x9F][\x80-\xBF]'.
 '|\xED[\xA0-\xBF][\x80-\xBF]/S','?', $var );
 
 $var = preg_replace('/[\x00-\x08\x10\x0B\x0C\x0E-\x19\x7F]'.
 '|[\x00-\x7F][\x80-\xBF]+'.
 '|([\xC0\xC1]|[\xF0-\xFF])[\x80-\xBF]*'.
 '|[\xC2-\xDF]((?![\x80-\xBF])|[\x80-\xBF]{2,})'.
 '|[\xE0-\xEF](([\x80-\xBF](?![\x80-\xBF]))|(?![\x80-\xBF]{2})|[\x80-\xBF]{3,})/S',
 '?', $var );
return $var;
}
function getNorm($konten){
	$konten=getBersih($konten);
	$konten = iconv("UTF-8", "UTF-8//IGNORE", $konten);
	$konten=strtolower("$konten");
	$konten = mb_convert_encoding($konten, 'UTF-8', 'UTF-8');
			
require_once __DIR__ . '/vendor/autoload.php';
$initos = new \Sastrawi\Stemmer\StemmerFactory();
$bikinos = $initos->createStemmer();
$stemming=$bikinos->stem($konten);
$stemmingnew=strtolower($stemming);

$ak=getStopNumber();
$ar=getStopWords();
$wordStop=$stemmingnew;
for($i=0;$i<count($ar);$i++){
 $wordStop =str_replace(" ".$ar[$i]." "," ", $wordStop); 
}

for($i=0;$i<count($ak);$i++){
 $wordStop =str_replace($ak[$i],"", $wordStop); 
}

$juduluji=str_replace("  "," ", $wordStop); 
$juduluji=str_replace("  "," ", $wordStop); 
$juduluji=str_replace("  "," ", $wordStop); 

//=====================================================	
 $stemming=$juduluji;
 $arAsli=explode(".",$stemming);
 $arr=explode(" ",$stemming);
 $unique = array_unique($arr); 
 $dupes = array_diff_key( $arr, $unique ); 
 //$m=array_count_values($dupes); 

 $gab= implode(" ",$unique)
 return trim($gab);
}
 
function getStopWords(){
        return array(
            'yang', 'untuk', 'pada', 'ke', 'para', 'namun', 'menurut', 'antara', 'dia', 'dua',
            'ia', 'seperti', 'jika', 'jika', 'sehingga', 'kembali', 'dan', 'tidak', 'ini', 'karena',
            'kepada', 'oleh', 'saat', 'harus', 'sementara', 'setelah', 'belum', 'kami', 'sekitar',
            'bagi', 'serta', 'di', 'dari', 'telah', 'sebagai', 'masih', 'hal', 'ketika', 'adalah',
            'itu', 'dalam', 'bisa', 'bahwa', 'atau', 'hanya', 'kita', 'dengan', 'akan', 'juga',
            'ada', 'mereka', 'sudah', 'saya', 'terhadap', 'secara', 'agar', 'lain', 'anda',
            'begitu', 'mengapa', 'kenapa', 'yaitu', 'yakni', 'daripada', 'itulah', 'lagi', 'maka',
            'tentang', 'demi', 'dimana', 'kemana', 'pula', 'sambil', 'sebelum', 'sesudah', 'supaya',
            'guna', 'kah', 'pun', 'sampai', 'sedangkan', 'selagi', 'sementara', 'tetapi', 'apakah',
            'kecuali', 'sebab', 'selain', 'seolah', 'seraya', 'seterusnya', 'tanpa', 'agak', 'boleh',
            'dapat', 'dsb', 'dst', 'dll', 'dahulu', 'dulunya', 'anu', 'demikian', 'tapi', 'ingin',
            'juga', 'nggak', 'mari', 'nanti', 'melainkan', 'oh', 'ok', 'seharusnya', 'sebetulnya',
            'setiap', 'setidaknya', 'sesuatu', 'pasti', 'saja', 'toh', 'ya', 'walau', 'tolong',
            'tentu', 'amat', 'apalagi', 'bagaimanapun'
        );
    }


function getStopNumber(){
        return array(
            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!', '@', '#', '$', '%'
        );
    }
 
 
 
function getUnix($array){
error_reporting(0);
$unique = array_flip(array_flip($array));
//print_r($unique);
$jd=count($array);
//echo $jd."#<br>";
$m=0;
for($i=0;$i<$jd;$i++){
 if(strlen($unique[$i])>0){
  //echo "$m =".$unique[$i]."<br>";
  $M[$m]=$unique[$i];
  $m++;
 }
}
 return $M;
}
?>



Mencari Tanggal Terakhir Suatu Bulan

  $a_date = "$tahun-$bulan-01"; $lastdate= date('t',strtotime($a_date));//Y-m-t <?php require_once"koneksivar.php&...