elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 12:32  


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)

+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP
| | | |-+  Algoritmo Key Words
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Algoritmo Key Words  (Leído 857 veces)
El As del Club Paris


Desconectado Desconectado

Mensajes: 1.818


Ver Perfil WWW
Algoritmo Key Words
« en: 22 Julio 2011, 18:35 »

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

sudo suck --mycock -o force
madpitbull_99
Moderador Global
***
Desconectado Desconectado

Mensajes: 1.898



Ver Perfil WWW
Re: Algoritmo Key Words
« Respuesta #1 en: 22 Julio 2011, 19:43 »

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



«Si quieres la paz prepárate para la guerra» Flavius Vegetius

[Taller]Instalación/Configuración y Teoría de Servicios en Red
drvy | BSM


Desconectado Desconectado

Mensajes: 1.129


badstupidmonkey


Ver Perfil WWW
Re: Algoritmo Key Words
« Respuesta #2 en: 24 Julio 2011, 18:45 »

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...
Código
<?php
   function findkeyword($text,$false,$min,$repeat){
       $keyword = array();
       $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]
               if(!in_array($word,$false)){
                   $findrepeat = substr_count($text, $word); // Contar repeticiones
                   if($findrepeat > $repeat) {$keyword[] = $word;}// añadir a lista clave.
               }
           }
       }
       return array_unique($keyword);
   }
 
   $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
Código:
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:
Código:
Array ( [0] => stupid [1] => monkey [2] => chicken )


Saludos
En línea
madpitbull_99
Moderador Global
***
Desconectado Desconectado

Mensajes: 1.898



Ver Perfil WWW
Re: Algoritmo Key Words
« Respuesta #3 en: 10 Agosto 2011, 23:12 »

Lo he hecho de otra manera, aunque la función de drvy es más flexible (filtra palabras).


Código
<?php
 
/*
* Returns the most repetead words (llonger than $long)
* given in a string
*@author MadPitbull
*/

function kWords($txt, $lim, $long = 3) {
 
$e = explode(" ", str_replace(array(",", "."), " ", strtolower($txt)));
$a = array_count_values($e);
arsort($a); array_shift($a);
$p = array_keys($a);
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:
Código:

Array
(
    [0] => stupid
    [1] => monkey
    [2] => chicken
    [3] => you!
    [4] => than
)
« Última modificación: 10 Agosto 2011, 23:16 por madpitbull_99 » En línea



«Si quieres la paz prepárate para la guerra» Flavius Vegetius

[Taller]Instalación/Configuración y Teoría de Servicios en Red
El As del Club Paris


Desconectado Desconectado

Mensajes: 1.818


Ver Perfil WWW
Re: Algoritmo Key Words
« Respuesta #4 en: 10 Agosto 2011, 23:19 »

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

sudo suck --mycock -o force
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines