Autor
|
Tema: Algoritmo Key Words (Leído 3,365 veces)
|
[u]nsigned
Desconectado
Mensajes: 2.397
JS/Node developer
|
Bueno, el titulo no es muy descriptivo asi que me explicare.
Lo que quiero es saber si existe algun algoritmo(clase) que a partir de un texto dado, el contenido de una noticia por ejemplo, deduzca cuales podrian ser las posibles 'palabras claves' de dicha noticia. Estoy realizando un portal de noticias, y la idea es no tener que crear a 'mano' las palabras claves o TAGS para cada noticia...existira algo asi o una fomra de hacerlo?
Una forma se me ocurre seria buscando palabras poco usadas como nombres poprios de personas y ciudades, y tambien descartando palabras muy usadas como adjetivos, adverbios, proposiciones, etc..
Saludos
|
|
|
En línea
|
No hay atajo ante la duda, el misterio se hace aquí... Se hace carne en cada uno, el misterio es existir!
|
|
|
madpitbull_99
|
Supongo que con substr_count() se podría hacer algo. Primero tendrías que meter todas las palabras en un array y después comprobar cuál es la que más se repite. Esas serán los "tags" de la noticia.
|
|
|
En línea
|
|
|
|
#!drvy
|
Woah, bastante complicado lo veo Aquí siempre tendria que estar el ojo humano o algo que se le acerque xD. Así a primera vista podría acercarse un poquitin xD... <?php function findkeyword($text,$false,$min,$repeat){ $text = strtolower($text); // Covertir a letras minusculas $words = explode(' ',$text); // Separar palabras foreach($words as $word){ if(preg_match('[\w{'.$min.',}]', $word)){ // Eliminar cualquier palabra menor de # chr. $word = preg_replace('[\W]','',$word); // Eliminar cualquier chr excepto [a-z0-9] $findrepeat = substr_count($text, $word); // Contar repeticiones if($findrepeat > $repeat) {$keyword[] = $word;}// añadir a lista clave. } } } } $repeat = 2; // minimas veces repetida para ser keyword. $min = 3; // minima longitud de la palabra $texto = ''; // texto para procesar $false = array('you','me','he','and'); // etc.. lista de palabras que no estan admitidas. print_r(findkeyword ($texto,$false,$min,$repeat)); ?>
Suponiendo que el texto es Silence! Stupid monkey. I kill you. You think you\'r better than my chicken! NO! Stupid monkey. My chicken is better than you! I kill you! Stupid monkey... my chicken is the best! Las palabras claves que saca son: Array ( [0] => stupid [1] => monkey [2] => chicken ) Saludos
|
|
|
En línea
|
|
|
|
madpitbull_99
|
Lo he hecho de otra manera, aunque la función de drvy es más flexible (filtra palabras). <?php /* * Returns the most repetead words (llonger than $long) * given in a string *@author MadPitbull */ function kWords($txt, $lim, $long = 3) { for ($l = 0; $l < count($p); $l++) { if (strlen($p[$l]) >= $long ) { $f[] = $p[$l]; } } for ($i = 0; $i < $lim; $i++) { $kW[] = $f[$i]; } return $kW; } $txt = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum."; $txt2 = "Silence! Stupid monkey. I kill you. You think you\'r better than my chicken! NO! Stupid monkey. My chicken is better than you! I kill you! Stupid monkey... my chicken is the best!"; $txt3 = "Note that in a multidimensional array, each element may be identified by a _sequence_ of keys, i.e. the keys that lead towards that element. Thus \"preserving keys\" may have different interpretations. Ivan's function for example creates a two-dimensional array preserving the last two keys. Other functions below create a one-dimensional array preserving the last key. For completeness, I will add a function that merges the key sequence by a given separator and a function that preserves the last n keys, where n is arbitrary."; kWords($txt, 5, 4); ?>
Primer parámetro: el texto donde buscar; Segundo: es el número de palabras que quieres "filtrar"; Tercero: número mínimo de caracteres que debe tener la palabra. Devuelve un array, de tipo: Array ( [0] => stupid [1] => monkey [2] => chicken [3] => you! [4] => than )
|
|
« Última modificación: 10 Agosto 2011, 23:16 pm por madpitbull_99 »
|
En línea
|
|
|
|
[u]nsigned
Desconectado
Mensajes: 2.397
JS/Node developer
|
Muchas gracias Mad, me sera de mucha ayuda, lo implementare con una base de palabras 'poco utiles' que estoy armando con preposiciones, articulos, etc.
Saludos
|
|
|
En línea
|
No hay atajo ante la duda, el misterio se hace aquí... Se hace carne en cada uno, el misterio es existir!
|
|
|
|
|