<?php
require_once 'modules/mysqllogin.php';
require_once 'modules/filters.php';
require_once 'modules/public.php';
if( !empty($_GET['search']) ){$search=MySanitize($_GET['search']);}else{$search='';}
echo "<h4>Input=[$search]</h4>";
$MySQLServer=GETdbHostNameRO();
$MySQLDB=GETdbNameRO();
$MySQLUsername=GETdbUsernameRO();
$MySQLPassword=GETdbPasswordRO();
$SqlQuery="
select distinct games.* from games where MATCH(game_title) AGAINST('$search') Limit 10 ";
//BOF Generate Bag of words.
$SearchDocumentCount=0;
$DocRecArray = array();
$con=mysqli_connect($MySQLServer,$MySQLUsername,$MySQLPassword,$MySQLDB);
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,$SqlQuery);
while($row = mysqli_fetch_array($result))
{
$SearchDocumentCount++;
$game_title=$row['game_title'];
array_push($DocRecArray,$game_title);
//echo '1' . $game_title . '<br>';
}
mysqli_close($con);
//EOF Generate Bag of words.
$BuildTable='';
$SqlQuery="
select distinct
games.*,
MATCH(game_title) AGAINST('$search') AS relevance1,
MATCH(game_title) AGAINST('\"$search\"') AS relevance2,
CASE WHEN game_title = '$search' then 50 else 1 end as relevance3,
MATCH(game_title) AGAINST('$search')+
MATCH(game_title) AGAINST('\"$search\"')+
CASE WHEN game_title = '$search' then 50 else 1 end as final_relevance,
(SELECT filename from banners where games_id=games.id and filename like '%boxart/front%' limit 1) as 'LOCAL_IMG_LINK',
(SELECT name from platforms where id=games.platform limit 1) as 'platform_name',
(SELECT genre from genres where genres.id=games_genre.genres_id LIMIT 1 ) as 'genre_name',
(SELECT name from pubs_list where id=games_pubs.pub_id) as 'publisher_name',
(SELECT name from devs_list where id=games_devs.dev_id) as 'developer_name',
games_genre.genres_id
from games
left join games_genre on games_genre.games_id=games.id
left join games_pubs on games_pubs.games_id=games.id
left join games_devs on games_devs.games_id=games.id
where
MATCH(game_title) AGAINST('$search')
Limit 10
";
$reccount=0;
$BuildOutput='';
$con=mysqli_connect($MySQLServer,$MySQLUsername,$MySQLPassword,$MySQLDB);
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,$SqlQuery);
while($row = mysqli_fetch_array($result))
{
$reccount++;
$id=$row['id'];
$relevance1=$row['relevance1'];
$relevance2=$row['relevance2'];
$relevance3=$row['relevance3'];
$final_relevance=$row['final_relevance'];
$game_title=$row['game_title'];
$overview=$row['overview'];
$release_date=$row['release_date'];
$platform=$row['platform'];
$platform_name=$row['platform_name'];
$publisher_name=$row['publisher_name'];
$developer_name=$row['developer_name'];
$coop=$row['coop'];
$players=$row['players'];
$LOCAL_IMG_LINK='images/thumb/' . $row['LOCAL_IMG_LINK']; //Local Image
$genres_id=$row['genres_id'];
$genre_name=$row['genre_name'];
$FinalTFScore=0;
$tf=0;
//Break search up into words
$searchArry = explode(' ',strtolower($search));
$BuildOutput = $BuildOutput . $reccount . ' <b>Document:</b> ' . $game_title . '<br>';
foreach($searchArry as $SearchArryVal)
{
//Calculate TF
(float)$tfreq=TermCounter($SearchArryVal,$game_title);
(float)$Wordcount = WordCounter($game_title);
(float)$tf = $tfreq / $Wordcount ;
//Calculate IDF
$IDFDocumentMatchCount=0;
$IDFDocumentMatchCount = IDFDocMatchCount($DocRecArray,$SearchArryVal);
if($IDFDocumentMatchCount!=0)
{
$TF_IDF=(float)$tf*log($SearchDocumentCount/$IDFDocumentMatchCount);
}else
{
$TF_IDF=0.001;
}
$BuildOutput = $BuildOutput . 'Term: <b>' . $SearchArryVal . '</b> Freq=<b>' . $tfreq . '</b> WordCount=<b>' . $Wordcount . '</b> TFScore=<b>' . $tf . '</b> Document Count=<b>' . $SearchDocumentCount . '</b> Documents Containing <b>' . $SearchArryVal . '</b>=<b>' . $IDFDocumentMatchCount . '</b><br>';
$FinalTFScore = (float)$FinalTFScore + $TF_IDF;
}
$BuildOutput = $BuildOutput . '-------------------------------------------------------------------------------------------------------------------------------------------<br>';
//var_dump($tf);
//$FinalTFScore=$FinalTFScore*20;
$FinalRankingScore=$FinalTFScore*$final_relevance;
$BuildTable=$BuildTable . "<tr id=\"tablerec_$reccount\"><td>$reccount</td><td>$game_title</td><td>$platform_name</td><td>$relevance1</td><td>$relevance2</td><td>$relevance3</td><td>$final_relevance</td><td>" . (float)$FinalTFScore . "</td><td>$FinalRankingScore</td></tr>";
}
mysqli_close($con);
function TermCounter($Term,$DOC)
{
$TermCount=0;
$arrDocument = explode(' ',$DOC);
foreach ($arrDocument as $value)
{
if(strtolower($value)==strtolower($Term)){$TermCount++;}
}
return $TermCount;
}
function WordCounter($string)
{
$tringarr = explode(' ',$string);
//Custom adjustment to over come high scores on documents containing a single word.
if(count($tringarr) ==1)
{
return 2;
}
else
{
return count($tringarr);
}
}
function IDFDocMatchCount($DocumentArry,$Term)
{
//Count how many documents contain a speciffic word
$RecMatchCount=0;
foreach ($DocumentArry as $DocumentArryVal)
{
$DocumentArryVal = strtolower($DocumentArryVal);
$Term = strtolower($Term);
if(strpos($DocumentArryVal, $Term) == false){$RecMatchCount=$RecMatchCount+0;}else{$RecMatchCount++;}
}
return $RecMatchCount;
}
?>
<body style="font-family:verdana;font-size:11px;">
<form action="test.php" method="get">
Search<br><input type="text" name="search" value="<?php echo $search;?>" size="50"><br>
<input type="submit"><br>
</form>
<?php //echo $SqlQuery;?>
<h4>Search Results</h4>
<table style="border-collapse: collapse; border: 1px solid black;font-family:verdana;font-size:11px;" border="bordered">
<tr><td><b>#</td><td><b>game_title</td><td><b>platform</td><td><b>relevance1</td><td><b>relevance2</td><td><b>relevance3</td><td><b>Total Relevance</td><td><b>TF-IDF</td><td><b>Final Rank</td></tr>
<?php echo $BuildTable;?>
</table>
<br>
<h4>TF-IDF Process Output</h4>
<?php echo $BuildOutput;?>
</table>
</body>