pcodigo2web/workspace/avaliador/gerarmatrizesreduzidas.php

166 lines
5.6 KiB
PHP
Executable File

<?php
// Este script gera as matrizes de indexação reduzidas. As entradas são, de cada base, os arquivos caracteristicasreduzidas.csv e matrizindexada.txt. As saídas são, para cada base, a matriz de indexação reduzida para cada cluster.
// Diretório de origem
$diretorioentrada = "indexados/";
// Para cada base em indexados
$ponteiro1 = opendir($diretorioentrada);
// Para cada subdiretorio do diretorio de entrada
while (($nomequestao = readdir($ponteiro1)))
{
if (($nomequestao<>".") && ($nomequestao<>".."))
{
$diretorio = $diretorioentrada.$nomequestao."/";
// Carregar lista de caracteristicas de cada cluster
$arquivocaracteristicas=$diretorio."caracteristicasdescritivas.csv";
if (file_exists($arquivocaracteristicas))
{
$listacaracteristicas = file($arquivocaracteristicas);
$diretorioclusters = $diretorio."clusters/";
$ponteiro2 = opendir($diretorioclusters);
// Para cada subdiretorio do diretorio clusters
while (($nomecluster = readdir($ponteiro2)))
{
if (($nomecluster<>".") && ($nomecluster<>"..") && ($nomecluster<>"rd"))
{
// Obter linha das caracteristicas do cluster
$numcluster = trim($nomecluster);
$linhacaracteristicascluster= trim($listacaracteristicas[$numcluster]);
$vcaracteristicascluster=explode(" ", $linhacaracteristicascluster);
// Carregar matriz de indexacao do cluster
$nomematriz=$diretorioclusters.$nomecluster."/matriz.txt";
$matriz = file($nomematriz);
$tamanhomatriz = count($matriz);
// Obter primeira linha da matriz, que contém as caracteristicas originais
$primeiralinha = trim($matriz[0]);
$primeiralinhaemvetor = explode(";",$primeiralinha);
$indicescaracteristicas = array();
// Obter indices das caracteristicas no vetor de caracteristicas original
$i=0;
foreach ($vcaracteristicascluster as $c)
{
$indicescaracteristicas[$i]=array_search($c, $primeiralinhaemvetor);
$i=$i + 1;
}
$tamlc = count($indicescaracteristicas);
$t = $tamlc - 1;
$tm = $tamanhomatriz -1;
// Para matrizes com tamanho acima de 3, reduz o número de características a uma fração do número de amostras
//(Exemplo:2/3). A fracao está em arquivoselecao/fracaoselecao.csv
if ($tm>3)
{
$afracao = file("arquivosselecao/fracaoselecao.csv");
$af= explode("/",$afracao[0]);
$den=trim($af[1]);
if ($den>0)
{
$fracao=($af[0]/$den);
}
else
{
$fracao=0;
}
$t=round($tm*$fracao);
unset($af);
unset($afracao);
}
// Abrir matriz reduzida
$arqmr = $diretorioclusters.$nomecluster."/matrizreduzida.txt" ;
$fc= fopen($arqmr,'w');
// Gravar matriz reduzida
// Gravar primeira linha
for($m=0;$m<$t;$m++)
{
fwrite($fc, $vcaracteristicascluster[$m].";");
}
fwrite($fc,$vcaracteristicascluster[$m]."\n");
for($p=1;$p<$tamanhomatriz;$p++)
{
$mj = trim($matriz[$p]);
$linhamatriz = explode(" ", $mj);
for($k=0;$k<$t;$k++)
{
$indice= $indicescaracteristicas[$k];
$valor=$linhamatriz[$indice]." ";
fwrite($fc, $valor);
}
$indice = $indicescaracteristicas[$k];
$valor=$linhamatriz[$indice]."\n";
fwrite($fc,$valor);
unset($linhamatriz);
}
fclose($fc);
unset($indicescaracteristicas);
unset($vcaracteristicascluster);
unset($primeiralinhaemvetor);
unset($matriz);
}
}
unset($listacaracteristicas);
}
}
}
?>