Foros del Web » Programando para Internet » PHP »

¿Todo se encuentra indefinido?

Estas en el tema de ¿Todo se encuentra indefinido? en el foro de PHP en Foros del Web. Hola amigos, tengo un serio problema con el funcionamiento de mi programa en php. Genero las keywords de una web y las guardo en una ...
  #1 (permalink)  
Antiguo 26/11/2012, 20:50
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 15 años, 1 mes
Puntos: 29
Exclamación ¿Todo se encuentra indefinido?

Hola amigos, tengo un serio problema con el funcionamiento de mi programa en php.

Genero las keywords de una web y las guardo en una base de datos, pero lo que pasa es que me muestra los siguientes errores:

Cita:
Notice: Undefined index: PiraterÃ*a
Cita:
Notice: Undefined index: Nicolo
Cita:
Notice: Undefined index: Galaxy
Y así por cada keyword que extrajo, no se como evitar que me muestre esta extensaaaaa lista, pero lo peor no es esto, sino que ni siquiera guarda las keywords de cada web

Utilizo el sig código:

Código PHP:
function extractkeys($html,$cantidad=20){
$keywords=array();
$palabrasNoConsideradas="que,qué,cuán,cuan,los,las,una,unos,unas,donde,dónde,como,cómo,cuando,porque,por,para,según,sin,con,mas,más,pero,del";
$palabrasNoConsideradas=explode(",",$palabrasNoConsideradas);

$html=strip_tags(html_entity_decode($html,ENT_NOQUOTES,"UTF-8"));
$html=preg_replace(array('/\s+/'),' ',$html);
$html=preg_replace(array('/\r/''/\n/','/[¿!¡;,:\.\?#@()"]/'),'',$html);
$html=explode(" ",$html);
$palabras=array();
foreach(
$html as $palabra){
if(
ctype_upper($palabra) and count($keywords)<$cantidad and !in_array($palabra,$keywords)){ array_push($keywords,$palabra); } //las palabras en mayúscula son keywords automáticamente
else{
if(
strlen($palabra)>and !in_array($palabra,$palabrasNoConsideradas)){
if(
$palabras[$palabra]){ $palabras[$palabra]++; }
else{ 
$palabras[$palabra]=1; }
}
}
}
arsort($palabras);
$palabras=array_keys(array_slice($palabras,0,$cantidad-count($keywords)));
$keywords=array_merge($palabras,$keywords);

return 
implode(",",$keywords);

En $html tengo la página descargada gracias a DOM, y para utilizar esta función hago lo siguiente:

Código PHP:
if (empty($keywords)){
extractkeys($html,$cantidad);

antes de utilizar esta función extraigo la meta keywords, y en caso de que no exista, esta quedará vacía y utilizo de esta manera la función extractkeys.

Saludos!!! espero que puedan ayudarme
  #2 (permalink)  
Antiguo 26/11/2012, 21:23
Avatar de Javier01  
Fecha de Ingreso: febrero-2008
Ubicación: Montevideo
Mensajes: 261
Antigüedad: 16 años, 2 meses
Puntos: 31
Respuesta: ¿Todo se encuentra indefinido?

Buenas!
Por lo que estuve viendo, el problema te da en el código
Código PHP:
Ver original
  1. if($palabras[$palabra]){
Lo cual no entiendo bien lo que quieres hacer con ese if.
Lo que veo es que $palabras es un array vacío, y cuando vas a buscar el indice $palabra no va a existir.
tal vez te sirva usar algo como
Código:
array_key_exists($palabra, $palabras)
para saber si esta definido el indice.
En caso de no estar, tu sabrás que debe hacer.

Saludos
__________________
Tomarse un tiempo para redactar correctamente la pregunta, utilizando los signos de puntuación adecuados, es ganar tiempo y calidad en la respuesta.
  #3 (permalink)  
Antiguo 27/11/2012, 08:55
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 15 años, 1 mes
Puntos: 29
Respuesta: ¿Todo se encuentra indefinido?

Hola!, el código lo encontré en internet y lo adapté al que utilizo (cambiando la variable $texto por $html, que es donde yo guardo la web).

Añadí:

Cita:
array_key_exists($palabra, $palabras);
Justo esta sección es donde marca todos los errores de que no se encuentran definidas cada una de las keywords:

Código PHP:
Ver original
  1. if($palabras[$palabra]){ $palabras[$palabra]++; }

Adapte este código porque creí que era más óptimo para generar keywords pero ya comienzo a dudar jaja.

Saludos y gracias por responder!!!!

Etiquetas: encuentra, html
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:15.