$palabras){ $coincidencias = array_intersect($palabras, explode(' ', strtolower($frase))); if(!empty($coincidencias)){ $resultado[$categoria] = $coincidencias; } } // Calcular el estado de ánimo y la predisposición $estado_animo = calcularEstadoAnimo($frase); $predisposicion = calcularPredisposicion($frase); $educacion = calcularNivelEducacion($frase); // Crear el JSON de salida $json = [ "frase" => $frase, "resultado" => $resultado, "estado_animo" => $estado_animo, "predisposicion" => $predisposicion, "educacion" => $educacion ]; return json_encode($json); } // Función para calcular el estado de ánimo basado en archivos de palabras function calcularEstadoAnimo($frase) { // Ruta al archivo de palabras neutras $rutaPalabrasNeutras = $_SERVER['DOCUMENT_ROOT'] . '/palabras_fuertes.txt'; // Ruta al archivo de palabras positivas $rutaPalabrasPositivas = $_SERVER['DOCUMENT_ROOT'] . '/palabras_ofensivas.txt'; // Ruta al archivo de palabras negativas $rutaPalabrasNegativas = $_SERVER['DOCUMENT_ROOT'] . '/palabras_muy_ofensivas.txt'; // Cargar las palabras en arrays según su categoría $palabrasNeutras = file($rutaPalabrasNeutras, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $palabrasPositivas = file($rutaPalabrasPositivas, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $palabrasNegativas = file($rutaPalabrasNegativas, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // Obtener la cantidad total de palabras en la frase $palabrasFrase = explode(' ', strtolower($frase)); $totalPalabras = count($palabrasFrase); // Obtener el largo total de la frase $largoFrase = strlen($frase); // Calcular el puntaje de estado de ánimo proporcionalmente a la cantidad de palabras y al largo de la frase $puntaje = 5; // Valor inicial neutral $puntajeNeutras = 0; $puntajePositivas = 0; $puntajeNegativas = 0; foreach ($palabrasFrase as $palabra) { if (in_array($palabra, $palabrasNeutras)) { $puntajeNeutras += 2; // Peso mayor para palabras neutras } if (in_array($palabra, $palabrasPositivas)) { $puntajePositivas += 3; // Peso mayor para palabras positivas } if (in_array($palabra, $palabrasNegativas)) { $puntajeNegativas += 4; // Peso mayor para palabras negativas } } // Calcular el puntaje total con una fórmula proporcional al largo de la frase $puntaje += (($puntajePositivas - $puntajeNegativas) / $totalPalabras) * ($largoFrase / 100); // Limitar el puntaje entre 1 y 10 $puntaje = max(1, min(10, $puntaje)); return $puntaje; } // Función para calcular la predisposición basada en archivos de palabras function calcularPredisposicion($frase) { // Ruta al archivo de palabras fuertes $rutaPalabrasFuertes = $_SERVER['DOCUMENT_ROOT'] . '/palabras_fuertes.txt'; // Ruta al archivo de palabras ofensivas $rutaPalabrasOfensivas = $_SERVER['DOCUMENT_ROOT'] . '/palabras_ofensivas.txt'; // Ruta al archivo de palabras muy ofensivas $rutaPalabrasMuyOfensivas = $_SERVER['DOCUMENT_ROOT'] . '/palabras_muy_ofensivas.txt'; // Cargar las palabras en arrays según su categoría $palabrasFuertes = file($rutaPalabrasFuertes, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $palabrasOfensivas = file($rutaPalabrasOfensivas, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $palabrasMuyOfensivas = file($rutaPalabrasMuyOfensivas, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // Obtener la cantidad total de palabras en la frase $palabrasFrase = explode(' ', strtolower($frase)); $totalPalabras = count($palabrasFrase); // Obtener el largo total de la frase $largoFrase = strlen($frase); // Calcular el puntaje de predisposición proporcionalmente a la cantidad de palabras y al largo de la frase $puntaje = 5; // Valor inicial neutro $puntajeFuertes = 0; $puntajeOfensivas = 0; $puntajeMuyOfensivas = 0; foreach ($palabrasFrase as $palabra) { if (in_array($palabra, $palabrasFuertes)) { $puntajeFuertes += 2; // Peso mayor para palabras fuertes } if (in_array($palabra, $palabrasOfensivas)) { $puntajeOfensivas += 3; // Peso mayor para palabras ofensivas } if (in_array($palabra, $palabrasMuyOfensivas)) { $puntajeMuyOfensivas += 4; // Peso mayor para palabras muy ofensivas } } // Calcular el puntaje total con una fórmula proporcional al largo de la frase $puntaje += (($puntajeFuertes + $puntajeOfensivas + $puntajeMuyOfensivas) / $totalPalabras) * ($largoFrase / 100); // Limitar el puntaje entre 1 y 10 $puntaje = max(1, min(10, $puntaje)); return $puntaje; } function calcularNivelEducacion($frase) { // Ruta al archivo de palabras educación básica $rutaPalabrasBasicas = $_SERVER['DOCUMENT_ROOT'] . '/palabras_fuertes.txt'; // Ruta al archivo de palabras educación intermedia $rutaPalabrasIntermedias = $_SERVER['DOCUMENT_ROOT'] . '/palabras_ofensivas.txt'; // Ruta al archivo de palabras educación avanzada $rutaPalabrasAvanzadas = $_SERVER['DOCUMENT_ROOT'] . '/palabras_muy_ofensivas.txt'; // Cargar las palabras en arrays según su nivel educativo $palabrasBasicas = file($rutaPalabrasBasicas, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $palabrasIntermedias = file($rutaPalabrasIntermedias, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $palabrasAvanzadas = file($rutaPalabrasAvanzadas, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // Obtener la cantidad total de palabras en la frase $palabrasFrase = explode(' ', strtolower($frase)); $totalPalabras = count($palabrasFrase); // Calcular el puntaje de nivel de educación proporcionalmente a la cantidad de palabras $puntajeBasicas = 0; $puntajeIntermedias = 0; $puntajeAvanzadas = 0; foreach ($palabrasFrase as $palabra) { if (in_array($palabra, $palabrasBasicas)) { $puntajeBasicas++; } if (in_array($palabra, $palabrasIntermedias)) { $puntajeIntermedias++; } if (in_array($palabra, $palabrasAvanzadas)) { $puntajeAvanzadas++; } } // Calcular el puntaje total con una fórmula proporcional a la cantidad de palabras $puntaje = (($puntajeBasicas * 1) + ($puntajeIntermedias * 2) + ($puntajeAvanzadas * 3)) / $totalPalabras; return $puntaje; } // Ejemplo de uso $frase = $_REQUEST["q"]; echo analizarFrase($frase); ?>