Ya lo tengo en parte solucionado pero ahora quiero eliminar los acentos del texto y no resulta
Lo que sucede es que estoy creando un script llamado Lógica donde le preguntas cosas como
"Cuantas manzanas son dos + tres y le quitas 5???, después le sumas una y lo multiplicas por 2." y te responde
"2". Es para probar que el sistema que algunos tienen en blogs y foros como vbulletin que te preguntan...
"cuanto es 1 + tres" no sirven.
<?
##################################################
# Archivo : lg.php #
# Nombre : Lógica #
# Version : 1.5 Beta #
# Autor : WHK #
##################################################
// Declaraciones =======================================
$lg_pregunta = $_GET["pregunta"];
$lg_version = "Lógica 1.5 Beta";
$lg_header = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">
<html>
<head>
<title>$lg_version</title>
</head>
<body style=\"color: rgb(255, 255, 255); background-color: rgb(102, 0, 0);\" alink=\"white\" link=\"white\" vlink=\"white\">
<div style=\"text-align: center;\">
<big>
<span style=\"font-weight: bold;\"><a href=\"?\">$lg_version by WHK</a></span>
</big><br /></div>";
$lg_footer = "</body>
</html>";
// =====================================================
// Funciones ===========================================
// Eliminar caracteres innecesarios --------------------
function limpiar($texto){
$texto = str_replace("divid","/",$texto); // dividimos, divide, divido, dividirás, etc. $texto = str_replace("multiplic","*",$texto); // multiplicamos, multiplica, multiplico, multiplicarás, etc. $texto = str_replace("part","/",$texto); // partido, partirás, partiremos, partidas, partelo, etc. $texto = str_replace("resta","-",$texto); // resta, restale, restaremos, le restarás, etc. $texto = str_replace("quita","-",$texto); // quita, quitas, quitale, etc. $texto = str_replace("saca","-",$texto); // saca, sacale, sacas, etc. $texto = str_replace("suma","+",$texto); // suma, sumale, le sumamos, sumaremos, sumarás, etc. $texto = str_replace("iguala","=",$texto); // es igual a, es igual?, etc. $texto = str_replace("punt",".",$texto); // punto, puntoy.. etc. $texto = str_replace("abreparenteci","(",$texto); // abre parentecis $texto = str_replace("abresparenteci","(",$texto); // abres parentecis $texto = str_replace("ncaparenteci","(",$texto); // inicia parentecis $texto = str_replace("ncasparenteci","(",$texto); // inicias parentecis $texto = str_replace("cerraparenteci",")",$texto); // cierra parentecis $texto = str_replace("cerrasparenteci",")",$texto); // cierras parentecis $texto = str_replace("termnaparenteci",")",$texto); // termina parentecis $texto = str_replace("termnasparenteci",")",$texto); // terminas parentecis $limpiar = array("*","/","+","-", "(", ")", ".", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"); for ($n=0; $n < 300; $n++) {
$a=0;
while($a<=$b){
if ($texto[$n] == $limpiar[$a]){ $out = $out.$texto[$n]; }
$a++;
}
}
return $out;
}
// -----------------------------------------------------
// Reemplaza letras por números ------------------------
// Función creada por WHK.
function char2num($texto){
$unidad = array("cero","", "dos", "tres", "cuatro", "cnco","ses","sete","ocho","nueve"); /*
$decena = array("die","veint", "treinta", "cuarenta", "cincuenta","sesenta","setenta","ochenta","noventa");
$centena = array("cien","sien"); // $numero.$centena
$unidad_de_mil = "mil"; // $numero.$unidad_de_mil
$unidad_de_millon = "millon"; // millón, millones, etc. $numero.$unidad_de_millon
$unidad_de_billon = "billon"; // billón, billones, etc. $numero.$unidad_de_billon
*/
$a=0;
while($a<=$b){
$a++;
}
return $texto;
}
// -----------------------------------------------------
// Procesar todo ---------------------------------------
function procesar($texto){
$texto = char2num($texto);
$texto = limpiar($texto);
return $texto;
}
// -----------------------------------------------------
// Responder -------------------------------------------
function responde($texto){
$texto = procesar($texto);
$texto = @eval('return '.$texto.';'); return $texto;
}
// -----------------------------------------------------
// =====================================================
// Index ===============================================
echo "$lg_header
<br /><br /><center>
<u>Descripción y uso</u><br />
$lg_version consiste en calcular operaciones aritméticas como por ejemplo <br />
<b><i>\"Cuantas manzanas son dos + tres y le quitas 5???, después le sumas una y lo multiplicas por 2.\"</i></b><br />
y debería darte como resultado \"2\". Por el momento solo puede reconocer palabras unitarias como por<br />
ejemplo un, uno, dos, nueve, etc. Tambié soporta parentecis escribiendolos directamente o diciendo<br />
abre parentesis, inicia parentecis, cierra parentecis, etc. Los caracteres < y > serán considerados parentesis.
Mientras esté en fase beta intenta no finalizar con un punto porque es tomado como decimal.<br /><br />
<form method=\"GET\">
<input type=\"text\" name=\"pregunta\" size=\"100\" value=\"";
if($lg_pregunta){
echo $lg_pregunta_cf;
} else {
echo "Cuantas manzanas son dos + tres y le quitas 5???, después le sumas una y lo multiplicas por 2.";
}
echo "\"><br /><input type=\"submit\" value=\"Preguntar\"></form>";
if($lg_pregunta){
echo "<br />Respuesta: ".responde($lg_pregunta);
}
echo "</center>$lg_footer";
// =====================================================
?>
Está algo cutre pero es lo que se me ocurrió
Por ahora solo le enseñé a calcular unidades pero después le enseñaré decenas y centenas sumando resultados por ejemplo mil veintiuno o mil veinte y uno retornará 1000 + 20 + 1.
Tengo que eliminar algunas cosas como los textos omitidos en la función limpiar ya que al final se limpian igual, pero no puedo sacar las tildes XD.
Si te fijas donde dice
for ($n=0; $n < 100; $n++) { debería ir la cantidad de caracteres para hacer el filtro de exepciones asi que mientras tanto solo se limita a una pregunta de 100 caracteres.
Acá dejo el demo:
http://lab.jccharry.com/proyectos/lg/Aunque no quiero hacerlo público todavía hastaque esté terminado.