Son numerosos y cada vez más, los sitios web que disponen de un buscador que permite al usuario introducir uno o más términos y buscar estos dentro del contenido de la base de datos. Tiendas virtuales con todo tipo de productos, de alimentación, de cuidado personal, libros, viajes, etc., el que devolvamos o dejemos de devolver un resultado de nuestra base de datos puede suponer la diferencia entre una venta o una venta perdida.

Muchos sitios (algunos muy conocido y superutilizado) intentan utilizar técnicas como la de “pluralizar” y “singularizar” la petición del usuario. Por ejemplo, el usuario quiere buscar “fresas”, el sistema detecta una “s” al final de la palabra y la “singulariza”, ahora tenemos “fres”. A continuación, el sistema busca todos los productos que contengan la palabra o parte de la palabra “fres*” y por tanto el resultado es de lo más variopinto (a parte de elevado para un supermercado, por ejemplo): “pescadilla fresca”, “limpiador fresco”, “refresco naranja”, y un largo etc.

Nosotros vamos a intentar aplicar un sistema para llegar a resultados más exactos gracias a las APIS de Apicultur y en particular, la de lematización. Puedes ver un poco más en qué consiste en este post: ¿Para qué sirve la lematización?.

Y ahora que nos hemos puesto en antecedentes, vamos a ver la manera práctica de llevar esto a cabo y como explotarla en nuestro web.

Los pasos que seguiremos son los siguientes:

  1. Creamos una cuenta en Apicultur.com y nos suscribimos a las APIs de lematización.
  2. Seleccionar los campos de la base de datos sobre los que realizamos búsqueda textual.
  3. Procesar cada una de las palabras de estos campos y almacenar el resultado del proceso en un nuevo campo asociado al mismo.
  4. Permitir al usuario elegir entre búsqueda “normal” y “lematizada” (totalmente opcional).
  5. Procesar la petición del usuario (“lematizarla”) y buscar los registro que contengan la petición procesada en el nuevo campo.

Creación de una cuenta en Apicultur.com

Para crear una cuenta de utilización de APIS, tienes que realizar unos sencillos pasos: acceder a la store de apis, registrarte como usuario, suscribirte a la api de lematización y obtener el apikey para su utilización.
Si quieres información más detalla de este proceso, puedes consultar en:

  • El video de como utilizar las apis de Apicultur. video
  • Instrucciones de uso. enlace
  • Tutorial de Adictos al Trabajo sobre Apicultur. enlace

Seleccionar los campos

En este paso seleccionamos el campo o los campos de la base de datos que contiene el nombre del producto y/o la descripción del mismo. Crearemos un campo nuevo para almacenar los valores lematizados de dichos campos, nombre_producto_lematizado y descripcion_producto_lematizado.

Procesar las palabras

Para ilustrar este proceso vamos a utilizar PHP, aunque es totalmente exportable a cualquier otro lenguaje de programación.
Creamos una variable que almacene nuestro AccessKey y la url de la API que vamos a utilizar, este caso la de lematización. Añadimos a la url la palabra de la cual queremos saber su lema:

[php autolinks=”false” gutter=”true” collapse=”false” firstline=”1″ highlight=”true” light=”true” smarttabs=”true” tabsize=”4″ toolbar=”true”]
$access_key = "7Qdfdf36HKIEsg7XsUKNsaqFx2sB1"; #APIKey de nuestra aplicación en APICultur. Para más informacion: http://www.apicultur.com/instrucciones/
$url="http://store.apicultur.com/api/lematiza-clasico/1.0.0/".$palabra;
[/php]

Preparamos una conexión para hacer la petición:

[php autolinks=”false” gutter=”true” collapse=”false” firstline=”4″ highlight=”true” light=”true” smarttabs=”true” tabsize=”4″ toolbar=”true”]
#Iniciamos curl
$ch = curl_init();

#Pasamos nuestro API Key y señalamos que lo que nos van a devolver es JSON
curl_setopt($ch,CURLOPT_HTTPHEADER,array( ‘Accept: application/json’, ‘Authorization: Bearer ‘ . $access_key ));

#Pasamos la url de la api
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

#Introducimos en una variable el valor que nos devuelve la api
$respuesta = curl_exec($ch);

$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);

#Cerrar el recurso cURL y liberar recursos
curl_close($ch);

#Comprobamos el código devuelto por la API para ver que todo ha salido correctamente y en caso positivo devolvemos ok
switch ($http_status) {
case ‘200’:
$lemas = json_decode($respuesta);
break;
default:
echo "<br/>Error al lematizar la palabra:" .$palabra ;
echo "<br/>Error:" .$http_status ;
break;
}
[/php]

Ahora accedemos a los diferentes lemas de la palabra que hemos introducido:

[php autolinks=”false” gutter=”true” collapse=”false” firstline=”35″ highlight=”true” light=”true” smarttabs=”true” tabsize=”4″ toolbar=”true”]
if (isset($lemas)){

$laPalabra = $lemas->{‘palabra’};
$losLemas = $lemas->{‘lemas’};

echo "<br/><b>La palabra: " .$laPalabra."</b>";

foreach ($losLemas as $lema){

$elLema = $lema->{‘lema’};
$laCategoria = $lema->{‘categoria’};
echo "<br/>Lema: " .$elLema;
echo "- la categoria: " .$laCategoria;
}
}
[/php]

Repetimos esta operación por cada una de las palabras que contenga el registro que estamos lematizando. Una vez lematizadas todas las palabras de un registro, podemos actualizar el mismo con los lemas que corresponden a su título y descripción en lo nuevos campos creados para tal efecto.

Habilitar la selección del tipo de búsqueda a realizar (opcional)

Este paso es totalmente opcional y consiste en habilitar al usuario la posibilidad de que elija entre la búsqueda normal, la que buscará en los títulos y descripciones no tratadas o la nueva búsqueda.

Procesar la petición del usuario

Finalmente, vamos a modificar el proceso de búsqueda de nuestro web, en vez de recoger el término de búsqueda del usuario directamente y buscarlo en nuestro campo título o descripción, vamos a “lematizarlo” y posteriormente buscar cada uno de los lemas obtenidos dentro de las nuevas columnas nombre_producto_lematizado y descripcion_producto_lematizado.

Para realizar esta operación, podemos utilizar el mismo código descrito anteriormente, pasando como parámetro “palabra” el término por el que está buscando el usuario.

Conclusiones

Como veis, la lematización es un proceso que, aunque añada un pequeño “delay” en vuestra peticiones, hace que los resultados obtenidos sean más amplios y concisos.
En próximas entregas, os describiremos una nueva API que permite realizar la operativa aquí descrita sin necesidad de “lematizar” previamente toda vuestra base de datos.

En el siguiente enlace, tenéis el enlace al código de ejemplo php utilizado en este post: enlace

Enlaces recomendados

  • How to use Apicultur. video
  • Apicultur instrucciones enlace
  • ¿Para qué sirve la lematización? enlace
  • Análisis de sentimientos con soporte Apicultur enlace
Share →