<?php
/*Verzija sa n-gram normalizacijom 15.1.2014.g. */
error_reporting(0);
require('html2text.php');
/* F-ja koja racuna broj recenica u dokumntu. */
$con= mysqli_connect("localhost","tagstudi_aldina","aldina1234567","tagstudi_dokumenta");
mysqli_query($con,"set names 'utf8'");
function broj_recenica($tekst)
{
   $recenice = explode('|',$tekst);
   $i=0;
   while($recenice[$i]!=null)
   {
     $i++;
   }
return $i;
}
/* F-ja koja normalizuje recenicu odsecanjem svake reci na duzinu 4*/
function normalizacija($recenica)
{
   $reci = explode(' ',$recenica);
   $reci_lenght=broj_reci($recenica);
   $normalizovana_recenica="";
   for($i=0; $i < $reci_lenght; $i++)
   {
     $ostatak_reci[$i]="";
     if($reci[$i]!=" ")
    {
     if(strlen($reci[$i])>=4)
     {
      $ostatak_reci[$i] = substr($reci[$i], 0, 4);
      }
    else
    {
     // $ostatak_reci[$i] = $reci[$i];
    }
   if($i<$reci_lenght-1)
   {
     $normalizovana_recenica=$normalizovana_recenica.$ostatak_reci[$i]." ";
   }
   else
   {
     $normalizovana_recenica=$normalizovana_recenica.$ostatak_reci[$i]." |";
   }
   }
  }
$normalizovana_recenica=$normalizovana_recenica." |";
return $normalizovana_recenica;
}

/* funkcija vraca ngram normalizovanu recenicu za n=4 */
function ngram_normalizacija($recenica)
{
  $reci = explode(' ',$recenica);
  $reci_lenght=broj_reci($recenica);
  $normalizovana_recenica="";
  $k=0;
  for($i=0; $i < $reci_lenght; $i++)
  {
    if(je_li_Rec($reci[$i]))
   {
    while(strlen($reci[$i])>=4)
   { 
      $ostatak_reci[$k] = substr($reci[$i], 0, 4);
      $normalizovana_recenica=$normalizovana_recenica.$ostatak_reci[$k]." ";
      $reci[$i]=substr($reci[$i], 1, strlen($reci[$i])-1);
     $k++;
   }
   }
  }
$normalizovana_recenica=$normalizovana_recenica." |";
return $normalizovana_recenica;
}

//Indeks reci u nizu
function ind_reci_u_nizu($rec,$niz,$n)
{
	$p=0;
	$ind;
	for($i=0;$i<$n;$i++)
	{
	if($rec==$niz[$i])
	{
	$p=1;
	$ind=$i;
	}
	}
	if($p==1)
	{
	return $ind;
	}
	else
	{
	return -1;
	}
}
/**20.1.2014. f-ja za proveru da li string sadrzi samo slova**/
function je_li_Rec($string)
{
if(preg_match('/[^A-Za-z][^\p{Latin}]+/u', $string)) //vraca false ako nadje bilo koji karakterosim latiničnih slova 
//čisti sve(brojeve, specijalne karaktere..) osim latiničnih karaktera
{  
		return false;
}
else{ 
		return true;
	}
}
/* Broj pojavljivanja reci u dokumentu*/
function broj_ponavljanja_reci($recenica, $id_dok, $id_recen)
{
    $con= mysqli_connect("localhost","tagstudi_aldina","aldina1234567","tagstudi_dokumenta");
    mysqli_query($con,"set names 'utf8'");
	$reci = explode(' ',$recenica);
	$reci_lenght=broj_reci($recenica);
	$l=0;
	$niz_reci[$l]="";
	$niz_ponavljanja[$l]=0;
	for($i=0; $i < $reci_lenght; $i++)
	{
		$m=ind_reci_u_nizu($reci[$i],$niz_reci,$l);
		
		if($m!=-1)
		{
			$niz_ponavljanja[$m]++;
		}
		else
		{
			$niz_reci[$l]=$reci[$i];
			$niz_ponavljanja[$l]=1;
			$l++;
		}
	}
	/*Stampamo tabelu i ubacujemo podatke o broju ngrama u recenici u tabeli recenica_u_reci broj */
	
	
	 "<table border='1'><tr><td>Niz reci</td><td>Niz ponavljanja</td></tr>";
	for($k=0;$k<$l;$k++)
	{
		//echo "<tr><td>".$niz_reci[$k]."</td><td>".$niz_ponavljanja[$k]."</td></tr>";
		mysqli_query($con,"INSERT INTO recenica_reci (id_dokumenta, id_recenice, rec, br_poj) VALUES ($id_dok, $id_recen,'$niz_reci[$k]',$niz_ponavljanja[$k]) ");
	}
	echo "</table>";
}

 
 
function srURLtoCHAR($text) 
{ 
$url=array( 
	"%C5%A0","%C5%A1",  //Š, š
    "%C4%90","%C4%91", // Đ, đ
    "%C4%8C","%C4%8D", // Č, č
    "%C4%86","%C4%87", // Ć, ć
    "%C5%BD","%C5%BE", // Ž. ž
	"%C7%85","%C7%86", // Dž, dž
	"%C7%8B","%C7%8C", // Nj,nj
	"%D0%A8","%D1%88", //Ш,ш
    "%D0%82","%D1%92", //Ђ, ђ
    "%D0%A7","%D1%87", //Ч,ч
    "%D0%8B","%D1%9B", //Ћ, ћ
    "%D0%96","%C5%B6", //Ж, ж
	"%D0%8F","%D1%9F", //Џ, џ
	"%C7%8B","%C7%8C"  // Nj,nj

); 
$char=array( 
    "Š","š", 
    "Đ","đ", 
    "Č","č", 
    "Ć","ć", 
    "Ž","ž",
	"Dž","dž",
	"Nj","nj",
	"Š","š", 
    "Đ","đ", 
    "Č","č", 
    "Ć","ć", 
    "Ž","ž",
	"Dž","dž",
	"Nj","nj"
); 

return str_replace($url,$char,$text); 
} 


function srLatCHARtoURL($text) 
{ 
$char=array( 
    "Š","š", 
    "Đ","đ", 
    "Č","č", 
    "Ć","ć", 
    "Ž","ž",
	"Dž","dž",
	"Nj","nj"
); 

$url=array( 
    "%C5%A0","%C5%A1",  //Š
    "%C4%90","%C4%91", // Đ
    "%C4%8C","%C4%8D", // Č
    "%C4%86","%C4%87", // Ć
    "%C5%BD","%C5%BE", // Ž
	"%C7%85","%C7%86", // Dž, dž
	"%C7%8B","%C7%8C"  // Nj,nj

   
); 
return str_replace($char,$url,$text); 
} 

function srCirCHARtoURL($text) 
{ 
$char=array(
    "М","м",  
    "Љ","љ", 
    "Ј","ј", 
    "К","к", 
    "Е","е", 
    "Ц","ц", 
    "В","в", 
	"Б","б", 
	"Н","н", 
    "Л","л",
    "Х","х", 
    "Г","г", 
    "ф","Ф",	
    "Д","д",
    "Р","р", 
    "З","з", 
    "У","у", 
    "И","и",
    "С","с", 	
    "П","п", 	
    "T","т", 	
    "О","о"	,
	"А","а"	,
	"Ш","ш", 
    "Ђ","ђ", 
    "Ч","ч", 
    "Ћ","ћ", 
    "Ж","ж",
	"Џ","џ",
	"Њ","њ"

); 
$url=array( 
    "M","m", 
    "Lj","lј", 
    "J","j", 
    "K","k", 
    "E","e", 
    "C","c", 
    "V","v", 
	"B","b", 
	"N","n", 
    "L","l",
    "H","h", 
    "G","g", 
    "F","f",	
    "D","d",
    "R","r", 
    "Z","z", 
    "U","u", 
    "I","i",
    "S","s", 
    "P","p", 
    "T","t",
	"O","o",
    "A","a",
    "%D0%A8","%D1%88", //Ш, ш
    "%D0%82","%D1%92", //Ђ, ђ
    "%D0%A7","%D1%87", //Ч, ч
    "%D0%8B","%D1%9B", //Ћ, ђ
    "%D0%96","%C5%BE", //Ж, ж
	"%D0%8F","%D1%9F", //Џ, џ
	"%C7%8B","%C7%8C"  // Nj,nj
); 

return str_replace($char,$url,$text); 
} 
function srTackatoKraj($text) 
{ 
$TACKA=array(
    ". M", 
    ". L" ,
    ". J", 
    ". K", 
    ". E", 
    ". C", 
    ". V", 
	". B", 
	". N", 
    ". L",
    ". H", 
    ". G", 
    ". F",	
    ". D",
    ". R", 
    ". Z", 
    ". U", 
    ". I",
    ". S", 
    ". P", 
    ". T",
	". O",
    ". A"

); 
$KRAJ=array( 
    " | M", 
    " | L" ,
    " | J", 
    " | K", 
    " | E", 
    " | C", 
    " | V", 
	" | B", 
	" | N", 
    " | L",
    " | H", 
    " | G", 
    " | F",	
    " | D",
    " | R", 
    " | Z", 
    " | U", 
    " | I",
    " | S", 
    " | P", 
    " | T",
	" | O",
    " | A"
	
); 

return str_replace($TACKA,$KRAJ,$text); 
} 
function broj_reci($recenica)
{
$reci = explode(' ',$recenica);
$i=0;
while($reci[$i]!="|")
{
$i++;
}
return $i;
}

$result = mysqli_query($con,"SELECT id_dokumenta, izvor FROM dokument ");

$stop='';
$stop_result = mysqli_query($con,"SELECT naziv FROM stop_rec_dist ");
while ($row = mysqli_fetch_array($stop_result, MYSQL_ASSOC))
 {
    
    $stop=$stop.''.$row["naziv"].''." "; 
}

//$s = 'Što  je  danas ? je lep i sunčan dan је sunce sunce suncu sunasce. Је:-* данас да да. У колико sati :) сазна али да информација :/ буде ';

//while($row = mysql_fetch_array($result)) 

function pripremi($id_doku, $s)
{
    $con= mysqli_connect("localhost","tagstudi_aldina","aldina1234567","tagstudi_dokumenta");
    mysqli_query($con,"set names 'utf8'");
	$result = mysqli_query($con,"SELECT id_dokumenta, izvor FROM dokument ");

	$stop='';
	$stop_result = mysqli_query($con,"SELECT naziv FROM stop_rec_dist ");
	
	while ($row = mysqli_fetch_array($stop_result, MYSQL_ASSOC))
	{
		$stop=$stop.''.$row["naziv"].''." "; 
	}
	
	//Ovde treba uvecavati id dokumenta
	// $id_doku=$row['id_dokumenta'];  
	// $s=$row['izvor'];  
	//Proveramo da li postoje neki srpski karakteri proveravajuci koje je kodiranje
	//echo $s;
	//echo "<br />"; 
	//echo mb_detect_encoding($s); 
	//echo "<hr />";
	
	if (mb_detect_encoding($s)!="ASCII")
	{  
		//ukoliko nije ASCII onda kodiramo sva srpska latinicna slova
		$s=srLatCHARtoURL($s); 
		//ukoliko i dalje nije ASCII onda kodiramo sva srpska cirilicna slova
		if (mb_detect_encoding($s)!="ASCII") // 'UTF-8'
		{
			$s=srCirCHARtoURL($s);
		} 
	}
	//postavlja prazninu umesto |
	
	$s = preg_replace('/[|]/', ' ', $s); 
	$s = preg_replace('/[\r\n]+/', ' ', $s); //vise ili jedаn novi red u razmak
	//echo $s;
	$s = preg_replace('/ {1,}/',' ', $s); //čisti duple razmake
	

	//postavlja | umesto oznaka za kraj recenice
	$s=srTackatoKraj($s);
	// $znaci="/[(\.)(\ )([A-Z])]|[\?\!\/]/";
	$znaci="/[\?\!\/]/";
	$s=preg_replace($znaci,' |',$s);

	//$s = preg_replace('/ {1,}/',' ', $s); //čisti duple razmake
	$s = preg_replace('/[\ ]/', '$', $s); //postavlja dolar umesto praznina
	$s=html2text($s);
	$s = preg_replace('/[\$]/',' ', $s); //vraca dolar
	//Vracamo srpska slova
	$s=srURLtoCHAR($s);
	//Pretvaramo sva slova u mala      		
	$s = mb_strtolower($s, mb_detect_encoding($s));  // Pretvara sting u mala slova
	// Kodiramo srpska slova
	$s = srLatCHARtoURL($s);
	//Uklanjamo smajlove i druge nebitne reci
	$smile="/[(:|;)]-*([(\(|\))]|[opbsdx@&\*][\ ])/";
	$s=preg_replace($smile," ",$s);
	
	//Uklanjamo sve znake 
	$znaci="/[\(\)\{\}\+\*\.\[\]; :\,\?\'\"\!\~\/]/"; //Izbacena crta koja odvaja recenice
	
	$s=preg_replace($znaci,' ',$s);
	$s = preg_replace('/ {1,}/','  ', $s); //razdvaja reci sa  duplim razmacima
	
	//Vracamo srpska slova
	$s=srURLtoCHAR($s);
	$stop=$stop.' |';
	$s=$s.' |';
	$sr=false;
	$l=0;
	$slenght=broj_reci($s);
	$stoplenght=broj_reci($stop);
	$cisto='';
	
	//CISTIMO STOP RECI	
	$stopnew = explode(' ',$stop);

	for($j=0; $j < $stoplenght; $j++)
	{
		/*Svaku stop rec izbacuje pomucu f-je str_replace.Za izbacivanje se ispred i iza reci postavi $ tako da trazimo na primer $ali$  */
		   
		$rec=' '.$stopnew[$j].' ';
		$s=str_replace($rec,"  "," ".$s);
	}
	$s = srLatCHARtoURL($s);
	//$s = preg_replace('/[\$]/',' ', $s); //čisti duple razmake

	$s = preg_replace('/ {1,}/',' ', $s); //čisti duple razmake

	$s=srURLtoCHAR($s);
	//echo "<br />";
	//echo "<hr />";
	//echo "Bez stop reči:  ".''.$s;
	//echo "<br />";	
	//echo "****************************************************";
	//echo "<br />";
	//	$s="ovo je prva recenica | ovo je druga recenica |";

	$br=broj_recenica($s);
	////echo "broj recenica  ". $br;
	//echo "<br />";
	$snew=explode("|",$s);
	//Ovde moze da se formira id za recenice
	for($i=0;$i<$br;$i++)
	{
		//echo "Broj recenice  ". $i;
		
		$snew[$i]=$snew[$i].' |';
		
		//echo "<br />";
                 //Pre normalizacije da prevedemo u URL
             $recenica3 = normalizacija($snew[$i]); //*izmena*
         //  $recenica3=$snew[$i];
             /* echo "Pre normalizacije: ".$snew[$i];
	      echo "<br />";
	      echo "Posle normalizacije: ".$recenica3.".</br>";
	      echo "<br />";*/
		
	      broj_ponavljanja_reci($recenica3, $id_doku, $i );//ADELA Ovde moze da se doda kao argument id dokumenta id recenice
		
	}

	//echo "############################################# NOVI DOKUMENT";
	//echo "<br/>";
	//echo "<br/>";

	kljucne_reci1($id_doku,$recenica3);
	//echo"PRVOOOOOOOOOOOOO";
	//echo "<br />";
			
	//Ovde moze da se formira id za recenice
	$snew=explode("|",$s);
	
	for($i=0;$i<$br;$i++)
	{
		//echo "Broj recenice  ". $i;
		$snew[$i]=$snew[$i].' |';
		//echo "<br />";
		
		$recenica3=normalizacija($snew[$i]);//ovde zamenila
		//$recenica3=$snew[$i];
		//echo "Pre normalizacije: ".$snew[$i];
		//echo "<br />";
		//echo "Posle normalizacije: ".$recenica3.".</br>";
			//echo "<br />";
		broj_ponavljanja_reci($recenica3, $id_doku, $i );
	}
	//echo"DRUGO";
	//echo "<br />";
			
	kljucne_reci2($id_doku,$recenica3);
	//Brisemo suvisne podatke iz datoteke;
	//brisi($id_doku); 
}

function kljucne_reci1($id_dok,$id_recenice) 
{
    $con= mysqli_connect("localhost","tagstudi_aldina","aldina1234567","tagstudi_dokumenta");
    mysqli_query($con,"set names 'utf8'");
	//Uklanjamo praznine iz reci
	mysqli_query($con,"UPDATE recenica_reci SET rec=LTRIM(rec)");
	
	//Brisemo prazan string i praznine iz skupa pronadjenih reci
	mysqli_query($con,"DELETE FROM `recenica_reci` WHERE `rec`=''");
	//Ubacuje u kljucne reci one re;i koje se pojavljuju odstupaju za dve standardne devijacije od pojavljivanja drugih reci
	
	$result= mysqli_query($con,"INSERT INTO kljucne(id_dokumenta,rec,br_pojava)
	select $id_dok,s1.rec,s1.br from 
	(SELECT rec,sum(br_poj) as br FROM  recenica_reci WHERE id_dokumenta=$id_dok group by rec) as s1 , 
	(SELECT  avg(br_poj) + 2*stddev(br_poj) as gr FROM recenica_reci WHERE id_dokumenta=$id_dok ) as g  where s1.br>g.gr order by br desc limit 0,10");
	
	mysqli_query($con,"DELETE FROM `recenica_reci` where id_dokumenta=$id_dok");
}
function kljucne_reci2($id_dok,$id_recenice) 
{
    $con= mysqli_connect("localhost","tagstudi_aldina","aldina1234567","tagstudi_dokumenta");
    mysqli_query($con,"set names 'utf8'");
	//Uklanjamo praznine iz reci
	mysqli_query($con,"UPDATE recenica_reci SET rec=LTRIM(rec)");
	//Brisemo prazan string i praznine iz skupa pronadjenih reci
	mysqli_query($con,"DELETE FROM `recenica_reci` WHERE `rec`=''");
	//Vrsimo ponovno prebrojavanje kljucnih reci
	mysqli_query($con,"UPDATE `kljucne` as a SET a.`br_pojava`=(SELECT sum(`br_poj`) 
			 FROM  recenica_reci as r where r.`id_dokumenta`=$id_dok  and r.`rec`=a.rec) where a.`id_dokumenta`=$id_dok ");
	//Ubacuje broj reci u recenici za svaku recenicu dokumenta
	$result= mysqli_query($con,"INSERT INTO dokument_recenica(id_dok_recen, id_recenice, broj_reci) 
	SELECT id_dokumenta,id_recenice,sum(br_poj)
	FROM recenica_reci  where id_dokumenta=$id_dok group by id_dokumenta,id_recenice");
	//Ubacuje broj reci ukupno u svim recenicama u kojima se neka "rec" pojavljuje
	$result= mysqli_query($con,"INSERT INTO tklj_rec_u_recenicama(rec, broj_reci, id_dokumenta) 
	select s2.rec, sum(s1.broj_reci), s1.id_dok_recen from dokument_recenica as s1, 
	(SELECT distinct  id_recenice, rec  FROM recenica_reci  where  id_dokumenta=$id_dok ) as s2 
	where s1.id_dok_recen=$id_dok and s1.id_recenice=s2.id_recenice group by s2.rec,s1.id_dok_recen");
	//Racuna broj recenica u kojima se nalaze obe reci
	$result= mysqli_query($con,"INSERT INTO tklj_parovi(rec1, rec2, br_recenica, id_dokumenta) 
	SELECT  r1.rec,r2.rec,count(*) as br,$id_dok  FROM recenica_reci as r1, recenica_reci as r2 ,(SELECT rec FROM kljucne where id_dokumenta=$id_dok) as r3  
	WHERE  r2.id_dokumenta=$id_dok and  r1.id_dokumenta=$id_dok and not r1.rec in (SELECT rec FROM kljucne  where id_dokumenta=$id_dok) 
	   and r2.rec=r3.rec and r1.id_recenice =r2.id_recenice group by  r1.rec,r2.rec  order by br desc");
	//postavljamo broj reci u recenicam u kojima se pojavljuju kljucne reci za svaku kljucnu rec
	$result= "UPDATE kljucne  as k SET p=(SELECT broj_reci FROM tklj_rec_u_recenicama as t  WHERE t.rec=k.rec and  t.id_dokumenta= $id_dok) where  k.id_dokumenta= $id_dok";
	$e=mysqli_query($con,$result);

	//Delimo sa ukupnim brojem reci u dokumentu
	$result= mysqli_query($con,"
	UPDATE kljucne  as k SET  p=p/(SELECT  sum(broj_reci)  FROM dokument_recenica WHERE id_dok_recen=$id_dok) where  k.id_dokumenta=$id_dok");
	//Racunamo hi kvadrat
	$result= mysqli_query($con,"INSERT INTO hi_kvadrat(id_dokumenta,rec,hi) 
	select id_dokumenta ,rec1,sum(br)-max(br) from 
	(SELECT p.id_dokumenta ,rec1, rec2,(p.br_recenica -r.broj_reci*k.p)*(p.br_recenica -r.broj_reci*k.p)/r. broj_reci*k.p  as br FROM 
	tklj_parovi as p , kljucne as k,tklj_rec_u_recenicama as r where 
	rec1=r.rec and rec2=k.rec and p.id_dokumenta=$id_dok  and r.id_dokumenta=$id_dok and k.id_dokumenta=$id_dok)  as l group by rec1, id_dokumenta");
	$result= mysqli_query($con,"INSERT INTO `kljucne`(`rec`, `id_dokumenta`, `hi`) SELECT * FROM `hi_kvadrat` where `id_dokumenta`=$id_dok order by hi  desc limit 0, 40");
        //Vrsimo ponovno prebrojavanje kljucnih reci
	mysqli_query($con,"UPDATE `kljucne` as a SET a.`br_pojava`=(SELECT sum(`br_poj`) 
			 FROM  recenica_reci as r where r.`id_dokumenta`=$id_dok  and r.`rec`=a.rec) where a.`id_dokumenta`=$id_dok ");
}
function brisi($id_dok) 
{
    $con= mysqli_connect("localhost","tagstudi_aldina","aldina1234567","tagstudi_dokumenta");
    mysqli_query($con,"set names 'utf8'");
	//mysql_query("DELETE FROM  `dokument_recenica` WHERE `id_dok_recen`=$id_dok");
	mysqli_query($con,"DELETE FROM  `hi_kvadrat` WHERE `id_dokumenta`=$id_dok");
	//mysql_query("DELETE FROM  `recenica_reci` WHERE `id_dokumenta`=$id_dok");
	mysqli_query($con,"DELETE FROM  `tklj_parovi` WHERE `id_dokumenta`=$id_dok");
	mysqli_query($con,"DELETE FROM  `tklj_rec_u_recenicama` WHERE `id_dokumenta`=$id_dok");
}
?>