pcodigo2web/workspace/avaliador/gerartreinotestepontuados.php

189 lines
3.9 KiB
PHP
Executable File

<?php
// Este script gera o arquivo treinopontuado.csv e o testenaopontuado.csv. O arquivo treinopontuado contém as amostras que o professor corrigiu. O testenaopontuado.csv contem as amostras não pontuadas pelo professor.
// Diretorios de entradas
$diretorioentrada = "arquivospredicao/";
$diretorioind = "indexados/";
// Para cada questao
$ponteiro1 = opendir($diretorioentrada);
// Para cada subdiretorio de submissoes (isto é, as tarefas), verifique se diretorio da questao já foi normalizado. Se não, envia
// endereço do diretorio para ser normalizado
while (($nomequestao = readdir($ponteiro1)))
{
if (($nomequestao<>".") && ($nomequestao<>".."))
{
$diretorio = $diretorioentrada.$nomequestao."/";
// Endereço do arquivo com notas de treino
$enderecontreino=$diretorio."notastreino.csv";
// Endereço do arquivo com notas de teste
$endereconteste=$diretorio."notasteste.csv";
// O arquivo results conterá o resultado se arquivos com notas de treino foi gerado 0=não foi; 1=foi.
$arq0 = $diretorio."results.csv";
$f0= fopen($arq0,'w');
// Se existe o arquivo com notas de treino
// Carregar o arquivo notastreino.csv . Esse arquivo está no formato "nomeamostra;nota".
if (file_exists($enderecontreino))
{
// Carregar arquivos de entrada: rotulos do treino e teste, arquivos treino.csv e teste.csv
$tr = file($diretorioind.$nomequestao."/treino.csv");
$te = file($diretorioind.$nomequestao."/teste.csv");
$ltr= file($diretorioind.$nomequestao."/ltreino.csv");
$lte= file($diretorioind.$nomequestao."/lteste.csv");
$ntr = file($enderecontreino);
$nte= file($endereconteste);
// Abrir os arquivos de saida
$arq1=$diretorio."treinopontuado.csv";
$arq2=$diretorio."testepontuado.csv";
$arq3=$diretorio."ltestesnaopontuados.csv";
$f1= fopen($arq1,'w');
$f2= fopen($arq2,'w');
$f3= fopen($arq3,'w');
// Número de amostras pontuadas
$nap = count($ntr);
// Até o tamanho k de ltreino.csv, mescla a coluna de notas com as colunas de treino.csv
$k = count($ltr);
$i=0;
// Grava a primeira linha de treinopontuado.csv
$primeiralinha="nota;".$tr[0];
fwrite($f1, $primeiralinha);
// Para cada linha, grava nota da amostra e o seu vetor de características
for($i=0;$i<$k;$i++)
{
$vn= explode(";",$ntr[$i]);
$valornota=trim($vn[1]);
$linha= $tr[$i + 1];
fwrite($f1, $valornota.";".$linha);
unset($vn);
}
// Numero de amostras de testes
$nteste= count($lte);
// Após o tamanho k, verifica a posição j do rótulo no arquivo lteste.csv. Copia a posição p+1 de teste.csv e mescla
// com a nota corrente do notastreino.csv
for($j=$i;$j<$nap;$j++)
{
$vn = explode(";",$ntr[$j]);
$rotulo = $vn[0]."\n";
$valornota=trim($vn[1]);
$p= array_search($rotulo,$lte);
if ($p>=0 && $p<$nteste)
{
// Grava a nota e o vetor no arquivo de treinopontuado
$linha= $te[$p + 1];
fwrite($f1, $valornota.";".$te[$p + 1]);
// Apaga a linha P da matriz de lteste.csv e a linha P+1 da matriz de teste.csv
unset($lte[$p]);
unset($te[$p+1]);
// Reordena indices
$lte=array_values($lte);
$te = array_values($te);
}
unset($vn);
}
// Para cada item da matriz de teste.csv, grave nota (0.0) e a linha correspondente dessa matriz, gerando testenaopontuado.csv
// Grava a primeira linha de testenaopontuado.csv
$primeiralinha="nota;".$te[0];
fwrite($f2,$primeiralinha);
$tte=count($te);
for($i=0;$i<$nteste;$i++)
{
$vn= explode(";",$nte[$i]);
$notareal=trim($vn[1]);
$linha= $notareal.";".$te[$i + 1];
fwrite($f2, $linha);
fwrite($f3, $lte[$i]);
}
// Fechar arquivos
fclose($f1);
fclose($f2);
fclose($f3);
// Esvaziar memórias
unset($tr);
unset($te);
unset($ltr);
unset($lte);
unset($ntr);
unset($nte);
fwrite($f0,"1");
} // Do if para verificar se já existem as notas de treino
else
{
fwrite($f0,"0");
}
// Fechar arquivo com resultado de geração de saida
fclose($f0);
} // do if
} // Do while
?>