Foros del Web » Programando para Internet » PHP »

problemas con substr_count

Estas en el tema de problemas con substr_count en el foro de PHP en Foros del Web. Hola amig@s; Necesito hacer una aplicación que busque palabras en determinada web. Lo he hecho (a grosso modo) así: Código PHP: //abró una web como si fuera un archivo y guardo todo su contenido, en función de la web $datafile puede contener bastante información. $dataFile = fopen ...
  #1 (permalink)  
Antiguo 22/01/2006, 18:24
Avatar de forecast  
Fecha de Ingreso: octubre-2004
Mensajes: 259
Antigüedad: 19 años, 5 meses
Puntos: 4
problemas con substr_count

Hola amig@s;

Necesito hacer una aplicación que busque palabras en determinada web.

Lo he hecho (a grosso modo) así:

Código PHP:
//abró una web como si fuera un archivo y guardo todo su contenido, en función de la web $datafile puede contener bastante información.
$dataFile=fopen($web,"r")//$web contiene la web a analizar

if($dataFile )
{
   
$buffer="";
   while (!
feof($dataFile)) 
   {
    
$buffer.=fread($dataFile1024);
   }
   
fclose($dataFile);
}

//vector con las palabras a buscar, estos vectores pueden ser de al menos 30  palabras
$palabra[]="palabra1";
$palabra[]="palabra2":
$palabra[]="palabra3";

foreach(
$palabra as $index)
{
   
$total+=substr_count($buffer,$index);
}    
echo 
$total
El problema que tengo con todo esto es que el resultado no se ajusta muy bien a lo que existe, es decir, hay palabras que existen en la web y que no soy capaz de detectar. No se si la función substr_count es adecuada para lo que hago, o si tiene limitaciones (busco las palabras tanto en mayúsculas y minísculas, se que lo tiene en cuenta).

A ver si alguién me dice como afinar un poco más a la hora de buscar estas palabras.

Gracias de antemano.
  #2 (permalink)  
Antiguo 22/01/2006, 19:23
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
substr_count distingue mayúsculas de minúsculas. Si querés encontrar todas, tendrías que pasar el texto a mayúsculas con strtoupper (o minúsculas con strtolower) y hacer lo mismo con las palabras antes de ejecutar substr_count
  #3 (permalink)  
Antiguo 23/01/2006, 02:34
Avatar de forecast  
Fecha de Ingreso: octubre-2004
Mensajes: 259
Antigüedad: 19 años, 5 meses
Puntos: 4
Ya se que substr_count distingue entre mayúsculas y minúsculas. Lo que hago es en el vector palabras incluir la misma palabra en minísculas y mayúsculas y con la primera en mayúsculas.

De todos modos sigue sin contarme palabras que están en la web, tal y como yo las tengo en el vector palabras.

Más ayuda por favor.
  #4 (permalink)  
Antiguo 23/01/2006, 03:07
Avatar de nosoynadie  
Fecha de Ingreso: noviembre-2005
Ubicación: dando vueltas por aquí
Mensajes: 206
Antigüedad: 18 años, 3 meses
Puntos: 1
Hola forecast,

Cita:
Ya se que substr_count distingue entre mayúsculas y minúsculas. Lo que hago es en el vector palabras incluir la misma palabra en minísculas y mayúsculas y con la primera en mayúsculas.
perdona si lo siguiente es una chorrada pero ¿por qué haces esto? ¿No te vale con tenerlas todas en minúsculas/mayúsculas y convertir el texto que leas de la web a ese mismo tipo de letra?

Aquí va otra pregunta quizás chorra, ¿tienes en cuenta lo que dice la ayuda de la función substr_count() sobre el hecho de que no cuenta las cadenas que se solapan? Mira el ejemplo que dan los de php.net

Código PHP:
// el resultado es solo 1, ya que no se tienen en cuenta las subcadenas que se solapan
$text2 'gcdgcdgcd';
echo 
substr_count($text2'gcdgcd'); 
__________________
http://www.nosoynadie.net/
  #5 (permalink)  
Antiguo 23/01/2006, 04:19
Avatar de forecast  
Fecha de Ingreso: octubre-2004
Mensajes: 259
Antigüedad: 19 años, 5 meses
Puntos: 4
Me he documentado bien sobre la función. Se que no cuenta las cadenas que se solapan...

Sobre lo de buscar la palabra en mayúsculas, minúsculas... tal vez sea una chorrada, pensaba que eso llevaría menos proceso que pasar todo el texto (que en algunos puede ser mucho) a minúsculas, además me interesa conservar el código fuente de la página (lo que guardo en $buffer) intacto.
Probaré a crear otra variable que almacene todo el código
en minúsculas a ver que tal responde.

Creo que a lo mejor el fallo va más en que lo que abro es una web, es decir es código html y no se como esto afecta a que haya palabras que no detecta... la verdad es que no se que pasa.
  #6 (permalink)  
Antiguo 23/01/2006, 06:52
Avatar de nosoynadie  
Fecha de Ingreso: noviembre-2005
Ubicación: dando vueltas por aquí
Mensajes: 206
Antigüedad: 18 años, 3 meses
Puntos: 1
¿cuando dices que hay palabras que no detecta a qué te refieres? ¿puedes poner un ejemplo?

En relación a lo que dices de que es un código HTML lo que recoges, fácilmente se te/nos estan pasando los caracteres especiales (todo lo referente a acentos, ñ, signos matemáticos, símbolos -como el euro-).

¿Puede venir por ahí la discrepancia?
__________________
http://www.nosoynadie.net/
  #7 (permalink)  
Antiguo 25/01/2006, 11:35
Avatar de forecast  
Fecha de Ingreso: octubre-2004
Mensajes: 259
Antigüedad: 19 años, 5 meses
Puntos: 4
Bueno. Hice lo que me comentabais y pase primero todo el texto a minúsculas. Todo funcionó mucho mejor.
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 07:54.