PageRenderTime 53ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/netfoil/index.php

http://netfoil.googlecode.com/
PHP | 1057 lines | 953 code | 43 blank | 61 comment | 120 complexity | 11549c226040c83822a17bf085b3b162 MD5 | raw file
  1. <?php
  2. error_reporting(E_ERROR);
  3. function preparaString($inputTiposConstantes, $inputConceitoAlvo, $inputBK, $inputTeste) {
  4. /*Pegando os Tipos e as Constantes*/
  5. $inputTiposConstantes = str_replace("\r\n", "\n", $inputTiposConstantes);
  6. $inputTiposConstantes = preg_replace("/\\n{2,}/", "\n", $inputTiposConstantes);
  7. $inputTiposConstantes = preg_replace("/\\n*$/", "", $inputTiposConstantes);
  8. $inputTiposConstantes .="\n\n";
  9. /*Pegando o conceito alvo e os exemplos*/
  10. $inputConceitoAlvo = str_replace("\r\n", "\n", $inputConceitoAlvo);
  11. $inputConceitoAlvo = preg_replace("/\\n{2,}/", "\n", $inputConceitoAlvo);
  12. $inputConceitoAlvo = preg_replace("/\\n*$/", "", $inputConceitoAlvo);
  13. $inputConceitoAlvo .="\n";
  14. $inputConceitoAlvo = explode("\n.\n", $inputConceitoAlvo);
  15. for ($nRelacao = 0; $nRelacao < (sizeof($inputConceitoAlvo)-1); $nRelacao++ ){
  16. /*Separando exemplos para dividir em 2/3 - 1/3*/
  17. $resultado = separaExemplos($inputConceitoAlvo[$nRelacao]);
  18. $relacoes[$nRelacao] = $resultado['relacao'];
  19. $exemplosPos[$nRelacao] = $resultado['exemplosPos'];
  20. $exemplosNeg[$nRelacao] = $resultado['exemplosNeg'];
  21. }
  22. /*Pegando o conhecimento Preliminar BK*/
  23. $inputBK = str_replace("\r\n", "\n", $inputBK);
  24. $inputBK = preg_replace("/\\n{2,}/", "\n", $inputBK);
  25. $inputBK = preg_replace("/\\n*$/", "", $inputBK);
  26. $inputBK .="\n";
  27. /*Verificando qual a Running Option selecionada*/
  28. if ($inputTeste != "") {
  29. /*Pegando Exemplos de Teste*/
  30. $inputTeste = "\n" . str_replace("\r\n", "\n", $inputTeste);
  31. $inputTeste = preg_replace("/\\n{2,}/", "\n", $inputTeste);
  32. $inputTeste = preg_replace("/\\n*$/", "", $inputTeste);
  33. $strTesteSeparada = explode("\n.\n", $inputTeste);
  34. for ($nRelacao = 0; $nRelacao < sizeof($strTesteSeparada); $nRelacao++) {
  35. $exemplos = preg_match_all("/(\+|\-)/", $strTesteSeparada[$nRelacao], $vetorExemplosTeste);
  36. if ($exemplos) {
  37. $totalPositivo[$nRelacao] = 0;
  38. $totalNegativo[$nRelacao] = 0;
  39. foreach($vetorExemplosTeste[0] as $exemploTeste) {
  40. if ($exemploTeste == "+") {
  41. $totalPositivo[$nRelacao] ++;
  42. }
  43. else {
  44. $totalNegativo[$nRelacao] ++;
  45. }
  46. }
  47. }
  48. }
  49. }
  50. else {
  51. $totalPositivo = 0;
  52. $totalNegativo = 0;
  53. }
  54. return array('tipos' => $inputTiposConstantes, 'relacoes' => $relacoes, 'exemplosPos' => $exemplosPos, 'exemplosNeg' => $exemplosNeg, 'bk' => $inputBK, 'teste' => $inputTeste, 'testePos' => $totalPositivo, 'testeNeg' => $totalNegativo);
  55. }
  56. function separaExemplos($strConceitoAlvoSeparada) {
  57. $exemplosDivididos = explode("\n;\n", $strConceitoAlvoSeparada);
  58. $tempRelacaoExemplosPos = explode(")\n", $exemplosDivididos[0]);
  59. $relacao = $tempRelacaoExemplosPos[0] . ")";
  60. $exemplosPos = explode("\n", $tempRelacaoExemplosPos[1]);
  61. $exemplosNeg = explode("\n", $exemplosDivididos[1]);
  62. $resultado['relacao'] = $relacao;
  63. $resultado['exemplosPos'] = $exemplosPos;
  64. $resultado['exemplosNeg'] = $exemplosNeg;
  65. return $resultado;
  66. }
  67. function construirStrConceitoAlvo($relacoes, $exemplosPos, $exemplosNeg) {
  68. $inputConceitoAlvo = "";
  69. for ($nRelacao = 0; $nRelacao < sizeof($relacoes); $nRelacao++) {
  70. /*Colocando a relacao novamente*/
  71. $inputConceitoAlvo .= $relacoes[$nRelacao] . "\n";
  72. /*Colocando Exemplos Positivos*/
  73. $inputConceitoAlvo .= implode("\n", $exemplosPos[$nRelacao]) . "\n";
  74. /*Colocando ";" caso haja negativos*/
  75. if (sizeof($exemplosNeg) > 0) {
  76. $inputConceitoAlvo .= ";\n";
  77. }
  78. /*Colocando Exemplos Negativos*/
  79. $inputConceitoAlvo .= implode("\n", $exemplosNeg[$nRelacao]) . "\n";
  80. $inputConceitoAlvo .= ".\n";
  81. }
  82. return $inputConceitoAlvo;
  83. }
  84. function construirTesteHoldout($relacoes, $exemplosPos, $exemplosNeg) {
  85. /*Colocando uma linha em branco entre o BK e os Exemplos de Teste*/
  86. $strTeste = "\n";
  87. foreach ($relacoes as $numRelacao => $relacao){
  88. shuffle($exemplosPos[$numRelacao]);
  89. shuffle($exemplosNeg[$numRelacao]);
  90. $totalTestePos[$numRelacao] = intval(sizeof($exemplosPos[$numRelacao])/3);
  91. $totalTesteNeg[$numRelacao] = intval(sizeof($exemplosNeg[$numRelacao])/3);
  92. $vetorRelacaoTemp = explode("(", $relacao);
  93. $strTeste .= $vetorRelacaoTemp[0] . "\n";
  94. for ($i = 0; $i < $totalTestePos[$numRelacao]; $i++) {
  95. $strTeste .= array_pop($exemplosPos[$numRelacao]) . ": +\n";
  96. }
  97. for ($i = 0; $i < $totalTesteNeg[$numRelacao]; $i++) {
  98. $strTeste .= array_pop($exemplosNeg[$numRelacao]) . ": -\n";
  99. }
  100. $strTeste .= ".\n";
  101. }
  102. $strTeste = preg_replace("/\\n$/", "", $strTeste);
  103. return array('exemplosPos' => $exemplosPos, 'exemplosNeg' => $exemplosNeg, 'strTeste' => $strTeste, 'testeNeg' => $totalTesteNeg, 'testePos' => $totalTestePos);
  104. }
  105. function construirTesteKFold($relacoes, $exemplosPos, $exemplosNeg, $k, $kAtual, $arrayPosNeg, $leaveOneOut = false) {
  106. $strTeste = "\n";
  107. foreach ($relacoes as $numRelacao => $relacao){
  108. $totalExemplos = sizeof($arrayPosNeg[$numRelacao]);
  109. if ($kAtual < ($k-1) || $leaveOneOut) {
  110. $tamanhoFold[$numRelacao] = intval($totalExemplos / $k);
  111. $offset = $tamanhoFold[$numRelacao] * $kAtual;
  112. }
  113. else {
  114. $tamanhoFold[$numRelacao] = intval($totalExemplos / $k);
  115. $offset = $tamanhoFold[$numRelacao] * $kAtual;
  116. $tamanhoFold[$numRelacao] = intval($totalExemplos / $k) + ($totalExemplos % $k);
  117. }
  118. $vetorRelacaoTemp = explode("(", $relacao);
  119. $strTeste .= $vetorRelacaoTemp[0] . "\n";
  120. $totalTesteNeg[$numRelacao] = 0;
  121. $totalTestePos[$numRelacao] = 0;
  122. for ($i = $offset; $i < ($tamanhoFold[$numRelacao] + $offset); $i++) {
  123. if ($arrayPosNeg[$numRelacao][$i]['tipo'] == '+') {
  124. unset($exemplosPos[$numRelacao][$arrayPosNeg[$numRelacao][$i]['indice']]);
  125. $strTeste .= $arrayPosNeg[$numRelacao][$i]['exemplo'] . ": +\n";
  126. $totalTestePos[$numRelacao]++;
  127. }
  128. else {
  129. unset($exemplosNeg[$numRelacao][$arrayPosNeg[$numRelacao][$i]['indice']]);
  130. $strTeste .= $arrayPosNeg[$numRelacao][$i]['exemplo'] . ": -\n";
  131. $totalTesteNeg[$numRelacao]++;
  132. }
  133. }
  134. $strTeste .= ".\n";
  135. }
  136. $strTeste = preg_replace("/\\n$/", "", $strTeste);
  137. return array('exemplosPos' => $exemplosPos, 'exemplosNeg' => $exemplosNeg, 'strTeste' => $strTeste, 'testeNeg' => $totalTesteNeg, 'testePos' => $totalTestePos);
  138. }
  139. function executaFoil($arrayArquivo) {
  140. $strArquivo = $arrayArquivo['tipos'];
  141. $strArquivo .= construirStrConceitoAlvo($arrayArquivo['relacoes'], $arrayArquivo['exemplosPos'], $arrayArquivo['exemplosNeg']);
  142. $strArquivo .= $arrayArquivo['bk'];
  143. $strArquivo .= $arrayArquivo['teste'];
  144. if ($strArquivo != "") {
  145. $strArquivo.="\n";
  146. $arquivo = fopen('./foil/arquivo_entrada.d', 'wb');
  147. fwrite($arquivo, $strArquivo);
  148. fclose($arquivo);
  149. }
  150. else {
  151. escreveErro("VocЖ nсo digitou nenhuma entrada!");
  152. die();
  153. }
  154. $chamada_FOIL = "./foil/foil6";
  155. $parametros = "";
  156. $arquivoEntrada = "./foil/arquivo_entrada.d";
  157. $parametros = trataParametros();
  158. if ($parametros != "erro") {
  159. $chamadaCompleta = $chamada_FOIL . $parametros . " <" . $arquivoEntrada;
  160. $output_FOIL = shell_exec($chamadaCompleta);
  161. $output_FOIL = str_replace("\n", "<br/>", $output_FOIL);
  162. unlink($arquivoEntrada);
  163. }
  164. if ($output_FOIL != "") {
  165. /*Pegando o numero de exemplos de teste positivos e negativos*/
  166. $totalTestePos = $arrayArquivo['testePos'];
  167. $totalTesteNeg = $arrayArquivo['testeNeg'];
  168. /*Pegando resposta do Teste para calcular medidas de Performance*/
  169. $testeRealizado = preg_match_all("/Test relation.*Summary: [0-9]* (errors|error) in [0-9]* (trials|trial)/", $output_FOIL, $vetorResultadoTestes);
  170. if ($testeRealizado) {
  171. $testesRelacoes = explode("<br/><br/>",$vetorResultadoTestes[0][0]);
  172. $i = 0;
  173. foreach($testesRelacoes as $testeRelacao) {
  174. $negativoFalso = 0;
  175. $positivoFalso = 0;
  176. /*Calculando a Acurрcia*/
  177. preg_match_all("/Summary: ([0-9]*) (errors|error) in ([0-9]*) (trials|trial)/", $testeRelacao, $vetorAcuracia);
  178. $acertos = $vetorAcuracia[3][0] - $vetorAcuracia[1][0];
  179. $total = $vetorAcuracia[3][0];
  180. $acuracia = $acertos / $total;
  181. /*Pegando o numero de erros por classe (+ e -)*/
  182. $falhas = preg_match_all("/(\+|\-)/", $testeRelacao, $vetorErrosTeste);
  183. if ($falhas) {
  184. foreach($vetorErrosTeste[0] as $erroExemplo) {
  185. if ($erroExemplo == "+") {
  186. $negativoFalso ++;
  187. }
  188. else {
  189. $positivoFalso ++;
  190. }
  191. }
  192. }
  193. $positivosVerdadeiros = $totalTestePos[$i] - $negativoFalso;
  194. /*Calculando Sensibilidade*/
  195. if ($totalTestePos[$i] != 0) {
  196. $sensibilidade = $positivosVerdadeiros/$totalTestePos[$i];
  197. $strSensibilidade = "Sensibilidade: " . number_format($sensibilidade, 3, ",", ".");
  198. }
  199. else {
  200. $strSensibilidade = "Nсo ж possьvel calcular a Sensibilidade.";
  201. }
  202. /*Calculando Especificidade*/
  203. if ($totalTesteNeg[$i] != 0) {
  204. $especificidade = ($totalTesteNeg[$i] - $positivoFalso)/$totalTesteNeg[$i];
  205. $strEspecificidade = "Especificidade: " . number_format($especificidade, 3, ",", ".");
  206. }
  207. else {
  208. $strEspecificidade = "Nсo ж possьvel calcular a Especificidade.";
  209. }
  210. /*Calculando Precisao*/
  211. if ($positivosVerdadeiros + $positivoFalso != 0) {
  212. $precisao = $positivosVerdadeiros/($positivosVerdadeiros + $positivoFalso);
  213. $strPrecisao = "Precisсo: " . number_format($precisao, 3, ",", ".");
  214. }
  215. else {
  216. $strPrecisao = "Nсo ж possьvel calcular a Precisсo.";
  217. }
  218. $output_FOIL = str_replace($testeRelacao, $testeRelacao . "<br /> Total de Positivos de Teste: " . $totalTestePos[$i] .
  219. "<br /> Total de Negativos de Teste: " . $totalTesteNeg[$i] .
  220. "<br /> NЩmero de Positivos Falsos: " . $positivoFalso .
  221. "<br /> NЩmero de Negativos Falsos: " . $negativoFalso .
  222. "<br/ > Acurрcia: " . number_format($acuracia, 3, ",", ".") .
  223. "<br/ >" . $strSensibilidade .
  224. "<br/ >" . $strEspecificidade .
  225. "<br/ >" . $strPrecisao , $output_FOIL);
  226. $i++;
  227. }
  228. }
  229. /*$output_FOIL = str_replace("tuples that are both positive and negative", "tuplas que sсo tanto positivas quanto negativas", $output_FOIL);
  230. $output_FOIL = str_replace("Options", "Opушes Selecionadas", $output_FOIL);
  231. $output_FOIL = str_replace("verbosity level", "Nьvel de detalhamento da Saьda - ", $output_FOIL);
  232. $output_FOIL = str_replace("minimum clause accuracy", "Acurрcia Mьnima - ", $output_FOIL);
  233. $output_FOIL = str_replace("no negated literals", "Literais negados nсo utilizados", $output_FOIL);
  234. $output_FOIL = str_replace("negated literals only for =, > relations", "Literais negados : Apenas relaушes de Diferenуa", $output_FOIL);
  235. $output_FOIL = str_replace("allow up to", "Permitir atж", $output_FOIL);
  236. $output_FOIL = str_replace("variables", "variрvel(s)", $output_FOIL);
  237. $output_FOIL = str_replace("or use smaller sample of negative tuples", "ou use uma amostra menor de tuplas negativas", $output_FOIL);
  238. $output_FOIL = str_replace("sample", "Utilizando uma amostra de", $output_FOIL);
  239. $output_FOIL = str_replace("of negative tuples", "de tuplas negativas", $output_FOIL);
  240. $output_FOIL = str_replace("maximum variable depth", "Profundidade mрxima das variрveis - ", $output_FOIL);
  241. $output_FOIL = str_replace("maximum", "Mрximo de", $output_FOIL);
  242. $output_FOIL = str_replace("consecutive weak literals", "literais fracos consecutivos", $output_FOIL);
  243. $output_FOIL = str_replace("backups from one literal", "backups de um literal", $output_FOIL);
  244. $output_FOIL = str_replace("total backups", "backups totais", $output_FOIL);
  245. $output_FOIL = str_replace("backed-up literals have", "Literais alternativos tem", $output_FOIL);
  246. $output_FOIL = str_replace("of best gain", "de melhor ganho", $output_FOIL);
  247. $output_FOIL = str_replace("use determinate literals when gain <=", "Use literais determinantes quando ganho <=", $output_FOIL);
  248. $output_FOIL = str_replace("possible", "possьvel", $output_FOIL);
  249. $output_FOIL = str_replace("Relation", "Relaусo", $output_FOIL);
  250. $output_FOIL = str_replace("[January 1996]", "", $output_FOIL);
  251. $output_FOIL = str_replace("Time", "Tempo", $output_FOIL);
  252. $output_FOIL = str_replace("secs", "segundos", $output_FOIL);
  253. $output_FOIL = str_replace("Training Set Size will exceed tuple limit", "O tamanho do conjunto de treinamento excede o limite do nЩmero de Tuplas", $output_FOIL);
  254. $output_FOIL = str_replace("Rerun with larger", "Rode novamente com um nЩmero maior de", $output_FOIL);
  255. $output_FOIL = str_replace("to proceed further", "para prosseguir", $output_FOIL);
  256. $output_FOIL = str_replace("negative tuples", "tuplas negativas", $output_FOIL);
  257. $output_FOIL = str_replace("positive tuples", "tuplas positivas", $output_FOIL);
  258. $output_FOIL = str_replace("negative tuple", "tupla negativa", $output_FOIL);
  259. $output_FOIL = str_replace("positive tuple", "tupla positiva", $output_FOIL);
  260. $output_FOIL = str_replace("warning", "Aviso", $output_FOIL);
  261. $output_FOIL = str_replace("contains", "Contжm", $output_FOIL);
  262. $output_FOIL = str_replace("duplicate", "duplicatas de", $output_FOIL);
  263. $output_FOIL = str_replace("tuples", "tuplas", $output_FOIL);
  264. $output_FOIL = str_replace("Test relation", "Teste da Relaусo", $output_FOIL);
  265. $output_FOIL = str_replace("Summary", "Resumo", $output_FOIL);
  266. $output_FOIL = str_replace("error in", "classificaусo errada num total de", $output_FOIL);
  267. $output_FOIL = str_replace("trials", "exemplos de teste", $output_FOIL);
  268. $output_FOIL = str_replace("Warning: the following definition", "Aviso: Esta definiусo", $output_FOIL);
  269. $output_FOIL = str_replace("does not cover", "nсo cobre", $output_FOIL);
  270. $output_FOIL = str_replace("in the relation", "na relaусo", $output_FOIL);*/
  271. return $output_FOIL;
  272. }
  273. else {
  274. escreveErro("Xi... Um erro desconhecido aconteceu...");
  275. die();
  276. }
  277. }
  278. function escreveErro($erro) {
  279. ?>
  280. <h2 class="tituloErro">Opa! Um erro ocorreu...</h2>
  281. <div class="divErro">
  282. <p>
  283. <?php echo $erro;?>
  284. </p>
  285. <p>
  286. Por favor, <a href="/netfoil" class="aCorpo">volte e tente novamente!</a>
  287. </p>
  288. </div>
  289. <?php
  290. }
  291. function trataParametros() {
  292. $parametros = "";
  293. switch($_POST['selectClausulasNegativas']) {
  294. case 'sim':
  295. break;
  296. case 'diferenca':
  297. $parametros .= ' -N';
  298. break;
  299. case 'nao':
  300. $parametros .= ' -n';
  301. break;
  302. }
  303. $parametros .= ' -v' . $_POST['selectVerbosityLevel'];
  304. if ($_POST['inputNumeroVariaveis'] != "") {
  305. if (is_numeric($_POST['inputNumeroVariaveis'])) {
  306. $parametros .= ' -V' . $_POST['inputNumeroVariaveis'];
  307. }
  308. else {
  309. escreveErro("O NЩmero Mрximo de Variрveis estр incorreto.");
  310. return "erro";
  311. }
  312. }
  313. if ($_POST['inputPorcentagemClausulasNegativas'] != "") {
  314. if (is_numeric($_POST['inputPorcentagemClausulasNegativas']) && $_POST['inputPorcentagemClausulasNegativas'] >= 0 && $_POST['inputPorcentagemClausulasNegativas'] <= 100) {
  315. $parametros .= ' -s' . $_POST['inputPorcentagemClausulasNegativas'];
  316. }
  317. else {
  318. escreveErro("A Porcentagem de Clрusulas Negativas deve ser um valor entre 0 e 100.");
  319. return "erro";
  320. }
  321. }
  322. if ($_POST['inputNumeroTuplas'] != "") {
  323. if (is_numeric($_POST['inputNumeroTuplas'])) {
  324. $parametros .= ' -m' . $_POST['inputNumeroTuplas'];
  325. }
  326. else {
  327. escreveErro("O NЩmero Mрximo de Tuplas estр incorreto.");
  328. return "erro";
  329. }
  330. }
  331. if ($_POST['inputLimiteProfundidade'] != "") {
  332. if (is_numeric($_POST['inputLimiteProfundidade'])) {
  333. $parametros .= ' -d' . $_POST['inputLimiteProfundidade'];
  334. }
  335. else {
  336. escreveErro("O Limite Mрximo de Profundidade das Variрveis estр incorreto.");
  337. return "erro";
  338. }
  339. }
  340. if ($_POST['inputLiteraisFracos'] != "") {
  341. if (is_numeric($_POST['inputLiteraisFracos'])) {
  342. $parametros .= ' -w' . $_POST['inputLiteraisFracos'];
  343. }
  344. else {
  345. escreveErro("O Tamanho Mрximo da SeqЧencia de Literais Fracos estр incorreto.");
  346. return "erro";
  347. }
  348. }
  349. if ($_POST['inputAcuraciaMinima'] != "") {
  350. if (is_numeric($_POST['inputAcuraciaMinima']) && $_POST['inputAcuraciaMinima'] >= 0 && $_POST['inputAcuraciaMinima'] <= 100) {
  351. $parametros .= ' -a' . $_POST['inputAcuraciaMinima'];
  352. }
  353. else {
  354. escreveErro("A Acurрcia Mьnima deve ser um valor entre 0 e 100.");
  355. return "erro";
  356. }
  357. }
  358. if ($_POST['inputLimiteAlternativas'] != "") {
  359. if (is_numeric($_POST['inputLimiteAlternativas'])) {
  360. $parametros .= ' -l' . $_POST['inputLimiteAlternativas'];
  361. }
  362. else {
  363. escreveErro("O Limite de Alternativas estр incorreto.");
  364. return "erro";
  365. }
  366. }
  367. if ($_POST['inputLimiteCheckpoints'] != "") {
  368. if (is_numeric($_POST['inputLimiteCheckpoints'])) {
  369. $parametros .= ' -t' . $_POST['inputLimiteCheckpoints'];
  370. }
  371. else {
  372. escreveErro("O NЩmero Mрximo de Checkpoints estр incorreto.");
  373. return "erro";
  374. }
  375. }
  376. if ($_POST['inputGanhoMinimo'] != "") {
  377. if (is_numeric($_POST['inputGanhoMinimo']) && $_POST['inputGanhoMinimo'] >= 0 && $_POST['inputGanhoMinimo'] <= 100) {
  378. $parametros .= ' -f' . $_POST['inputGanhoMinimo'];
  379. }
  380. else {
  381. escreveErro("O Ganho Mьnimo deve ser um valor entre 0 e 100.");
  382. return "erro";
  383. }
  384. }
  385. if ($_POST['inputGanhoPossivel'] != "") {
  386. if (is_numeric($_POST['inputGanhoPossivel']) && $_POST['inputGanhoPossivel'] >= 0 && $_POST['inputGanhoPossivel'] <= 100) {
  387. $parametros .= ' -g' . $_POST['inputGanhoPossivel'];
  388. }
  389. else {
  390. escreveErro("A ┌ltima Opусo deve ser um valor entre 0 e 100.");
  391. return "erro";
  392. }
  393. }
  394. return $parametros;
  395. }
  396. ?>
  397. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  398. <html>
  399. <head>
  400. <meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
  401. <link href="./estilo.css" type="text/css" rel="stylesheet"/>
  402. <script type="text/javascript" src="./javascript.js"></script>
  403. <title>
  404. NetFoil - Um sistema de Aprendizado Online
  405. </title>
  406. </head>
  407. <body onload="javascript:inicio();">
  408. <div id="divSite">
  409. <div id="divCabecalho">
  410. <a href="/netfoil">
  411. <img src="./imagens/netfoilpequeno.png" alt="Logo NetFoil" title="NetFoil - Um sistema de Aprendizado Online" />
  412. </a>
  413. <h1>
  414. Sistema de Aprendizado Online
  415. </h1>
  416. </div>
  417. <div id="divPrincipal">
  418. <div id="divSuperior">
  419. </div>
  420. <div id="divCentral">
  421. <?php
  422. if ($_POST) {
  423. if ($_POST['radioInput'] == 'arquivo') {
  424. $arquivo = $_FILES['inputArquivo'];
  425. $arquivoTeste = $_FILES['inputArquivoTeste'];
  426. $strTipos = "";
  427. $strConceitoAlvo = "";
  428. $strBK = "";
  429. if ($arquivo['name'] != '' && $arquivo['size'] > 0) {
  430. move_uploaded_file($arquivo['tmp_name'], './foil/arquivo_temporario1.d');
  431. if($arquivoTemp = fopen('./foil/arquivo_temporario1.d', 'rb')) {
  432. $strTemp = fread($arquivoTemp, filesize('./foil/arquivo_temporario1.d'));
  433. fclose($arquivoTemp);
  434. unlink('./foil/arquivo_temporario1.d');
  435. }
  436. $arrayEntrada = explode("\n\n", $strTemp);
  437. $strTipos = $arrayEntrada[0];
  438. $arrayRelacoes = explode("\n.\n", $arrayEntrada[1]);
  439. array_pop($arrayRelacoes);
  440. foreach($arrayRelacoes as $relacao) {
  441. if (preg_match("/^\*.*/", $relacao)) {
  442. $strBK .= $relacao . "\n.\n";
  443. }
  444. else {
  445. $strConceitoAlvo .= $relacao . "\n.\n";
  446. }
  447. }
  448. }
  449. else {
  450. escreveErro("VocЖ nсo enviou nenhum arquivo!");
  451. die();
  452. }
  453. $strTeste = "";
  454. if ($_POST['inputDivisaoFolds'] == 'comexemplo') {
  455. if ($arquivoTeste['name'] != '' && $arquivoTeste['size'] > 0) {
  456. move_uploaded_file($arquivoTeste['tmp_name'], './foil/arquivo_temporario2.d');
  457. if($arquivoTemp = fopen('./foil/arquivo_temporario2.d', 'rb')) {
  458. $strTeste = fread($arquivoTemp, filesize('./foil/arquivo_temporario2.d'));
  459. fclose($arquivoTemp);
  460. unlink('./foil/arquivo_temporario2.d');
  461. }
  462. }
  463. else {
  464. escreveErro("VocЖ nсo enviou nenhum arquivo de teste!");
  465. die();
  466. }
  467. }
  468. $arrayArquivo = preparaString($strTipos, $strConceitoAlvo, $strBK, $strTeste);
  469. }
  470. else {
  471. //TODO Tirar enter do inicio da string
  472. if ($_POST['radioInput'] == 'manual') {
  473. $strTeste = isset($_POST['textareaInputManualTeste']) ? $_POST['textareaInputManualTeste'] : "";
  474. $arrayArquivo = preparaString($_POST['textareaInputManualTiposConstantes'], $_POST['textareaInputManualConceitoAlvo'], $_POST['textareaInputManualBK'], $strTeste);
  475. }
  476. }
  477. $divisaoFolds = $_POST['inputDivisaoFolds'];
  478. switch($divisaoFolds) {
  479. case "semexemplo":
  480. $output_FOIL = executaFoil($arrayArquivo);
  481. ?>
  482. <h1 class="tituloResultado">Resultado obtido</h1>
  483. <p class="pResultadoObtido">
  484. <?php echo $output_FOIL;?>
  485. </p>
  486. <?php
  487. break;
  488. case "comexemplo":
  489. $output_FOIL = executaFoil($arrayArquivo);
  490. ?>
  491. <h1 class="tituloResultado">Resultado obtido</h1>
  492. <p class="pResultadoObtido">
  493. <?php echo $output_FOIL;?>
  494. </p>
  495. <?php
  496. break;
  497. case "holdout":
  498. $resultado = construirTesteHoldout($arrayArquivo['relacoes'], $arrayArquivo['exemplosPos'], $arrayArquivo['exemplosNeg']);
  499. $arrayArquivo['exemplosPos'] = $resultado['exemplosPos'];
  500. $arrayArquivo['exemplosNeg'] = $resultado['exemplosNeg'];
  501. $arrayArquivo['teste'] = $resultado['strTeste'];
  502. $arrayArquivo['testeNeg'] = $resultado['testeNeg'];
  503. $arrayArquivo['testePos'] = $resultado['testePos'];
  504. $output_FOIL = executaFoil($arrayArquivo);
  505. ?>
  506. <h1 class="tituloResultado">Resultado obtido</h1>
  507. <p class="pResultadoObtido">
  508. <?php echo $output_FOIL;?>
  509. </p>
  510. <?php
  511. break;
  512. case "kfold":
  513. $k = $_POST['inputK'];
  514. if (!is_numeric($k) || $k <= 1) {
  515. escreveErro("Valor invрlido para K");
  516. die();
  517. }
  518. $arrayPosNeg = array();
  519. foreach($arrayArquivo['relacoes'] as $chave => $relacao) {
  520. for ($i = 0; $i < sizeof($arrayArquivo['exemplosPos'][$chave]); $i++) {
  521. $arrayPosNeg[$chave][$i] = array('exemplo' => $arrayArquivo['exemplosPos'][$chave][$i], 'tipo' => '+', 'indice' => $i);
  522. }
  523. for ($i = 0; $i < sizeof($arrayArquivo['exemplosNeg'][$chave]); $i++) {
  524. $arrayPosNeg[$chave][$i + sizeof($arrayArquivo['exemplosPos'][$chave])] = array('exemplo' => $arrayArquivo['exemplosNeg'][$chave][$i], 'tipo' => '-', 'indice' => $i);
  525. }
  526. shuffle($arrayPosNeg[$chave]);
  527. }
  528. for ($i = 0; $i < $k; $i++){
  529. $resultado = construirTesteKFold($arrayArquivo['relacoes'], $arrayArquivo['exemplosPos'], $arrayArquivo['exemplosNeg'], $k, $i, $arrayPosNeg);
  530. $arrayArquivoTemp = $arrayArquivo;
  531. $arrayArquivoTemp['exemplosPos'] = $resultado['exemplosPos'];
  532. $arrayArquivoTemp['exemplosNeg'] = $resultado['exemplosNeg'];
  533. $arrayArquivoTemp['teste'] = $resultado['strTeste'];
  534. $arrayArquivoTemp['testeNeg'] = $resultado['testeNeg'];
  535. $arrayArquivoTemp['testePos'] = $resultado['testePos'];
  536. $output_FOIL = executaFoil($arrayArquivoTemp);
  537. ?>
  538. <h1 class="tituloResultado">Resultado obtido no experimento K = <?php echo ($i+1);?></h1>
  539. <p class="pResultadoObtido">
  540. <?php echo $output_FOIL;?>
  541. </p>
  542. <?php
  543. }
  544. break;
  545. case "leaveoneout":
  546. $arrayPosNeg = array();
  547. foreach($arrayArquivo['relacoes'] as $chave => $relacao) {
  548. for ($i = 0; $i < sizeof($arrayArquivo['exemplosPos'][$chave]); $i++) {
  549. $arrayPosNeg[$chave][$i] = array('exemplo' => $arrayArquivo['exemplosPos'][$chave][$i], 'tipo' => '+', 'indice' => $i);
  550. }
  551. for ($i = 0; $i < sizeof($arrayArquivo['exemplosNeg'][$chave]); $i++) {
  552. $arrayPosNeg[$chave][$i + sizeof($arrayArquivo['exemplosPos'][$chave])] = array('exemplo' => $arrayArquivo['exemplosNeg'][$chave][$i], 'tipo' => '-', 'indice' => $i);
  553. }
  554. shuffle($arrayPosNeg[$chave]);
  555. }
  556. if (sizeof($arrayPosNeg) != 1) {
  557. escreveErro("Sз ж possьvel utilizar o mжtodo Leave One Out com uma relaусo alvo.");
  558. die();
  559. }
  560. $k = sizeof($arrayPosNeg[0]);
  561. for ($i = 0; $i < $k; $i++){
  562. $resultado = construirTesteKFold($arrayArquivo['relacoes'], $arrayArquivo['exemplosPos'], $arrayArquivo['exemplosNeg'], $k, $i, $arrayPosNeg, true);
  563. $arrayArquivoTemp = $arrayArquivo;
  564. $arrayArquivoTemp['exemplosPos'] = $resultado['exemplosPos'];
  565. $arrayArquivoTemp['exemplosNeg'] = $resultado['exemplosNeg'];
  566. $arrayArquivoTemp['teste'] = $resultado['strTeste'];
  567. $arrayArquivoTemp['testeNeg'] = $resultado['testeNeg'];
  568. $arrayArquivoTemp['testePos'] = $resultado['testePos'];
  569. $output_FOIL = executaFoil($arrayArquivoTemp);
  570. ?>
  571. <h1 class="tituloResultado">Resultado obtido no experimento K = <?php echo ($i+1);?></h1>
  572. <p class="pResultadoObtido">
  573. <?php echo $output_FOIL;?>
  574. </p>
  575. <?php
  576. }
  577. break;
  578. }
  579. }
  580. else {
  581. ?>
  582. <form id="formPrincipal" method="post" action="" enctype="multipart/form-data">
  583. <fieldset id="fieldsetEscolhaInput">
  584. <legend>
  585. Escolha de input
  586. </legend>
  587. <div class="divRadioEscolhaInput">
  588. <input id="radioInputArquivo" name="radioInput" type="radio" value="arquivo" onclick="javascript:exibeInput('arquivo');" />
  589. <label id="labelInputArquivo" for="radioInputArquivo" onclick="javascript:exibeInput('arquivo');">Envio de Arquivo</label>
  590. </div>
  591. <div class="divRadioEscolhaInput">
  592. <input id="radioInputManual" name="radioInput" type="radio" value="manual" onclick="javascript:exibeInput('manual');" />
  593. <label id="labelInputManual" for="radioInputManual" onclick="javascript:exibeInput('manual');">Entrada Manual</label>
  594. </div>
  595. </fieldset>
  596. <!-- DIV PEDINDO SELECAO DE INPUT -->
  597. <div id="divExplicacao">
  598. <p>
  599. Bem vindo ao NetFoil!
  600. </p>
  601. <p>
  602. Por favor, selecione um mжtodo de entrada de dados acima para continuar...
  603. </p>
  604. </div>
  605. <!-- FIELDSET DE INPUT DE ARQUIVO -->
  606. <fieldset id="fieldsetInputArquivo">
  607. <legend>
  608. Escolha de Arquivo
  609. </legend>
  610. <div id="divEscolhaArquivo">
  611. <label class="labelEscolhaArquivo">Escolha o arquivo</label>
  612. <input type="file" name="inputArquivo" />
  613. </div>
  614. </fieldset>
  615. <!-- FIELDSET DE INPUT MANUAL -->
  616. <fieldset id="fieldsetInputManual">
  617. <legend>
  618. Entrada Manual
  619. </legend>
  620. <p id="pExplicacaoEntradaManual">
  621. Aqui vai entrar uma explicaусo sobre a formataусo do arquivo de entrada...
  622. </p>
  623. <div class="divEntradaManual">
  624. <label id="labelEntradaManualTiposConstantes" class="labelEntradaManual" for="textareaInputManualTiposConstantes">Tipos e Constantes</label>
  625. <div class="divExplicacaoOculta" id="divExplicacaoOcultaEspecial1">
  626. <div class="divTextoExplicacaoOculta">
  627. <p>
  628. Formato:
  629. </p>
  630. <p>
  631. Tipo1: constante1, constante2, constante3, ..., constanteN.
  632. </p>
  633. <p>
  634. Tipo2: constante1, constante2, constante3, ..., constanteN.
  635. </p>
  636. </div>
  637. </div>
  638. <textarea rows="5" cols="80" name="textareaInputManualTiposConstantes" id="textareaInputManualTiposConstantes"></textarea>
  639. </div>
  640. <div class="divEntradaManual">
  641. <label id="labelEntradaManualExemplos" class="labelEntradaManual" for="textareaInputManualConceitoAlvo">Conceito Alvo e Exemplos</label>
  642. <div class="divExplicacaoOculta" id="divExplicacaoOcultaEspecial2">
  643. <div class="divTextoExplicacaoOculta">
  644. <p>
  645. Formato:
  646. </p>
  647. <p>
  648. Conceito1(TipoA,TipoB)
  649. </p>
  650. <p>
  651. constanteTipoA1,constanteTipoB1,
  652. </p>
  653. <p>
  654. constanteTipoA2,constanteTipoB2
  655. </p>
  656. <p>
  657. ;
  658. </p>
  659. <p>
  660. constanteTipoA3,constanteTipoB3,
  661. </p>
  662. <p>
  663. constanteTipoA4,constanteTipoB4
  664. </p>
  665. <p>
  666. .
  667. </p>
  668. <p>
  669. Os dois primeiros exemplos sсo positivos(antes de "<strong>;</strong>"-<strong>ponto e vьrgula</strong>) e os dois Щltimos sсo negativos.
  670. </p>
  671. <p>
  672. Pode-se aprender mais de um conceito de uma vez.
  673. </p>
  674. </div>
  675. </div>
  676. <textarea rows="10" cols="80" name="textareaInputManualConceitoAlvo" id="textareaInputManualConceitoAlvo"></textarea>
  677. </div>
  678. <div class="divEntradaManual">
  679. <label class="labelEntradaManual" id="labelEntradaManualBK" for="textareaInputManualBK">Conhecimento Preliminar</label>
  680. <div class="divExplicacaoOculta" id="divExplicacaoOcultaEspecial3">
  681. <div class="divTextoExplicacaoOculta">
  682. <p>
  683. Formato:
  684. </p>
  685. <p>
  686. *Predicado(Tipo1,Tipo2) #-
  687. </p>
  688. <p>
  689. constanteTipo1,constanteTipo2
  690. </p>
  691. <p>
  692. constanteTipo1,constanteTipo2
  693. </p>
  694. <p>
  695. .
  696. </p>
  697. <p>
  698. A <strong>#</strong> informa que a variрvel de Tipo1 ж de entrada e o <strong>-</strong> significa que a variрvel de Tipo 2 pode ser tanto de entrada como de saьda.
  699. </p>
  700. <p>
  701. Pode-se colocar quantos predicados forem necessрrios no Conhecimento Preliminar.
  702. </p>
  703. </div>
  704. </div>
  705. <textarea rows="10" cols="80" name="textareaInputManualBK" id="textareaInputManualBK"></textarea>
  706. </div>
  707. </fieldset>
  708. <!-- FIELDSET DE OPCOES -->
  709. <fieldset id="fieldsetOpcoes">
  710. <legend>
  711. Escolha de Opушes
  712. </legend>
  713. <!-- RUNNING OPTIONS -->
  714. <div class="divOpcao">
  715. <label class="labelOpcao">
  716. Divisсo do conjunto de Exemplos para teste:
  717. </label>
  718. <div class="divDivisaoFolds">
  719. <input type="radio" name="inputDivisaoFolds" id="inputDivisaoFoldsSemExemplo" value="semexemplo" onclick="javascript:controlaVisibilidadeTeste(this);"/>
  720. <label class="labelDivisaoFolds" for="inputDivisaoFoldsSemExemplo" onclick="javascript:controlaVisibilidadeTeste(this);">
  721. Nсo Testar
  722. </label>
  723. </div>
  724. <div class="divDivisaoFolds" id="divDivisaoFoldsComExemplo">
  725. <input type="radio" name="inputDivisaoFolds" id="inputDivisaoFoldsComExemplo" value="comexemplo" onclick="javascript:controlaVisibilidadeTeste(this);" />
  726. <label class="labelDivisaoFolds" for="inputDivisaoFoldsComExemplo" onclick="javascript:controlaVisibilidadeTeste(this);" >
  727. Testar utilizando outros exemplos
  728. </label>
  729. <!-- INPUT MANUAL DE EXEMPLOS -->
  730. <div id="divInputManualTeste">
  731. <label class="labelEntradaManual" for="textareaInputManualTeste">Exemplos de Teste</label>
  732. <textarea rows="5" cols="75" name="textareaInputManualTeste" id="textareaInputManualTeste"></textarea>
  733. </div>
  734. <!-- INPUT ARQUIVO DE EXEMPLOS -->
  735. <div id="divInputArquivoTeste">
  736. <label class="labelEscolhaArquivoTeste" for="inputArquivoTeste">Exemplos de Teste</label>
  737. <input type="file" name="inputArquivoTeste" id="inputArquivoTeste" />
  738. </div>
  739. </div>
  740. <div class="divDivisaoFolds" id="divDivisaoFoldsKFold">
  741. <input type="radio" name="inputDivisaoFolds" id="inputDivisaoFoldsKFold" value="kfold" onclick="javascript:controlaVisibilidadeTeste(this);"/>
  742. <label class="labelDivisaoFolds" for="inputDivisaoFoldsKFold" onclick="javascript:controlaVisibilidadeTeste(this);">
  743. Utilizar K-Fold Cross Validation
  744. </label>
  745. <!-- INPUT NUMERO FOLDS -->
  746. <div id="divInputKFold">
  747. <label class="labelOpcao" for="inputK">N de Folds</label>
  748. <input type="text" name="inputK" id="inputK" />
  749. </div>
  750. </div>
  751. <div class="divDivisaoFolds">
  752. <input type="radio" name="inputDivisaoFolds" id="inputDivisaoFoldsHoldOut" value="holdout" onclick="javascript:controlaVisibilidadeTeste(this);"/>
  753. <label class="labelDivisaoFolds" for="inputDivisaoFoldsHoldOut" onclick="javascript:controlaVisibilidadeTeste(this);">
  754. Utilizar HoldOut
  755. </label>
  756. </div>
  757. <div class="divDivisaoFolds">
  758. <input type="radio" name="inputDivisaoFolds" id="inputDivisaoFoldsLeaveOneOut" value="leaveoneout" onclick="javascript:controlaVisibilidadeTeste(this);"/>
  759. <label class="labelDivisaoFolds" for="inputDivisaoFoldsLeaveOneOut" onclick="javascript:controlaVisibilidadeTeste(this);">
  760. Utilizar Leave one Out
  761. </label>
  762. </div>
  763. </div>
  764. <div class="divOpcao">
  765. <label class="labelOpcao">
  766. Considerar clрusulas negativas?
  767. </label>
  768. <select name="selectClausulasNegativas">
  769. <option value="sim">
  770. Sim, todas.
  771. </option>
  772. <!-- Corresponde ao argumento -N -->
  773. <option value="diferenca">
  774. Sim, mas somente clрusulas de diferenуa.
  775. </option>
  776. <!-- Corresponde ao argumento -n -->
  777. <option value="nao">
  778. Nсo, nenhuma.
  779. </option>
  780. </select>
  781. <div class="divExplicacaoOculta">
  782. <div class="divTextoExplicacaoOculta">
  783. <p>
  784. Possьveis escolhas e seus significados:
  785. </p>
  786. <ul id="listaDicaOpcao1">
  787. <li>
  788. <strong>Sim, todas.</strong> - Todas as clрusulas negativas serсo consideradas pelo algoritmo FOIL.
  789. </li>
  790. <li>
  791. <strong>Sim, mas somente clрusulas de diferenуa.</strong> - Somente clрusulas do tipo A&lt;&gt;B ou A&lt;&gt;constante serсo consideradas.
  792. </li>
  793. <li>
  794. <strong>Nсo, nenhuma.</strong> - Nenhuma clрusula negativa ou de diferenуa serр considerada.
  795. </li>
  796. </ul>
  797. </div>
  798. </div>
  799. </div>
  800. <div class="divOpcao">
  801. <label class="labelOpcao">
  802. Nьvel de detalhamento da saьda
  803. </label>
  804. <select name="selectVerbosityLevel">
  805. <!-- Corresponde ao argument -vNUMEROESCOLHIDO -->
  806. <?php
  807. for ($i = 0; $i <= 4; $i++) {
  808. ?>
  809. <option value="<?php echo $i;?>">
  810. <?php echo $i;?>
  811. </option>
  812. <?php
  813. }
  814. ?>
  815. </select>
  816. <div class="divExplicacaoOculta">
  817. <div class="divTextoExplicacaoOculta">
  818. <p>
  819. O <strong>Nьvel de Detalhamento da Saьda</strong> indica o quсo explicativa sobre os passos do algoritmo e suas decisшes serр a saьda gerada.
  820. </p>
  821. <p>
  822. Quanto mais alto o Nьvel, mais detalhes sobre os passos do algoritmo serсo exibidos.
  823. </p>
  824. </div>
  825. </div>
  826. </div>
  827. <div class="divOpcao">
  828. <label class="labelOpcao">
  829. NЩmero mрximo de variрveis
  830. </label>
  831. <!-- Corresponde ao argumento -VNUMEROESCOLHIDO -->
  832. <input id="inputNumeroVariaveis" name="inputNumeroVariaveis" type="text" maxlength="20" />
  833. <div class="divExplicacaoOculta">
  834. <div class="divTextoExplicacaoOculta">
  835. <p>
  836. Define o <strong>NЩmero Mрximo de Variрveis</strong> que pode ser utilizado pelo algoritmo na busca por uma definiусo.
  837. </p>
  838. <p>
  839. <i>Valor default: 52.</i>
  840. </p>
  841. </div>
  842. </div>
  843. </div>
  844. <div class="divOpcao">
  845. <label class="labelOpcao">
  846. Considerar apenas uma porcentagem de clрusulas negativas?
  847. </label>
  848. <input id="inputPorcentagemClausulasNegativas" name="inputPorcentagemClausulasNegativas" maxlength="3" />
  849. <div class="divExplicacaoOculta">
  850. <div class="divTextoExplicacaoOculta">
  851. <p>
  852. Ao utilizar a <strong>Hipзtese do Mundo Fechado</strong> em alguns aprendizados, muitas clрusulas negativas podem ser geradas. Esta opусo faz com que somente uma porcentagem de clрusulas negativas seja avaliada.
  853. </p>
  854. <p>
  855. <i>Esta opусo nсo faz efeito se as clрusulas negativas forem dadas explicitamente.</i>
  856. </p>
  857. </div>
  858. </div>
  859. </div>
  860. <div class="divOpcao">
  861. <label class="labelOpcao">
  862. NЩmero mрximo de tuplas
  863. </label>
  864. <!-- Corresponde ao argumento -mNUMEROESCOLHIDO -->
  865. <input id="inputNumeroTuplas" name="inputNumeroTuplas" type="text" maxlength="20" />
  866. <div class="divExplicacaoOculta">
  867. <div class="divTextoExplicacaoOculta">
  868. <p>
  869. Define o <strong>NЩmero Mрximo de Tuplas</strong>, se vocЖ obtiver avisos sobre a exclusсo de literais devido ao limite mрximo de tuplas, aumente este valor. Entretanto, quanto maior este valor, mais tempo o algoritmo demorarр para rodar.
  870. </p>
  871. <p>
  872. <i>Valor default: 100000.</i>
  873. </p>
  874. </div>
  875. </div>
  876. </div>
  877. <div class="divOpcao">
  878. <label class="labelOpcao">
  879. Limite de profundidade de variрveis
  880. </label>
  881. <!-- Corresponde ao argumento -dNUMEROESCOLHIDO -->
  882. <input id="inputLimiteProfundidade" name="inputLimiteProfundidade" type="text" maxlength="20" />
  883. <div class="divExplicacaoOculta">
  884. <div class="divTextoExplicacaoOculta">
  885. <p>
  886. Deefine a <strong>Profundidade Mрxima de Variрveis</strong> em literais.
  887. </p>
  888. <p>
  889. <i>Valor default: 4.</i>
  890. </p>
  891. </div>
  892. </div>
  893. </div>
  894. <div class="divOpcao">
  895. <label class="labelOpcao">
  896. SeqЧЖncia mрxima de literais fracos
  897. </label>
  898. <!-- Corresponde ao argumento -wNUMEROESCOLHIDO -->
  899. <input id="inputLiteraisFracos" name="inputLiteraisFracos" type="text" maxlength="20" />
  900. <div class="divExplicacaoOculta">
  901. <div class="divTextoExplicacaoOculta">
  902. <p>
  903. <strong>Literais Fracos</strong> sсo literais que apresentam ganho 0.
  904. </p>
  905. <p>
  906. Esta opусo define a maior seqЧЖncia de literais fracos que o FOIL irр aceitar.
  907. </p>
  908. <p>
  909. <i>Valor default: 4.</i>
  910. </p>
  911. </div>
  912. </div>
  913. </div>
  914. <div class="divOpcao">
  915. <label class="labelOpcao">
  916. Acurрcia mьnima
  917. </label>
  918. <!-- Corresponde ao argumento -aNUMEROESCOLHIDO -->
  919. <input id="inputAcuraciaMinima" name="inputAcuraciaMinima" type="text" maxlength="3" />
  920. <div class="divExplicacaoOculta">
  921. <div class="divTextoExplicacaoOculta">
  922. <p>
  923. Este campo aceita valores de 0 a 100. (Porcentagens)
  924. </p>
  925. <p>
  926. Esta opусo define a <strong>Acurрcia Mьnima</strong> de clрusulas que o FOIL irр aceitar em seu aprendizado. Qualquer clрusula com acurрcia menor que a escolhida serр descartada.
  927. </p>
  928. <p>
  929. <i>Valor default: 80%.</i>
  930. </p>
  931. </div>
  932. </div>
  933. </div>
  934. <div class="divOpcao">
  935. <label class="labelOpcao">
  936. Limite de alternativas
  937. </label>
  938. <!-- Corresponde ao argumento -lNUMEROESCOLHIDO -->
  939. <input id="inputLimiteAlternativas" name="inputLimiteAlternativas" type="text" maxlength="20" />
  940. <div class="divExplicacaoOculta">
  941. <div class="divTextoExplicacaoOculta">
  942. <p>
  943. Define o <strong>NЩmero Mрximo de Literais Alternativos</strong> que o FOIL guardarр.
  944. </p>
  945. <p>
  946. <i>Valor default: 5.</i>
  947. </p>
  948. </div>
  949. </div>
  950. </div>
  951. <div class="divOpcao">
  952. <label class="labelOpcao">
  953. NЩmero mрximo de Checkpoints
  954. </label>
  955. <!-- Corresponde ao argumento -tNUMEROESCOLHIDO -->
  956. <input id="inputLimiteCheckpoints" name="inputLimiteCheckpoints" type="text" maxlength="20" />
  957. <div class="divExplicacaoOculta">
  958. <div class="divTextoExplicacaoOculta">
  959. <p>
  960. Define o <strong>NЩmero Mрximo de Checkpoints</strong> em determinado momento.
  961. </p>
  962. <p>
  963. <i>Valor default: 20.</i>
  964. </p>
  965. </div>
  966. </div>
  967. </div>
  968. <div class="divOpcao">
  969. <label class="labelOpcao">
  970. Porcentagem mьnima de ganho para literais alternativos
  971. </label>
  972. <!-- Corresponde ao argumento -fNUMEROESCOLHIDO -->
  973. <input id="inputGanhoMinimo" name="inputGanhoMinimo" type="text" maxlength="3" />
  974. <div class="divExplicacaoOculta">
  975. <div class="divTextoExplicacaoOculta">
  976. <p>
  977. Este campo aceita valores de 0 a 100. (Porcentagens)
  978. </p>
  979. <p>
  980. Define a porcentagem do ganho do melhor literal que os literais alternativos devem possuir.
  981. </p>
  982. <p>
  983. <i>Valor default: 80%.</i>
  984. </p>
  985. </div>
  986. </div>
  987. </div>
  988. </fieldset>
  989. <!-- FIELDSET ENVIAR -->
  990. <fieldset id="fieldsetEnviar">
  991. <legend>
  992. Pronto para aprender?
  993. </legend>
  994. <input type="submit" name="btnEnviar" value="Aprender!" />
  995. </fieldset>
  996. </form>
  997. <?php
  998. }
  999. ?>
  1000. </div>
  1001. <div id="divInferior">
  1002. </div>
  1003. </div>
  1004. <div id="divRodape">
  1005. <p id="pDesenvolvedorSistema">
  1006. Desenvolvido por <a href="mailto:digoxavi@gmail.com" class="aRodape">Diego Xavier</a> e <a href="mailto:vl.ribeiro3@gmail.com" class="aRodape">Vinьcius Ribeiro</a>
  1007. </p>
  1008. <p id="pDesenvolvedorAlgoritmo">
  1009. Algoritmo Foil por <a href="http://www.rulequest.com/Personal/" class="aRodape">Ross Quinlan</a>
  1010. </p>
  1011. </div>
  1012. </div>
  1013. </body>
  1014. </html>