pcodigo2web/workspace/avaliador/indexarbase.php

145 lines
3.6 KiB
PHP
Executable File

<?php
// Código para indexar arquivos de programas de computador.
// Entrada: Subdiretorios com tarefas. Cada tarefa contém um conjunto de arquivos normalizados
// Saída> Matriz de indexação para cada tarefa
// Autor: Márcia Gonçalves de Oliveira
// Data: 27/05/2011. Modificado em: 11/07/2013
$diretorioexp = "arquivosindexacao/";
function indexartarefa($diretorioorigem, $diretoriodestino, $lista)
{
// Esta função recebe como entrada todas as tarefas normalizadas
// Obter identificador da tarefa e cria diretorio correspondente para gerar os arquivos .rlabel e matriz indexada da tarefa
$idtarefa = basename($diretorioorigem);
$dirtarefaindexada = $diretoriodestino.$idtarefa."/";
if (!(file_exists($dirtarefaindexada)))
{
mkdir($dirtarefaindexada);
}
// Arquivos .rlabel e matrizindexada para cada tarefa a serem gerados para cada tarefa
$tarefaindexada=$dirtarefaindexada."matrizindexada_".$idtarefa.".txt";
$arqrlabel = $dirtarefaindexada.$idtarefa.".rlabel";
$fi= fopen($tarefaindexada,'w');
$fr= fopen($arqrlabel,'w');
$point = opendir($diretorioorigem);
$vetarqs=array();
$i=0;
while($arquivolido = readdir($point))
{
if (($arquivolido<>".") && ($arquivolido<>".."))
{
$vetarqs[$i]=trim($arquivolido);
$i=$i + 1;
}
}
// Gravar numero de linhas e de colunas na matriz de indexação
$nlinhas=count($vetarqs);
$ncolunas= count($lista);
fwrite($fi,$nlinhas." ".$ncolunas."\n");
foreach ($vetarqs as $linha)
{
$aq = $diretorioorigem."/".$linha;
$fp = fopen($aq,'r');
$copiaarq = fread($fp, (filesize($aq) + 1));
$copiaarq = strtoupper(trim($copiaarq));
fclose($fp);
// Para cada linha da lista de termos de indexação, contar a frequencia
// e Gerar vetor de indexação
$vetfreqtermos=array();
$j=0;
foreach ($lista as $termo)
{
$token= strtoupper(trim($termo));
$vetfreqtermos[$j]=substr_count($copiaarq, $token);
$j=$j+1;
}
// Grava questao do aluno no arquivo .rlabel
$questao= substr($linha, 0, -4);
fwrite($fr,$questao."\n");
// Gravar vetor na matriz de indexacao
$repvetor= trim(implode(" ", $vetfreqtermos));
fwrite($fi,$repvetor."\n");
unset($vetfreqtermos);
}
unset($vetarqs);
fclose($fi);
fclose($fr);
} /* Fim da função */
// Entrar no diretorio submissoes
// Ler os arquivos dos diretorio de tarefas
// Gerar no diretorio indexados, as matrizes de indexação de cada tarefa
// Carregar arquivos com palavras e simbolos reservados
$palavras = file($diretorioexp."tokens.csv");
// Diretorio de entrada
$diretoriotarefas= "normalizados/";
// Diretório de saida
$dirindexacao = "indexados/";
// Para cada tarefa
// Entrar no diretorio
$ponteiro1 = opendir($diretoriotarefas);
if (!(file_exists($dirindexacao)))
{
mkdir($dirindexacao);
}
// 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 (($nometarefa = readdir($ponteiro1)))
{
if (($nometarefa<>".") && ($nometarefa<>".."))
{
$dirtarefa= $diretoriotarefas.$nometarefa;
indexartarefa($dirtarefa, $dirindexacao, $palavras);
}
}
unset($palavras);
?>