Created
May 10, 2017 07:59
-
-
Save josecarlosqs/fb2752ec25e9d2ee958601b7910dfadb to your computer and use it in GitHub Desktop.
Revisions
-
josecarlosqs created this gist
May 10, 2017 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,119 @@ <!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>