pcodigo2web/workspace/avaliador/gerarnotastreinoclusters.php

197 lines
4.2 KiB
PHP
Executable File

<?php
// Este script recebe como entrada notastreino.csv e os rotulos de ltreino.csv. Gera notastreino-cl.csv, onde cl é o número de um cluster
// Esta função remove um diretorio recursivamente
//-------------------------------------------------------------------------------------------------
function ExcluiDir($Dir){
if ($dd = opendir($Dir)) {
while (false !== ($Arq = readdir($dd))) {
if($Arq != "." && $Arq != ".."){
$Path = "$Dir/$Arq";
if(is_dir($Path)){
ExcluiDir($Path);
}elseif(is_file($Path)){
unlink($Path);
}
}
}
closedir($dd);
}
rmdir($Dir);
}
//--------------------------------------------------------------------------------------------------
// Diretorio de entrada
$diretoriopredicao = "arquivospredicao/";
$diretorioind = "indexados/";
// Recebe argumentos de entrada - nome da base
//$p=var_dump($argv);
$questao = $argv[1];
// Carregar notastreino.csv e ltreino.csv
$notastreino=$diretoriopredicao.$questao."/treinomodelo.csv";
if (file_exists($notastreino))
{
$nt = file($notastreino);
// Cria o diretorio clusters em arquivospredicao/nomedabase
$dirclusters= $diretoriopredicao.$questao."/clusters/";
if ((file_exists($dirclusters)))
{
ExcluiDir($dirclusters);
}
mkdir($dirclusters);
// Separa em vetores notastreino, ltreino e lteste
$n=count($nt);
$vr=array();
$vn=array();
for($i=0;$i<$n;$i++)
{
$l = explode(";",$nt[$i]);
$vr[$i]=$l[0];
$vn[$i]=trim($l[1]);
unset($l);
}
// Carregar ltreino.csv - com rótulos e clusters. Separar rotulos e clusters
$ltreino = $diretorioind.$questao."/ltreino.csv";
$ltr=file($ltreino);
$nlc=count($ltr);
$vlc=array();
for($i=0;$i<$nlc;$i++)
{
$l = explode(";",$ltr[$i]);
$vlr[$i]=$l[0];
$vlc[$i]=trim($l[1]);
unset($l);
}
// Obter numero de clusters diferentes gerados para a questao
$result = array_unique($vlc);
// Para cada cluster diferente, criar um arquivo notastreino-cl.csv
$arqclusters= array();
$fclusters=array();
$j=0;
foreach($result as $cluster)
{
$numcluster= trim($cluster);
$arqclusters[$numcluster]= $diretoriopredicao.$questao."/clusters/notastreino-".$numcluster.".csv";
$j=$j+1;
}
unset($result);
// Em indexados/nomebase, para cada amostra em ltreino.csv, verificar cluster e a nota em notastreino.csv. Elimina a amostra da matriz que carrega notastreino.csv
for($i=0;$i<$nlc;$i++)
{
// Procurar o rotulo em notastreino para obter nota
$indice = array_search($vlr[$i], $vr);
if ($indice>=0)
{
$nota = $vn[$indice];
$icluster= $vlc[$i];
$f= fopen($arqclusters[$icluster],'a');
fwrite($f, $vlr[$i].";".$nota."\n");
fclose($f);
// Apaga de notastreino
unset($vr[$indice]);
$vr=array_values($vr);
unset($vn[$indice]);
$vn=array_values($vn);
}
}
// O que sobrou de notastreino, verifique qual é o cluster em lteste.csv e grave no cluster correspondente
$cont = count($vr);
if ($cont>0)
{
$alteste = $diretorioind.$questao."/lteste.csv";
$lteste= file($alteste);
$contteste = count($lteste);
for($p=0;$p<$contteste;$p++)
{
$l=explode(";",$lteste[$p]);
$vrot[$p]=$l[0];
$vclust[$p]=trim($l[1]);
unset($l);
}
for($q=0;$q<$cont;$q++)
{
// Procurar o rotulo de notastreino em lteste
$indice = array_search($vr[$q], $vrot);
if ($indice>=0)
{
$nota= $vn[$q];
$rotulo=$vr[$q];
$clt = $vclust[$indice];
$f= fopen($arqclusters[$clt],'a');
fwrite($fclusters[$clt],$rotulo.";".$nota);
fclose($f);
}
}
unset($lteste);
}
// Fechar todos os arquivos abertos
$ncfc= count($fclusters);
for($m=0;$m<$ncfc; $m++)
{
//fclose($fclusters[$m]);
}
// Liberar memórias
unset($vr);
unset($vn);
unset($vlr);
unset($vlc);
unset($arqclusters);
unset($nt);
$mensagem="\n Notas por cluster geradas com sucesso! \n";
}
else
{
$mensagem= "\n Professor não pontuou amostras sugeridas. Não houve predicoes! \n";
}
$arquivoaviso = $diretoriopredicao.$questao."/aviso.txt";
$fa = fopen($arquivoaviso,'w');
fwrite($fa, $mensagem);
fclose($fa);
?>