0 Usuarios y 1 Visitante están viendo este tema.
Ahora...cogete el bañador y a la playa!
Anda!! Y con el Gran Apagón que tuvisteis....
Jefazo, como dicen por acá, "se la dejo picando".
Lo que si que acabo de implementar en el Foro es algo similar a lo que pides, gracias a un mod que ye estaba echo (falta traducir y poner una imagen en el menú) a modo de prueba
A lo sumo, se sugiere una posible línea de investigación de mejoras futuras... jaja.
... se puede poner un comentario o descripción del archivo, que perfectamente podría ser un Tag... Podría mirar de hacer algún cambio para que se entendiera/simulara como Tag, pero al final todo queda en las ganas de escribir Tags que tenga el que suba el archivo.
El problema es que si no se pre-acuerdan los tags, no se podrá hacer bien una búsqueda. Y si no se normalizan y cada uno pone el que quiere, estaremos en un caos que lo haría inútil.
¿Entiendo que tratas, que se confeccione un vocabulario de nuestro argot, bajo los tags?
Otrosí ... si se consigue montar un sistema de calculo automático de tags, sería teóricamente factible clasificar todos los post anteriores existentes y asignarles los tags, para poder incluirlos, al menos de forma primaria, en las búsquedas.
Citar Otrosí ... si se consigue montar un sistema de calculo automático de tags, sería teóricamente factible clasificar todos los post anteriores existentes y asignarles los tags, para poder incluirlos, al menos de forma primaria, en las búsquedas. Otrosi... si ARC tuviera un equipo de expertos en estadística, otro en programación avanzada de IA, etc... etc... ya no seriamos ARC, seriamos SanGoogle... Soñadores Saludos
¿Ya tienen metido, por ahí debajo, el pelete corporal?
Y en cuanto a ponernos de acuerdo... ¡fácil! un tiempo para que cada uno diga la suya y luego el JeFaZo escoje y define el árbol definitivo.
Mi nivel de programación a pesar de estar haciendo algunas virguerías de las que yo mismo me sorprendo sigue siendo de "newbie" total...
<?phperror_reporting(E_ALL);ini_set("display_errors", 1);$start_time = microtime(true); // Inicio medidor tiemposet_time_limit(0); // Por defecto se para un programa a los x segundos (configuración php.ini) para evitar bucles infinitos.include('local.php'); //Datos de conexión// Entro en la base de datos con la tabla de mensajes SMF y una limpia para recibir las palabras $bdi=mysqli_connect(SQL_HOST, USER, PASS, SQL_DB); if (!$bdi) {die('Connect Error: '.mysqli_connect_error());} if (!$bdi->set_charset("utf8")) { exit();} else { } // Selección de mensajes de la tabla de mensajes de SMF, en este caso los 1000 primeros (una copia antigua en donde algunos caracteres tipo ñ & cia no estaban arreglados) $sql ="SELECT id_msg,body from smf_messages WHERE id_msg between 1 AND 1000 ORDER BY id_msg"; $resultado = mysqli_query($bdi, $sql) or die('Error 13:'.mysqli_error()); // Comienza el bucle de lectura de mensajes de la BD while ($row = mysqli_fetch_array($resultado, MYSQLI_BOTH)) { // asigno el mensaje a una variable $bd = $row['body']; // Reemplazo en todo el mensaje "[" por ">", tags que utiliza el SMF para algunas entidades HTML $bd = str_replace("[","<",$bd); $bd = str_replace("]","<",$bd); // Función (ver final) para pasar todo a minúsculas $bd = strtolower_utf8 ($bd); // Función (ver final) para quitar todo lo que esta entre términos HTML $ta = array("html", "body", "b", "br", "br","em", "hr", "i", "li", "ol", "p", "s", "span", "table", "tr", "td", "u", "ul", "http", "https", "img"); $kk= removeTagsWithTheirContent ($ta, $bd); // Otra que hace mas o menos lo mismo $kk = preg_replace('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i', '', $kk); // Quito todo lo que puede sobrar, incluido algunas palabras habituales $delimiter = array(" ",",",".","'","\"","|","\\","/",";",":","(",")","?","¿",">","<","img","nv1","nv4","""," ",">","!"," que ","saludos"," por "," las ","una","hola","para"); $kk = str_replace($delimiter, " ", $kk); // Primer "token", separa palabra por palabra del mensaje $token = strtok("$kk", " \n \t"); while($token !== false) { //quito las letras sueltas de menos de 3 caracteres if (strlen($token) >= 3) { // Mas filtros quitando signos de puntuación, posiblemente algunos redundantes, a lo mejor tendría que hacerlo antes $signos = array(",",".",";",":",":"); $token = str_replace(signos, " ", $token); // En la nueva tabla ya creada y limpia busco palabras coincidentes $result = mysqli_query($bdi, "SELECT palabra from contadorsmf WHERE palabra = '$token' ORDER BY cantidad DESC") or die('Error 44:'.mysqli_error()); // Si ya existe alguna sumo 1 en cantidad if (mysqli_num_rows($result) >= 1) { mysqli_query($bdi, "UPDATE contadorsmf SET cantidad = cantidad + 1 WHERE palabra = '$token'" ) or die ("No se puede ejecutar la peticion 2."); } // Y si no existe la añado a la tabla y le doy cantidad 1 else if (mysqli_num_rows($result) == null) { mysqli_query($bdi, "INSERT INTO contadorsmf (palabra, cantidad) VALUES ('$token', '1')") or die('Error 25:'.mysqli_error($bdi)); } // Termino el bucle de menos de tres letras y de subir palabra } // Preparo la siguiente palabra en el bucle con algun otro filtro extra $token = strtok(" \n\t"); // Acabo bucle palabras } //Acabo el bucle que lee los mensajes de SMF y fin de neura... :-) } mysqli_close($bdi);//*****************************************************************************************************************************//Fin medidor de tiempo de ejecución y lo muestra "legible"$end_time = microtime(true);$duration = $end_time - $start_time;$hours = (int)($duration/60/60);$minutes = (int)($duration/60)-$hours*60;$seconds = (int)$duration-$hours*60*60-$minutes*60; echo "Tiempo: <strong>" . $hours.' horas, '.$minutes.' minutos y '.$seconds.' segundos.</strong>';// ************************* FUNCIONES VARIAS DE FILTRO ***************************function removeTagsWithTheirContent(array $tagsToRemove, $haystack) // una de tantas que he encontrado por ahi... :-){ $currTag = ''; $currPos = false; $initSearch = function (&$currTag, &$currPos, $tagsToRemove, $haystack) { $currTag = ''; $currPos = false; foreach ($tagsToRemove as $tag) { $tempPos = stripos($haystack, '<'.$tag); if ($tempPos !== false && ($currPos === false || $tempPos < $currPos)) { $currPos = $tempPos; $currTag = $tag; } } }; $substri_count = function ($haystack, $needle, $offset, $length) { $haystack = strtolower($haystack); return substr_count($haystack, $needle, $offset, $length); }; $initSearch($currTag, $currPos, $tagsToRemove, $haystack); while ($currPos !== false) { $minTagLength = strlen($currTag) + 2; $tempPos = $currPos + $minTagLength; $tagEndPos = stripos($haystack, '</'.$currTag.'>', $tempPos); // process nested tags if ($tagEndPos !== false) { $nestedCount = $substri_count($haystack, '<' . $currTag, $tempPos, $tagEndPos - $tempPos); for ($i = $nestedCount; $i > 0; $i--) { $lastValidPos = $tagEndPos; $tagEndPos = stripos($haystack, '</' . $currTag . '>', $tagEndPos + 1); if ($tagEndPos === false) { $tagEndPos = $lastValidPos; break; } } } if ($tagEndPos === false) { // invalid html, end search for current tag $tagsToRemove = array_diff($tagsToRemove, [$currTag]); } else { // remove current tag with its content $haystack = substr($haystack, 0, $currPos) // get string after "</$tag>" .substr($haystack, $tagEndPos + strlen($currTag) + 3); } $initSearch($currTag, $currPos, $tagsToRemove, $haystack); } return $haystack;}//*****************************************************************************************************************************function strtolower_utf8($string){ // Otra de tantas que he encontrado por ahí... :-) $convert_to = array( "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "à", "á", "â", "ã", "ä", "å", "æ", "ç", "è", "é", "ê", "ë", "ì", "í", "î", "ï", "ð", "ñ", "ò", "ó", "ô", "õ", "ö", "ø", "ù", "ú", "û", "ü", "ý", "а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я", "ñ" ); $convert_from = array( "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "À", "Á", "Â", "Ã", "Ä", "Å", "Æ", "Ç", "È", "É", "Ê", "Ë", "Ì", "Í", "Î", "Ï", "Ð", "Ñ", "Ò", "Ó", "Ô", "Õ", "Ö", "Ø", "Ù", "Ú", "Û", "Ü", "Ý", "А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ъ", "Ь", "Э", "Ю", "Я", "Ñ" ); return str_replace($convert_from, $convert_to, $string);} ?>
Citar Jefazo, como dicen por acá, "se la dejo picando". Ok!, el problema es que el progamilla de Uploads se basa en un "código espagueti" de hace casi 20 años y añadirle tags seria como para volverse loco, ademas de que un servidor no esta hecho precisamente un genio... Lo que si que acabo de implementar en el Foro es algo similar a lo que pides, gracias a un mod que ye estaba echo (falta traducir y poner una imagen en el menú) a modo de prueba: http://custom.simplemachines.org/mods/index.php?mod=579 Ya aviso de que el personal generalmente es bastante vago y lo de los Tags le va a sonar a chino a mas de uno, pero bueno... , por probar que no quede...