Foros del Web » Programando para Internet » PHP »

recuperar solo letras que esten en el abcedario

Estas en el tema de recuperar solo letras que esten en el abcedario en el foro de PHP en Foros del Web. hola tengo un pequeño problema resulta que tengo 50.000 palabras en una base de datos de las cuales muchas estan corruptas o son invalidas para ...
  #1 (permalink)  
Antiguo 16/10/2008, 13:27
 
Fecha de Ingreso: noviembre-2002
Mensajes: 746
Antigüedad: 21 años, 5 meses
Puntos: 6
recuperar solo letras que esten en el abcedario

hola

tengo un pequeño problema
resulta que tengo 50.000 palabras en una base de datos de las cuales muchas estan corruptas o son invalidas para lo que necesito.

entonces lo que quiero es recorrer la base de datos y coger solo las palabras que contengan letras de la "A" a la "Z" o lleven o seannumero.

en principio seria eso, descargar las palabras que no cumplan esa norma, aunq tambien puede ser interesante cambiar el caracter incorrecto por un "-"

tienen a mano alguna funcion que me ayude?


gracias

Última edición por suntus; 16/10/2008 a las 14:01
  #2 (permalink)  
Antiguo 16/10/2008, 14:53
Avatar de RollerSky  
Fecha de Ingreso: marzo-2008
Mensajes: 123
Antigüedad: 16 años
Puntos: 8
Respuesta: recuperar solo letras que esten en el abcedario

mm que te parece hacerlo con la funcion str_replace de PHP, en un vector guardas los caracteres no permitidos y reemplazas.. el codigo seria algo asi:

Código PHP:
<?php
$carct_invalidos 
= array('ñ','$','/'); //etc....

//Haces tu consulta, y en una variable guardas toodas las palabras Como un parrafo.

$string "Hola Mundo &% aqui texto ' y mas texto $ .....";

for(
$i=0$i <= count($carct_invalidos ); $++){
    
$string str_replace($carct_invalidos[$i], "_" ,$string); //Esto te reemplaza los caracteres invalidos por un "_"
}
?>

salu2! espero te sirva
  #3 (permalink)  
Antiguo 16/10/2008, 16:15
 
Fecha de Ingreso: noviembre-2002
Mensajes: 746
Antigüedad: 21 años, 5 meses
Puntos: 6
Respuesta: recuperar solo letras que esten en el abcedario

Cita:
Iniciado por RollerSky Ver Mensaje
mm que te parece hacerlo con la funcion str_replace de PHP, en un vector guardas los caracteres no permitidos y reemplazas.. el codigo seria algo asi:

Código PHP:
<?php
$carct_invalidos 
= array('ñ','$','/'); //etc....

//Haces tu consulta, y en una variable guardas toodas las palabras Como un parrafo.

$string "Hola Mundo &% aqui texto ' y mas texto $ .....";

for(
$i=0$i <= count($carct_invalidos ); $++){
    
$string str_replace($carct_invalidos[$i], "_" ,$string); //Esto te reemplaza los caracteres invalidos por un "_"
}
?>

salu2! espero te sirva
si roller estaba mirando usar str_replace
el problema es que hacerlo asi sera casi imposible, porq los caracteres que quiero anular son cientos, el motivo es sobre todo por mal codificacion asi que imagina la cantidad de simbolos raros que hay,

es por estoy me gustaria decirle que caracteres son los de no reemplazo justo lo contrario a lo que propones
  #4 (permalink)  
Antiguo 12/11/2008, 08:52
Avatar de iontxu  
Fecha de Ingreso: marzo-2008
Mensajes: 65
Antigüedad: 16 años, 1 mes
Puntos: 7
Respuesta: recuperar solo letras que esten en el abcedario

Yo estoy buscando exactamente lo mismo. Algo del estilo
[*] Definir una variable con todos los caracteres PERMITIDOS[*] Pasar un bucle que rechace o que modifique aquellas cadenas que contengan al menos un caracter no incluido en la lista de PERMITIDOS

Si encuentro algo lo colgaré por aquí, saludos!
  #5 (permalink)  
Antiguo 12/11/2008, 09:05
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: recuperar solo letras que esten en el abcedario

El tema es que no podés anular un "ñ" porque si, por ahí es mejor saber que es una "ñ" y reemplazarla por tal. Contanos un poco más que es lo que tenes que sacar que son "cientos" y vemos si es mejor una regex o un simple replace.

PD: RollerSky, no es necesario hacer un for sobre $carct_invalidos, podes usarlo directamente en el replace (soporta arrays):
Código PHP:
<?php
$carct_invalidos 
= array('ñ','$','/'); //etc....
 
//Haces tu consulta, y en una variable guardas toodas las palabras Como un parrafo.
 
$string "Hola Mundo &% aqui texto ' y mas texto $ .....";
 
$string str_replace($carct_invalidos'_' ,$string); //Esto te reemplaza los caracteres invalidos por un "_"
}
?>
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #6 (permalink)  
Antiguo 12/11/2008, 09:40
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: recuperar solo letras que esten en el abcedario

Cita:
Iniciado por iontxu Ver Mensaje
Yo estoy buscando exactamente lo mismo. Algo del estilo
[*] Definir una variable con todos los caracteres PERMITIDOS[*] Pasar un bucle que rechace o que modifique aquellas cadenas que contengan al menos un caracter no incluido en la lista de PERMITIDOS

Si encuentro algo lo colgaré por aquí, saludos!
Puedes hacer directamente una consulta a la tabla de la base de datos. SQL permite expresiones regulares, y con las cláusulas apropiadas seleccionas los registros que te interese sin más. Eso es infinitamente mejor que seleccionarlos todos, guardarlos en un array y "procesarlos" desde PHP.

Por otro lado, es muy posible que lo que parecen palabras "corruptas" simplemente sean registros con codificaciones de caracteres distintas a la que se ha definido para mostrar la cadena. Antes de eliminar o modificar algo, yo creo que sería mejor asegurarse de que realmente están mal, y que no es otra cosa.

Un saludo.
  #7 (permalink)  
Antiguo 12/11/2008, 10:11
Avatar de iontxu  
Fecha de Ingreso: marzo-2008
Mensajes: 65
Antigüedad: 16 años, 1 mes
Puntos: 7
Respuesta: recuperar solo letras que esten en el abcedario

Se me ha ocurrido una manera de resolverlo que puede servir, aunque seguro que hay maneras más fáciles y rápidas.
Ahí va:
Código PHP:
function comprobar_validos($cadena){
 
$validos "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRTSUVWXYZ";
 
$longitud strlen($cadena);
 for (
$i 0$i $longitud$i++){
  if(
strpos($validos,$cadena[$i])===false){
   return 
false;
   exit;
  }
 }
 return 
true;
 exit;

Lo que hace esta función es recipir una cadena, mide su longitud, y va evaluando carácter a carácter si pertenece al campo de caracteres válidos.

¿Qué os parece?

Luego cada cual que lo utilice como quiera:
  • Para no entrar en un condicional
  • Para sustituir el carácter no admitido por otro mediante str_replace()
  • Para borrarlos...
  #8 (permalink)  
Antiguo 12/11/2008, 10:29
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: recuperar solo letras que esten en el abcedario

Sólo como curiosidad, el equivalente de esa función usando expresiones regulares sería:

Código PHP:
function comprobar_validos$cadena ){
    return 
preg_match"/^[[:alpha:]]+$/i"$cadena );

Un saludo.

PD/ Hasta hace pocas semanas, yo habría hecho exactamente como tú. Pero desde que descubrí esa maravilla llamada expresiones regulares... ya no sé vivir sin ellas!
  #9 (permalink)  
Antiguo 12/11/2008, 10:37
Avatar de iontxu  
Fecha de Ingreso: marzo-2008
Mensajes: 65
Antigüedad: 16 años, 1 mes
Puntos: 7
Respuesta: recuperar solo letras que esten en el abcedario

Cita:
Iniciado por Deschamps Ver Mensaje
Sólo como curiosidad, el equivalente de esa función usando expresiones regulares sería:

Código PHP:
function comprobar_validos$cadena ){
    return 
preg_match"/^[[:alpha:]]+$/i"$cadena );

Un saludo.

PD/ Hasta hace pocas semanas, yo habría hecho exactamente como tú. Pero desde que descubrí esa maravilla llamada expresiones regulares... ya no sé vivir sin ellas!
Y donde se puede encontrar una introducción a Expresiones Regulares que esté bien, porque hasta ahora no tenía ni idea de su existencia.
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 21:47.