pcodigo2web/workspace/avaliador/selecao.php

165 lines
3.7 KiB
PHP
Executable File

<?php
// Este script recebe como entradas as variaveis de avaliacao, as matrizes de indexação e gera como saídas, essas matrizes divididas em treino e teste já com os seus cabeçalhos para processamento para atribuição de notas pelo professor.
// Diretorio com arquivos de selecao e de indexacao
$diretorioindexacao = "indexados/";
$arquivovariaveis = "arquivosindexacao/tokens.clabel";
// Funcao para carregar arquivo com matriz de indexacao e separar entre treino e teste
function selecionartreinoteste($matrizindexada, $listavariaveis)
{
// Esta função tem como entrada o diretorio de origem da matriz indexada, as variaveis de avaliação
// A saida é ua matriz de treino e outra de teste
// Obter diretorio da matrizindexada
$diretoriodestino= dirname($matrizindexada);
$diretoriodestino= $diretoriodestino."/";
// Carregar matriz indexada, variaveis
$matriz = file($matrizindexada);
$variaveis = file($listavariaveis);
// Abrir arquivos de treino e teste
$arqtreino= $diretoriodestino."treino.csv";
$arqteste= $diretoriodestino."teste.csv";
$ftr= fopen($arqtreino,'w');
$fte= fopen($arqteste,'w');
// Grava os cabeçalhos de treino e teste a partir da lista de variaveis
foreach ($variaveis as $x)
{
$k = trim($x);
fwrite($ftr, $k.";");
fwrite($fte, $k.";");
}
fwrite($ftr, "\n");
fwrite($fte, "\n");
// Retira a primeira linha da matriz (pois contem informações de numero de linhas e de colunas) e reindexa a matriz
unset($matriz[0]);
$matriz=array_values($matriz);
// Calcular 2/3 da matriz indexada (tirando a primeira linha)
$nitens = count($matriz);
$tamanhotreino = round(2*$nitens/3);
// Escolhe randomicamente os "tamanhotreino" da matriz
// Para i de 1 ate tamanhotreino
for($i=0;$i<$tamanhotreino;$i++)
{
// Sorteia valor um item da matriz
$vs = array_rand($matriz, 1);
// Grava linha sorteada da matriz no treino
$linha= str_replace(' ', ';', $matriz[$vs]);
fwrite($ftr, $linha);
// Remove a linha que foi sorteada da matriz para não ser sorteada de novo
unset($matriz[$vs]);
// Redefine os indices
$matriz=array_values($matriz);
}
// Grava a matriz que sobrou como teste
foreach ($matriz as $l)
{
$lin= str_replace(' ', ';', $l);
fwrite($fte, $lin);
}
// Liberar matrizes
unset($matriz);
unset($variaveis);
fclose($ftr);
fclose($fte);// Para cada tarefa
} // Fim da função
// Para cada tarefa, obter matrizindexada
// Entrar no diretorio de indexacao
$ponteiro1 = opendir($diretorioindexacao);
if ((file_exists($diretorioindexacao)))
{
// Para cada diretorio de tarefa
while (($nometarefa = readdir($ponteiro1)))
{
if (($nometarefa<>".") && ($nometarefa<>".."))
{
$dirtarefa= $diretorioindexacao.$nometarefa."/";
// Localizar o arquivo com a matriz indexada
$ponteiro2 = opendir($dirtarefa);
$achou=false;
while($achou==false && ($arquivolido = readdir($ponteiro2)) )
{
if (($arquivolido<>".") && ($arquivolido<>".."))
{
$vetnomearq = explode("_",$arquivolido);
if (strcmp($vetnomearq[0], "matrizindexada") == 0)
{
$arquivomatrizindexada=$dirtarefa.$arquivolido;
$achou=true;
}
unset($vetnomearq);
}
}
if ((file_exists($arquivomatrizindexada)))
{
selecionartreinoteste($arquivomatrizindexada, $arquivovariaveis);
}
}
}
} // fim do if para verificar se existe diretorio de indexacao
?>