No la verdad es que no hace falta ir tan lejos. Puesto que un diccionario normalmente es una base de datos, solo hace falta hacer una búsqueda de la palabra exacta. Lo mismo pasa con la RAE, se puede hacer un script que busque la palabra y devuelva los resultados.
<?php
function buscar_rae($palabra=NULL){
if(empty($palabra)){return false;} // Obtenemos la respuesta JSON de una API para la RAE.
// Si devuelve [] es que no ha encontrado la palabra.
if($contenido=='[]' || $contenido===false){return false;} else {return $contenido;}
}
$palabra = 'idiota';
$busqueda = buscar_rae($palabra);
if(!$busqueda){
echo 'La palabra no existe';
} else {
echo 'La palabra existe';
echo '<br /><pre>';
}
?>
En este caso devolvería algo así:
La palabra existe
Array
(
[0] => Que padece de idiocia.U. t. c. s.
[1] => EngreÃdo sin fundamento para ello.U. t. c. s.
[2] => Tonto, corto de entendimiento.
[3] => Que carece de toda instrucción.
)
El problema como ya he mencionado es que añade un tiempo de ejecución bastante alto... y no es viable en paginas de mucho trafico donde lo tienes que comprobar cada 2x3 (ej: Los usuarios nuevos en el mes enero de este foro han sido 2259)..
Edit: He estado jugando un poco xD
<?php
function detectar_nick($nick=NULL,$lista=NULL,$rae=false){
// Si el nick o la lista estan vacios o si lista no es array.. false.
$resultado = array(); // No lo tengas en cuenta.. es para el STRICT // Eliminar acentos.
$acento = array('é'.'á','ó','ú','í','É','Á','Ó','Ú','Í'); $nacento = array('e','a','o','u','i','E','A','O','U','I');
// Buscar en la RAE?
if($rae!==false){
$url = 'http://rae-quel.appspot.com/json?query='.urlencode($nick); // Si la palabra no existe, devolver false.. si existe devolver true.
if(strlen(implode($contenido)) < 4|| $contenido===false){$resultado['rae']=false;} else {$resultado['rae']=true;}
}
// Por cada palabra en la lista negra.
foreach($lista as $item){
// Busqueda directa.
if($item==$nick){$resultado['directo']=true;}else{$resultado['directo']=false;}
// Plural Directo
if($item.'s'==$nick){$resultado['directo_plural']=true;}else{$resultado['directo_plural']=false;}
// Preciso con stristr
if(stristr($nick,$item)){$resultado['precisa']=true;}else{$resultado['precisa']=false;} // Plural preciso
if(stristr($nick,$item.'s')){$resultado['precisa_plural']=true;}else{$resultado['precisa_plural']=false;} // Separamos la palabra si contiene espacios.
foreach(explode(' ',$nick) as $palabra){ // Directo
if($palabra==$item){$resultado['directo_separado']=true;}else{$resultado['directo_separado']=false;}
// Plural
if($palabra==$item.'s'){$resultado['directo_separado_plural']=true;}
else{$resultado['directo_separado_plural']=false;}
// Si coincide alguno, rompemos foreach
if($resultado['directo_separado']===true || $resultado['directo_separado_plural']===true) {break;}
}
// Si hay coincidencia con anteriores = romper foreach
if($resultado['directo_plural']===true ||
$resultado['precisa']===true ||
$resultado['precisa_plural']===true ||
$resultado['directo_separado']===true ||
$resultado['directo_separado_plural']){
break;
}
}
// Devolver en forma de array.
return $resultado;
}
$palabra = 'minombre';
$lista_negra = array('idiota','puto','negro','lechuga con tomate','culo'); $comprobacion = detectar_nick($palabra,$lista_negra,true);
foreach($comprobacion as $n=>$v){
if($v===true){echo '<font color="red">'.$n.' DETECTADO</font><br />';}
else{echo '<font color="green">'.$n.' LIMPIO</font><br />';}
}
?>
5 ejemplos:
Idiota
rae DETECTADO
directo DETECTADO
directo_plural LIMPIO
precisa DETECTADO
precisa_plural LIMPIO
directo_separado DETECTADO
directo_separado_plural LIMPIO
idiotas
rae DETECTADO
directo LIMPIO
directo_plural DETECTADO
precisa DETECTADO
precisa_plural DETECTADO
directo_separado LIMPIO
directo_separado_plural DETECTADO
crepusculo
rae LIMPIO
directo LIMPIO
directo_plural LIMPIO
precisa DETECTADO
precisa_plural LIMPIO
directo_separado LIMPIO
directo_separado_plural LIMPIO
soyputo
rae LIMPIO
directo LIMPIO
directo_plural LIMPIO
precisa DETECTADO
precisa_plural LIMPIO
directo_separado LIMPIO
directo_separado_plural LIMPIO
Soy un puto
rae LIMPIO
directo LIMPIO
directo_plural LIMPIO
precisa DETECTADO
precisa_plural LIMPIO
directo_separado DETECTADO
directo_separado_plural LIMPIO
En base a TRUE o FALSE se puede sacar un porcentaje que en caso de que sea igual o mayor de por no valido el nick pero....
seguira fallando en muchos casos... y se puede evitar de muchas formas...
c_u_l_o:
rae LIMPIOdirecto LIMPIOdirecto_plural LIMPIOprecisa LIMPIOprecisa_plural LIMPIOdirecto_separado LIMPIOdirecto_separado_plural LIMPIOSaludos