Skip to content

Instantly share code, notes, and snippets.

@josecarlosqs
Created May 10, 2017 07:59
Show Gist options
  • Save josecarlosqs/fb2752ec25e9d2ee958601b7910dfadb to your computer and use it in GitHub Desktop.
Save josecarlosqs/fb2752ec25e9d2ee958601b7910dfadb to your computer and use it in GitHub Desktop.
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<meta charset="UTF-8">
</head>
<body>
<div class="container" style="margin-top: 20px;">
<div class="row">
<?php
if($_POST){
// Funcion que quita caracteres especiales
function filterSpecialChars($str){
return preg_replace("/[^a-z0-9]/i", "", $str);
}
// Funcion que busca el elemento(needle) mas parecido dentro de un array(haystack), determinando un minimo de 90%
function searchSimilarItem($needle,$haystack){
$length = count($haystack);
$similarity = 0;
for($d = 0; $d < $length; $d++){
if($haystack[$d] !== ""){
similar_text($needle,$haystack[$d],$similarity);
if($similarity >= 90){
return $d;
}
$similarity = 0;
}
}
return -1;
}
// Funcion que extrae una parte de una oracion basada en un array
function getMarkedSection($arr,$mark_index){
$arr[$mark_index] = "<mark>" . $arr[$mark_index] . "</mark>";
$arr_final = array_slice($arr, max($mark_index - 3,0),6);
return join(" ",$arr_final);
}
// Comprobamos que ambos archivos son archivos de texto
if($_FILES["txtOriginal"]["type"] === "text/plain" && $_FILES["txtPrueba"]["type"] === "text/plain"){
echo "<h1>Resultados:</h1>";
// Obtenemos el texto de cada archivo
$texto_original = file_get_contents($_FILES["txtOriginal"]["tmp_name"]);
$texto_prueba = file_get_contents($_FILES["txtPrueba"]["tmp_name"]);
// Separamos los textos por salto de linea en arrays
$array_aux_texto_original = $array_texto_original = preg_split("/[\n\r]/", $texto_original);
$array_aux_texto_prueba = $array_texto_prueba = preg_split("/[\n\r]/", $texto_prueba);
// Obtenemos la longitud de cada array para usarla en los siguientes for
$array_texto_original_length = count($array_texto_original);
$array_texto_prueba_length = count($array_texto_prueba);
// Sanitizamos los arrays de caracteres raros
for($a = 0; $a < $array_texto_original_length; $a++){
$array_texto_original[$a] = strtolower(filterSpecialChars($array_texto_original[$a]));
}
for($b = 0; $b < $array_texto_prueba_length; $b++){
$array_texto_prueba[$b] = strtolower(filterSpecialChars($array_texto_prueba[$b]));
}
// Comenzamos a buscar cada linea del original en el contenido a probar
$everythingOK = true;
for($c = 0; $c < $array_texto_original_length; $c++){
if($array_texto_original[$c] !== ""){
$haystack_index = searchSimilarItem($array_texto_original[$c],$array_texto_prueba);
if($haystack_index > -1){
$palabras_original = preg_split("/[\s]+/", $array_aux_texto_original[$c]);
$palabras_prueba = preg_split("/[\s]+/", $array_aux_texto_prueba[$haystack_index]);
$cantidad_palabras_original = count($palabras_original);
for($e = 0; $e < $cantidad_palabras_original; $e++){
if(filterSpecialChars(strtolower($palabras_original[$e])) !== filterSpecialChars(strtolower($palabras_prueba[$e]))){
$everythingOK = false;
echo '<div class="panel panel-warning"><div class="panel-heading"><b>Linea #' . ($c+1) . ', palabra #' . ($e+1) . ' del texto original!</div><div class="panel-body"><p>Texto original:</p><code>' . getMarkedSection($palabras_original,$e) .'</code><p>Texto comparado:</p><code>' . getMarkedSection($palabras_prueba,$e) .'</code></div></div>';
//echo '<div class="panel panel-warning"><div class="panel-heading"><b>Linea #' . ($c+1) . ' del texto original!</div><div class="panel-body"><code>' . filterSpecialChars(strtolower($palabras_original[$e])) . '</code><br><code>' . filterSpecialChars(strtolower($palabras_prueba[$e])) . '</code></div></div>';
break;
}
}
}else{
$everythingOK = false;
echo '<div class="panel panel-danger"><div class="panel-heading"><b>Problemas! </b>No pudimos encontrar el texto de la linea <u>' . ($c + 1) . '</u> en el texto a probar</div><div class="panel-body">' . $array_aux_texto_original[$c] . '</div></div>';
}
}
}
if($everythingOK){
echo "<div class='alert alert-success' role='alert'><b>Listo! </b>Todo concuerda!</div>";
}
echo "<button onclick='location.reload()' class='btn btn-block btn-info'>Volver a probar</button><hr>";
}else{
echo '<div class="alert alert-warning" role="alert"><b>Error:</b> Ambos archivos deben ser archivos de texto</div>';
}
}
?>
<div class="panel panel-default">
<div class="panel-heading">Comparador de textos</div>
<div class="panel-body">
<form action="comparador.php" method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="txtOriginal">Texto original</label>
<input type="file" id="txtOriginal" name="txtOriginal">
<p class="help-block">Archivo en formato txt</p>
</div>
<div class="form-group">
<label for="txtPrueba">Texto a poner a prueba</label>
<input type="file" id="txtPrueba" name="txtPrueba">
<p class="help-block">Archivo en formato txt</p>
</div>
<input type="submit" value="Comparar" name="submit" class="btn btn-primary">
</form>
</div>
</div>
</div>
</div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment