64
Graduado en Ingeniería Informática Universidad Politécnica de Madrid Escuela Técnica Superior de Ingenieros Informáticos TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para comercio electronico Autor: Salvador González Gerpe Director: Miguel García Remesal MADRID, JUNIO DE 2019

TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

Graduado en Ingeniería Informática

Universidad Politécnica de Madrid

Escuela Técnica Superior deIngenieros Informáticos

TRABAJO FIN DE GRADO

Servicio de búsqueda inteligente para comercioelectronico

Autor: Salvador González GerpeDirector: Miguel García Remesal

MADRID, JUNIO DE 2019

Page 2: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los
Page 3: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

ÍNDICE1. Introducción 1

1.1. Presentación del Trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2. Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.3. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2. Estado del Arte 32.1. Tecnológico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.2. Sistemas Actuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3. Diseño 133.1. Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.2. Solución propuesta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.3. Diseño de Alto Nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.3.1. Diagrama Entidad Relación . . . . . . . . . . . . . . . . . . . . 15

3.3.2. Casos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.4. Diseño de Bajo Nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3.4.1. Esquema de la Base de Datos Pre-Modificación . . . . . . . . . . 22

3.4.2. Esquema de la Base de Datos Post-Modificación . . . . . . . . . 27

3.4.3. Ejecución del servicio . . . . . . . . . . . . . . . . . . . . . . . 32

3.5. Arquitectura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.5.1. Diagrama de Flujo . . . . . . . . . . . . . . . . . . . . . . . . . 33

4. Implementación 364.1. Fase de modificación del campo “description” . . . . . . . . . . . . . . . 36

4.2. Fase de lematización de tablas . . . . . . . . . . . . . . . . . . . . . . . 36

4.3. Fase de incorporación de índice “Full-Text” Index a las tablas lematizadas 37

4.4. Fase de creación de servicio web . . . . . . . . . . . . . . . . . . . . . . 38

4.5. Fase de creación de diccionarios de las tablas de unigrama para el uso del

modelo vectorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

4.6. Fase de implementación de funciones y modelo vectorial TF-IDF en el

servicio web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

4.7. Fase de creación de cliente de pruebas . . . . . . . . . . . . . . . . . . . 43

4.8. Fase de implementación del servicio de autocompletado . . . . . . . . . . 44

4.9. Fase de implementación del filtro por número de resultados . . . . . . . . 44

5. Pruebas y Resultados 465.1. Prueba 1: Una palabra. . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

5.2. Prueba 2: Dos palabras. . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

5.3. Prueba 3: Tres palabras. . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

5.4. Prueba 4: Cuatro palabras o más. . . . . . . . . . . . . . . . . . . . . . . 48

5.5. Prueba 5: Búsqueda errónea. . . . . . . . . . . . . . . . . . . . . . . . . 49

5.6. Prueba 6: Búsqueda de un elemento mal escrito. . . . . . . . . . . . . . . 49

I

Page 4: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

5.7. Prueba 7: Búsqueda de un elemento que no se encuentra dentro de la base

de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

5.8. Prueba 8: Búsqueda de palabras con caracteres UTF-8. . . . . . . . . . . 50

5.9. Prueba 9: Búsqueda de elemento limitando resultados en 5 elementos. . . 51

5.10. Prueba 10: Muestra de sistema de autocompletado. . . . . . . . . . . . . 51

5.11. Prueba 11: Búsqueda de elementos en distinto orden. . . . . . . . . . . . 52

5.12. Prueba 12: Búsqueda con una palabra (Error con devolución de elemento) 53

6. Discusión 54

7. Conclusiones 55

II

Page 5: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

ÍNDICE DE FIGURAS1. Ejemplo Lematización . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2. Modelo Vectorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3. Magento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

4. PrestaShop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

5. OpenCart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

6. Sphinx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

7. Apache Solr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

8. ElasticSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

9. Diagrama de Entidad Relación . . . . . . . . . . . . . . . . . . . . . . . 15

10. Modelo Entidad Relación de la Base de Datos Inicial . . . . . . . . . . . 22

11. Modelo Entidad Relación de la Base de Datos Inicial . . . . . . . . . . . 27

12. Diagrama de Ejecución del Servicio . . . . . . . . . . . . . . . . . . . . 33

13. Diagrama de Flujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

14. Prueba 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

15. Prueba 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

16. Prueba 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

17. Prueba 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

18. Prueba 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

19. Prueba 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

20. Prueba 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

21. Prueba 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

22. Prueba 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

23. Prueba 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

24. Prueba 11.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

25. Prueba 11.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

26. Prueba 12.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

27. Prueba 12.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

ÍNDICE DE CUADROS1. Plantilla Casos de Uso . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2. Caso 1 (Una palabra) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3. Caso 2 (Dos palabras) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4. Caso 3 (Tres palabras) . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

5. Caso 4 (4 palabras o más) . . . . . . . . . . . . . . . . . . . . . . . . . . 19

6. Caso 5 (Búsqueda de elementos que no existen dentro de la base de datos) 20

7. Caso 6 (Equivocación a la hora de escribir búsqueda) . . . . . . . . . . . 21

8. Tabla 1: product . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

9. Tabla 2: product_description . . . . . . . . . . . . . . . . . . . . . . . . 24

10. Tabla 3: related_entity . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

11. Tabla 4: characteristic . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

III

Page 6: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

12. Tabla 5: product_related_entity . . . . . . . . . . . . . . . . . . . . . . . 25

13. Tabla 6: product_characteristic . . . . . . . . . . . . . . . . . . . . . . . 26

14. Tabla 1: product_description_index1 . . . . . . . . . . . . . . . . . . . . 28

15. Tabla 2: product_description_index2 . . . . . . . . . . . . . . . . . . . . 28

16. Tabla 3: product_description_index3 . . . . . . . . . . . . . . . . . . . . 29

17. Tabla 4: product_description_index4 . . . . . . . . . . . . . . . . . . . . 29

18. Tabla 5: related_entity_index1 . . . . . . . . . . . . . . . . . . . . . . . 29

19. Tabla 6: related_entity_index2 . . . . . . . . . . . . . . . . . . . . . . . 30

20. Tabla 7: related_entity_index3 . . . . . . . . . . . . . . . . . . . . . . . 30

21. Tabla 8: related_entity_index4 . . . . . . . . . . . . . . . . . . . . . . . 30

22. Tabla 9: characteristic_index1 . . . . . . . . . . . . . . . . . . . . . . . 31

23. Tabla 10: characteristic_index2 . . . . . . . . . . . . . . . . . . . . . . . 31

24. Tabla 11: characteristic_index3 . . . . . . . . . . . . . . . . . . . . . . . 32

25. Tabla 12: characteristic_index4 . . . . . . . . . . . . . . . . . . . . . . . 32

IV

Page 7: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

Resumen

En este proyecto se presenta un servicio de búsqueda web basado en texto

capaz de realizar la búsqueda de un recurso almacenado en una base de datos.

Este servicio funciona mediante la lematización de términos realizando una

búsqueda prácticamente exacta. Los recursos obtenidos son resultado de un

proceso de filtrado mediante un modelo vectorial (TF-IDF) con umbral defi-

nido. Se ha implementado el motor de búsqueda en forma de servicio web.

Además se ha implementado un cliente con el fin de probar el servicio de

búqueda web. Los resultados parecen ser adecuados para la tarea propuesta.

Palabras clave: motor de búsqueda, servicio web, comercio electróni-

co. . .

Abstract

In this project, a text-based search engine is presented. It is capable of

searching for resources stored in a database. This service works through the

stemmization of terms, carrying out a practically exact search. The resources

retrieved are the result of a filtering process using a vectorial model (TF-IDF)

with a defined threshold. In this work, the search engine is implemented as a

web service. A client is also implemented as an evaluation platform for the

tool. The results obtained show a suitability of the platform for the proposed

task.

Keywords: search engine, web service, electronic commerce. . .

V

Page 8: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

1. INTRODUCCIÓN

1.1. Presentación del TrabajoEl comercio electrónico sigue creciendo, cada vez son más las empresas que deciden

abrir un negocio buscando la rentabilidad y posibilidades que este ofrece frente a los co-

mercios tradicionales.

“Si tu negocio no está en Internet, tu negocio no existe.” Bill Gates

El mercado electrónico ha demostrado ser la alternativa perfecta para el comercio,

debido a que nos proporciona ventajas como la venta al público abierta 24 horas los 365

días del año, además de ofrecer acceso desde cualquier parte del mundo, el aumento de la

gama de productos, ofertarse a nivel internacional a bajos costes y la capacidad de proce-

sar gran cantidad de pedidos de forma instantánea, entre otras muchas utilidades.

La rivalidad en la red, es una realidad que afecta a todos los comercios electrónicos,

siendo una de las mayores competencias la disponibilidad de una página web capaz de

satisfacer todas las necesidades que el usuario que la utilice disponga.

“El comercio electrónico será un amplio sector en el que triunfarán numerosas em-presas al mimso tiempo con estrategias diferentes. Aquí no hay sitio para diez o cienempresas, sino para decenas o miles de empresas.” Jeff Bezos

Poseer un comercio dominante en el mercado electrónico implica la posesión de una

página vez que facilite el acceso directo a la compra de los productos ofrecidos por dicho

comercio. La web debe satisfacer unos determinados aspectos que la hagan resaltar entre

el resto de la competencia. Para ello, la visualización, organización y la intuitividad son

esenciales para proporcionar un acceso abierto para cualquier usuario dentro del servicio

web.

Existen numerosos comercios electrónicos destinados al mundo musical, destacando

la compra-venta de instrumentos musicales. De entre todos ellos, una empresa pertene-

ciente a dicho ámbito, ha tenido la necesidad de realizar un motor de búsqueda para su

página web.

Con el objetivo de que dicho buscador cumpla con determinados requisitos, y que a

su vez consiga sufragar las demandas de los usuarios que lo utilicen, se nos ha encon-

mendado realizar dicho motor de búsqueda, con el fin de que puedan implementarlo en su

servicio web y usarlo.

1

Page 9: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

1.2. MotivaciónTras un exhaustivo estudio cuya finalidad era observar el comportamiento de los bus-

cadores de distintas páginas web relativas al comercio electrónico, hemos observado que

cuentan con buscadores que no son del todo certeros, es decir, a la hora de buscar no en-

cuentran de forma concreta aquello que el ussuario desea encontrar.

La existencia de varias empresar que se dedican al comercio electrónico hace posi-

ble una elevada competitividad dentro del sector. Por ello, es necesario realizar este tipo

de buscadores, cuya finalidad es que dichas empresas lo instalen en su plataforma y dis-

pongan de un mejor motor de búsqueda de sus productos, haciendo que el servicio web

destaque sobre otros.

1.3. ObjetivoEl objetivo consiste en la realización de un sistema buscador, que se encargue median-

te la lematización de los parámetros introducidos en la barra de búsqueda y un modelo

vectorial de TF-IDF, para conseguir obtener todos los elementos correspondientes que se

quieren buscar. Un ejemplo de esto, sería introducir en la barra de búsqueda dos paráme-

tros, como por ejemplo “Guitarra Roja”, y que mediante la lematización de la primera y

de la segunda palabra, consiguiese sacar por la pantalla del servicio web, los resultados

más acertados a la búsqueda, que en este caso serían todas las guitarras de color rojo que

se encuentren almacenadas en la base de datos.

Lo importante de este sistema, es la capacidad de poder buscar todo elemento del cual

se tenga un interés, en este caso objetos pertenecientes al ámbito de la música, con mayor

eficacia que tener que buscarlo a mano y con el fin de poder conseguir el objetivo, que en

este caso es encontrar el objeto/elemento solicitado, de una forma más eficiente y rápida.

El problema existente en los búscadores que poseen hoy en día las páginas web per-

tenecientes a tiendas dedicadas al ámbito de la música, es que emplean buscadores de

elementos, centrándose solo en el término como tal, es decir, un ejemplo de esto sería

buscar el término “Guitarro” en la barra de búsqueda, pero el buscador, al está solo codi-

ficado con la búsqueda de la palabra del elemento como tal, no sería capaz de obtener, en

ningún caso, todas las “Guitarras” o elementos relacionados, por lo que, o no te devuelve

ningún resultado, o te devuelve resultados que son erróneos.

Este problema anteriormente mencionado, se puede solvetar utilizando un sistema de

lematización que es el que se va a incluir en este trabajo. Dicho sistema de lematización

extrae el lexema perteneciente a cada una de las palabras introducidas por la barra de

búsqueda del servicio web, y a partir de él, busca todos los elementos que lo contienen en

la formación de su palabra, y los saca por pantalla. Un ejemplo de esto, sería la búsqueda

de la palabra “Guitarro”, y al lematizarse dicha palabra en el lexema “Guitarr”, sería capaz

2

Page 10: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

de encontrar todos los elementos que en su palabra contengan el lexema descrito, y así

sacar por pantalla todos los elementos que pertenezcan a la familia léxica de “Guitarro”.

2. ESTADO DEL ARTE

2.1. TecnológicoUn buscador o motor de búsqueda[1] se trata de un método interactivo, utilizado

para buscar en una base de datos datos que el usuario que está usando la aplicación quiere

obtener, adquiriendo resultados exactos sobre su búsqueda.

El método que es llevado a cabo pasa por varias fases, de entre las cuales destacan,

en primer lugar, el análisis de los criterios de búsqueda, en segundo lugar, mediante dicho

analisis de los criterios, se realiza dicha búsqueda en la base de datos indicada, obteniendo

un conjunto de resultados inicial, los cuales en tercer lugar, se contrastan con la entrada

que ha dado el usuario y así, en cuarto y último lugar, dar una salida de los resultados más

exactos a la búsqueda.

A su vez, existen varios tipos de consultas[2], realizadas en los motores de búsqueda,

las cuales son consultas de tipo relativo a la navegación, consultas de tipo informativo y

consultas de tipo transaccional.

Por otro lado, existen vario tipos de buscadores, de entre los cuales destaca el motor

de búsqueda denominado como metabuscador[3]. Dicho buscador se encarga de reenviar

consultas, recibidas a traves de sus propios parámetros, a otros motores de búsqueda, con

el fin de poder analizar la información obtenida a partir de estos y extraer la información

que contienen dichas consultas, ubicando los términos de dicha consulta en los documen-

tos de los cuales se ha extraido la información.

Además de existir el metabuscador, los buscadores se diferencian en tres característi-

cas[4], las cuales son las siguientes:

En primer lugar, se encuentran los motores de búsqueda basados en rastreadores(“Crawler-Based Search Engines”), como por ejemplo Google, que se encargan de ras-

trean información en la web y posteriormente los usuarios buscan a través de lo que el

propio motor de búsqueda ha encontrado.

En segundo lugar, se encuentran los motores de búsqueda basados en directoriosaccionados por el hombre (“Human-Powered Directories”), como por ejemplo Open

Directory, que dependen de los humanos para formar sus listados, es decir, un usuario

envía una breve descripción del directorio de todo el sitio, o los editores se encargan de

escribir una descripción para los sitios que revisan. De esta forma, una búsqueda funciona

encontrando coincidencias solo entre las descripciones que han sido enviadas.

3

Page 11: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

En tercer y último lugar, se encuentran los motores de búsqueda híbridos (“HybridSearch Engines”), que funciona con la unión de los dos tipos de motores de búsqueda

anteriores.

Para poder realizar dichos tipos de motores de búsqueda, se deberán de programar

en diferentes tipos de lenguajes, siendo en este caso, los lenguajes de programación de

Python y SQL.

En primer lugar, el lenguaje Python [5] se trata de un lenguaje de alto nivel, cu-

ya filisofía de diseño enfatiza en la legibilidad del código. Dicho lenguaje permite a los

programadores expresar conceptos en menos líneas de código de lo que sería posible en

lenguajes como C. A su vez, el lenguaje proporciona construcciones destinadas a permitir

programas claros tanto a pequeña como a gran escala.

En segundo lugar, el lenguaje SQL [6] que se trata de un sublenguaje de base de datos

relacional. No es un lenguaje de programación completo, pero depende de la E/S y control

de las instalaciones de un lenguaje de acogida.

Una base de datos [7], son el método por excelencia para el almacenamiento estruc-

turado de datos. Desde las aplicaciones de multiusuario hasta los números de telefono o

agendas telefónicas utilizan el sistema de las bases de datos ya que aseguran la integridad

de los datos y facilitan el trabajo tanto de los usuario como de los programadores que lo

desarrollaron.

Con el fin de poder conectar las bases de datos con el lenguaje Pyhton con el fin de

poder procesar los datos, se utiliza una biblioteca denominada PyMySQL [8], que me-

diante numerosas funciones que contiene, se obtiene la conexión de la base de datos con

cualquier script en Python pudiendo manipular los datos pertenecientes a la base de datos

desde el propio programa.

Con el objetivo de que el motor de búsqueda consiga mejores resultados en su eje-

cución, se van a utilizar las técnicas de lematización[9]1, que consiste en asignar una

forma representativa a distintas formas concretas variables, como pueden ser las formas

conjugadas de un verbo, el número de sustantivos y adjetivos, cambios en el género, etc.

A partir de estas técnicas de lematización, se sacan los lexemas o raíces, pertenecientes a

las palabras, que son el conjunto de letras que contienen en el mismo orden, palabras que

pertenecen a su familia léxica.

4

Page 12: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

Figura 1: Ejemplo Lematización

Para poder realizar la lematización, deberemos de utilizar una serie de bibliotecas per-

tenecientes a NLP[10] (“Natural Processing Language”).

El término de NLP abarca un amplio conjunto de técnicas destinadas a la generación

automatizada, con el fin de poder manipular y analizar tanto el lenguaje natura como el

idioma de los humanos. Por otro lado cabe destacar que la mayoría de las técnicas de NLP

son heredadas por parte de la Lingüística y de la Inteligencia Artificial, que a su vez, estas

están influenciadas por áreas más nuevas como pueden ser el Aprendizaje Automático

(“Machine Learning”), la Estadística Computacional (“Computational Statistics”) y la

Ciencia Cognitiva (“Cognitive Science”).

Una de las bibliotecas por excelencia que contiene NLP es NLTK [10], que a su vez

es de la que vamos a utilizar varias de sus funciones para poder realizar la lematización

de las palabras.

El biblioteca de NLTK es una colección de módulos, lanzada desde una licencia de código

abierto, que permite a los estudiantes aprender y realizar investigaciones en NLP. La ven-

taja más importante de usar la biblioteca de NLTK es que es totalmente autocontenido. No

solo proporciona funciones y envoltorios convenientes que se pueden usar como bloques

de construcción para tareas comunes de NLP, sino que también proporciona versiones en

bruto y preprocesadas utilizadas en la literatura de NLP y cursos.

Dentro de la biblioteca de NLTK, vamos a utilizar la función de SnowballStemmer[11], que se trata de una interfaz de procesamiento para eliminar los afijos morfológicos

de las palabras, conociendo este proceso como derivación. De esta forma conseguiremos

sacar los lexemas o raíces de todas las palabras que se quieran lematizar.

En algunos de los campos pertenecientes a la base de datos que se deben de lematizar,

se encuentran en formato HTML [12], que es el lenguaje utilizado por la World Wide

Web (www) y que permite a los usuarios publicar documentos en línea, recuperar infor-

mación, diseñar formularios para realizar transacciones con servicios remotos para usar

en la búsqueda de la información, etc.

La existencia de dichos datos en HTML, hacen que no se puedan lematizar, por ello se

utiliza una biblioteca de BeautifulSoup4[13], con el objetivo de pasar los datos que se

5

Page 13: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

encuentran en HTML a formato texto y poder lematizarlos.

BeautifulSoup4 es una biblioteca de Python que tiene la función de extraer datos de

archivos HTML y XML.

Antes de poder realizar el motor de búqueda, es necesario disponer de un servicioweb con el que buscar datos pertenecientes a sus bases de datos.

Un servicio web es una aplicación de software indentificada por una URI, cuyas inter-

faces y enlaces son capaces de ser definidos, descritos y descubiertos como datos XML.

A su vez, un servicio web admite interacciones directas con otros agentes del software

utilizando mensajes basados en XML intercambiados a través de protocolos basados en

Internet.

Para poder disponer de dicho servicio web, utilizaremos la herramienta de Django,

construida sobre Python, con el fin de crear un servicio web donde establecer el buscador.

La herramienta de Django [14], es una combinación de herramientas pertenecientes al

lenguaje de Python que fomenta el desarrollo rápido y, el diseño limpio y pragmático.

Con el fin de poder sincronizar el servicio web con los programas en python y las

bases de datos, se utilizan sentencias codificadas en formato JSON.

JSON [15] (“JavaScript Object Notation”), es un formato de intercambio de datos

ligero basado en texto independiente del idioma. Se derivó del estándar del lenguaje de

programación ECMAScript. A su vez, define un pequeño conjunto de reglas de formato

para la representación portátil de datos estructurados.

Con el objetivo de poder obtener una lista de resultados más precisos en la búsque-

da, se utiliza el modelo vectorial “TF-IDF’’[16] (term frequency and inverse term fre-quency)

La definición de TF (tern frequency) consiste en que el valor o peso, de un término kique aparece en un documento dj es simplemente proporcional al término frecuencia fi,j ,es decir, cuanto más a menudo aparece un término ki en el texto del documento dj , mayor

es el peso de la frecuencia del término TFi,j . A su vez, la variante del peso TF utilizada

en la literatura es la siguiente:

tfi,j =

{1 + log2fi,j iffi,j > 0

0 en otro caso

Por otro lado, nos encontramos con dos definiciones para IDF (inverse term fre-quency), una perteneciente a exhaustividad y especificidad y la otra a exhaustividad ópti-

6

Page 14: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

ma.

En primer lugar, se va a explicar la definición de exhaustividad y especifidad, siendo la

exhaustividad una propiedad de las descripciones de los documentos y la especificidad la

propiedad de los términos de índice. La exhaustividad de la descripción de un documento

se interpreta como la cobertura que proporciona para los temas principales del documen-

to. La especificidad de un término con índice índice se interpreta observando como de

bien el término describe un tema perteneciente al documento.

En segundo lugar, se va a explicar la definición perteneciente a la exahustividad ópti-

ma. Cuantos más términos con índice asigne a un documento, más exhaustiva será su des-

cripción. Su probabilidad de recuperación por una consulta seleccionada aleatoriamente

de la secuencia de consulta también aumenta. Sin embargo, si se asignan demasiados tér-

minos a un documento, éste se recuperará mediante consultas para las que no es relevante.

Esto sugiere que el número promedio de términos con índice por documento debería ser

óptimo de manera que se maximice la probabilidad de relevancia de un documento recu-

perado. Este número óptimo de términos con índice define la exhaustividad óptima para

las descripciones de ese documento. A su vez, la variante del peso IDF utilizada en la

literatura es la siguiente:

IDFi = log2N

ni

Una vez se han explicado los dos por separados, se va a explicar la definición existente

entre ambos pesos, denominandose como “Ponderación de TF-IDF” y definiéndose de

la siguiente forma:

wi,j =

{(1 + log2fi,j) ∗ log2 N

niiffi,j > 0

0 en otro caso

Debido a dicha definición, TF e IDF se formulan de la siguiente forma:

TFi = 1 + logN∑j=1

fi,j

IDFi = log

(N

ni

)

A su vez, hay que tener en cuenta la normalización de la longitud del documento, que

se define en las tres tipos de representaciones, es decir, en tamaño en bytes, número de

palabras y normas de vectores.

7

Page 15: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

En primer lugar, se va a explicar la representación en tamaño en bytes. Como inicio

cabe destacar que cada documento se representa como un flujo de bytes. En este caso, la

longitud del documento es el número de bytes del flujo, es decir, el tamaño en bytes del

documento. La ventaja clave de esta representación es su simplicidad.

En segundo lugar, se va a explicar la representación en número de palabras. Como

inicio cabe destacar que cada documento se representa como una sola cadena, que puede

descomponerse en sus palabras que lo consituyen. En este caso, la longitud del documento

es el número de palabras que contiene. Esta representación es también simple pero calcula

la longitud de los documentos a nivel sintáctico, que incluye más semántica.

En tercer lugar, se va a explicar la representación en normas de vectores. Como inicio

cabe destacar que cada término está asociado con un vector unitario ortonormal �ki en un

espacio t-dimensional. En este espacio, los documentos pueden ser representados como

vectores de términos ponderados de la siguiente manera. Con el término ki del documento

dj se asocia el vector wi,j ∗ �ki que representa la contribución del término al documento.

El �dj de representación de documentos se convierte en el vector compuesto por todos

sus componentes vectoriales. La longitud del documento viene dada por la norma de este

vector, que se computa de la siguiente forma:

|�di| =√√√√ t∑

i

w2i,j

Además de lo explicado anteriormente, se encuentra el modelo vectorial, que se define

como que el peso wi,j asociado con un par de documento de término (ki, dj) es no negativo

y no binario. Se supone que todos los términos con índice son mutuamente independientes

y se representan como vectores unitarios de un espacio t-dimensional, en dj y query q son

vectores t-dimensionales dados por:

�di = (w1, w2, ..., wt,j)

�q = (w1,q, w2,q, ..., wt,q)

Por lo tanto se obtiene el siguiente gráfico 2, donde el coseno del ángulo θ es el

resultado entre el vector �q y el vector �dj:

8

Page 16: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

Figura 2: Modelo vectorial

La fórmula del coseno utilizada es la siguiente:

cos(θ) =�q ∗ �d

‖�q‖‖�d‖ =

∑ni=1 �qi ∗ �di√∑n

i=1(�qi)2 ∗

√∑ni=1(

�di)2

Con el fin de poder realizar dicho modelo vectorial, son necesarias las bilbiotecas

pertenecientes a gensim, en específico a las funciones de corpora[17] que contienen los

procesos para realizar dicho modelo vectorial. Gensim es una biblioteca Python que lucha

en dos frentes:

1. Indexación de documentos digitales y búsqueda de similitudes.

2. Rapidez, algoritmos escalables y eficientes en términos de memoria para la des-

composición de valor singular y la asignación latente de dirichlets.

La conexión entre los dos es el análisis semántico no supervisado de texto sin formato

en colecciones digitales

Por último, para poder realizar el cliente que se encargue de poder probar el servicio

web de búsqueda, se utiliza el lenguaje de JavaScript, principalmente JQuery[18]

JQuery es un framework Javascript,que sirve como base para la programación avanza-

da de aplicaciones, que aportauna serie de funciones o códigos para realizar tareas habi-

tuales. Por decirlo de otra manera, framework son unas librerías de código que contienen

procesos o rutinas ya listos para usar.

9

Page 17: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

2.2. Sistemas ActualesActualmente, existen gran varierdad de motores de búsqueda, como hemos explicado

en el punto anterior, con el fin de que los comercios puedan introducirlos en sus platafor-

mas web, con el objetivo de cumplir todas las demandas de los usuarios de forma rápida

y eficaz.

Por un lado, la mayor parte de las plataformas que ofrecen motores de búsqueda a va-

rios servicios web destinadas al comercio electrónico, no realizan una búsqueda a través

de sistemas complejos como pueden ser la lematización de los términos para realizar una

búsqueda más óptima.

A continuación se van a nombrar varias de las plataformas que no ofrecen un motor de

búsqueda que ofrecen un resultados que no se acercan correctamente a la búsqueda de los

productos que se ha querido realizar.

En primer lugar, se encuentra la plataforma de Magento[19]3, que es una platafor-

ma de código abierto y arquitectura modular para comercio electrónico ofreciendo una

gran felxibilidad y control sobre la página. Las características más importantes son la

capacidad de generar y administrar múltiples servicios web desde solo un panel de admi-

nistración.

Figura 3: Logo Magento

En segundo lugar, nos encontramos con una de las plataformas que rivalizan con Ma-

gento, denominada como Prestashop[19]4.

Prestashop se trata de un software de código abierto para el comercio electrónico

desarrollado en PHP y MSLQ encontrándose disponible de forma gratuita bajo licencia

de “Open software”. A su vez, se encuentra disponible en 38 diferentes idiomas inclu-

yendo el español. También incluye más de 260 funcionalidades que permiten vender tanto

productos físicos como descargables, clasificar los productos por diferentes criterios, ges-

tionar ofertas y descuentos, importar ficheros CSV, etc.

10

Page 18: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

Figura 4: Logo PrestaShop

Además de estos dos softwares de código abierto anteriores, se encuentra el software

OpenCart[19]5, que es uno de los softwares más sencillos e intuitivos para el comercio

electrónico. Se trata de una plataforma de código abierto destinada a pequeños y media-

nos negocios que requieran de una herramienta flexible y personalizable sin excesivas

complicaciones técnicas. Las funciones que ofrece son permitir añadir de forma ilimitada

cuantos productos, páginas, fabricantes y categorías deseemos. A su vez genera páginas

optimizadas para el uso de motores de búsqueda.

Figura 5: Logo OpenCart

Por otro lado, después de estas plataformas, se encuentran los mejores servicios de

búsqueda para el comercio electrónico.

En primer lugar, nos encontramos con el motor de búsqueda Sphinx[20]6, que se

trata de un conjunto de herramientas en escritas en el lenguaje de programación de Ja-

va y un entorno interactivo para buscadores web. A diferencia de otros desarrolladores

de motores de búsqueda, Sphinx se encentra orientado a desarrollar buscadores que son

especificos para un servicio web, permitiendo personalizarlos y reubicarlos. A su vez, per-

mite encapsular y reutilizar las reglas de búsqueda específicas para el servicio web en los

analizadores de contenido, conocidos como clasificadores. Otra función que desempeña,

es que para una mayor eficiencia, los buscadores reubicables desarrollados con Sphinx,

se pueden tanto cargar como ejecutar en un servidor remoto.

11

Page 19: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

Figura 6: Logo Sphinx

En segundo lugar, nos encontramos con uno de los motores de búsqueda más impor-

tantes del mercado, denominado como ApacheSolr o Apache Lucene[21]7, que se trata

de una biblioteca de búsqueda de código abierto basada en Java, que proporcina inter-

faces de programación de aplicaciones para realizar tareas comunes de búsqueda, como

la indexación, resaltado de consultas, análisis de idiomas y muchas otras más funciones.

Alcualmente es utilizado en servicios web como Twitter e Instagram, en su version 4.0.

Figura 7: Logo Apache Solr

En tercer y último lugar, se encuentra el motor de búsqueda más importante hasta la

fecha, denominado como ElasticSearch[22]8, el cual actualmente rivaliza con el motor

de búsqueda proporcionado por ApacheSolr. Este software, está basado en la biblioteca

Lucene al igual que ApacheSolr. A su vez, proporciona un motor de búsqueda de texto

completo, de código abierto, y de distribución en varios servidores, con el fin de poder

buscar todo tipo de documentos. Proporciona una búsqueda escalable, en tiempo real y

soportando como se ha dicho anteriormente, ejecutarlo en varios servidores a la vez. Este

tipo de buscador se usa en empresas como Ebay, VW, IEEE y Netflix.

12

Page 20: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

Figura 8: Logo ElasticSearch

3. DISEÑO

3.1. RequisitosLos requisitos que se han tenido en cuenta en el momento de realizar el proyecto han

sido los siguientes:

1. Se debe de realizar un buscador que sea capaz de que mediante un input, devolver

outputs que correspondan con los resultados esperados, es decir, una vez introduci-

dos los elementos, el servicio debe de devolver los resultados más similares que se

encuentren dentro de la base de datos proporcionada.

2. El servicio debe de poder admitir y tratar caracteres pertenecientes a UTF-8, tales

como tildes o símbolos que no se usan comúnmente, como puede ser ’ñ’.

3. El servicio debe de ser capaz de poder preprocesar y analizar todo tipo de texto que

se de como input con el objetivo de conseguir realizar la búsqueda.

4. El servicio debe de recibir los datos recibidos como input en formato JSON y debe

de ser capaz de tratarlo.

5. El servicio debe de devolver como output un diccionario de JSON, conteniendo

cada uno de ellos una respuesta a la consulta previamente realizada.

6. El servicio debe de ser capaz de navegar por la base de datos proporcionada de

forma ágil.

7. El modelo de búsqueda será basado en palabras o expresiones lematizadas.

8. Los datos que se encuentren dentro de la base de datos deben de ser separados en

tablas de índices y lematizados con el formato de n-gramas, estando estos contem-

plados dentro del rango de 1 a 4 (incluyendo a ambos).

9. El servicio debe de ser capaz de utilizar un modelo vectorial.

13

Page 21: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

10. El modelo vectorial que debe de utilizar dicho servicio tiene ser el modelo de TF e

IDF para realizar la búsqueda de los elementos.

11. Disponer de un diccionario de vectores para cada tabla lematizada de uni-grama

con el fin de poder realizar el modelo vectorial.

11. El servicio debe de proporcionar una búsqueda en la que el orden de las palabras

pertenecientes al texto introducido como input debe resultar en búsquedas equiva-

lentes.

12. El servicio debe de dar soporte al cliente con un autocompletado con sugerencias.

3.2. Solución propuestaLa solución propuesta para realizar el trabajo es la siguiente:

En primer lugar, el servicio debe de poder recibir los datos pertenecientes a la solici-

tud de búsqueda encapsulados dentro de un json.

En segundo lugar una vez hemos obtenido los datos, por un lado obtenemos los identi-

ficadores de los porductos existentes dentro de las tablas pertenecientes a la base de datos

que posean un mayor acierto en cuanto a la similitud con los datos de la búsqueda, a partir

del modelo vectorial. Por otro lado, se realiza la lematización de la búsqueda por tamaño

de n-grama desde 1 hasta 4.

En tercer lugar, se realiza una búsqueda a la base de datos con los identificadores obte-

nidos a partir del modelo vectorial, utilizándolos como límite de búsqueda, y los n-gramas

pertenecientes a los datos de la búsqueda.

En cuarto lugar, obteniendo los datos que ha devuelto la base de datos después de la

llamada, se encapsulan dentro de json y posteriormente estos json guardados dentro de

un diccionario, creando un diccionario de json que va a ser el que se le va a devolver al

cliente para que el usuario pueda observar los resultados a su búsqueda.

14

Page 22: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

3.3. Diseño de Alto Nivel3.3.1. Diagrama Entidad Relación

Figura 9: Diagrama de Entidad Relación

Usuario: persona que utiliza el servicio web.

Servicio Web: servicio desarrollado en este proyecto que se encarga de realizar

búsquedas dentro de una base de datos mediante técnicas de lematización y modelos

vectoriales.

Base de Datos: lugar donde se encuentran almacenados todos los datos relativos a

los productos.

Búsqueda: herramienta para encontrar lo deseado por el usuario.

3.3.2. Casos de uso

Para los casos de uso que se van a explicar a continuación, se tiene en consideración

que se usa un cliente web capaz de enviar y recivir los datos de la búsqueda en formato

JSON.

(A parte de realizar el servicio web de búsqueda, se ha realizado un pequeño cliente web

15

Page 23: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

ID Caso de Uso Nombre

Descripción Acción que se quiere llevar a cabo

Procesos Realizados Procesos que se han llevado a cabo para llegar a la solución

Salida Correcta Solución correcta a la solicitud de búsqueda

Estado Sistema Pre-Uso Disposición del sistema antes de su uso

Estado Sistema Post-Uso Disposición del sistema después de su uso

Cuadro 1: Plantilla Casos de Uso

capaz de poder alcanzar los objetivos del servicio web, con el fin de poder utilizarlo.)

A su vez, para poder representar los casos de uso se utilizará la siguiente plantilla:

Caso de uso 1

CU01 Una palabra

Descripción El usuario realiza una búsqueda en el servicio web con el tama-

ño de una sola palabra.

Procesos Realizados 1. El usuario introduce la palabra que quiere buscar dentro de

la barra de búsqueda.

2. El servidor recibe la palabra en formato Json y la preprocesa

realizando el proceso de lematización (obteniendo 1 unigrama),

y a su vez realiza el proceso llevado a cabo por el modelo de

vectorización TF-IDF.

3. Se realiza la búsqueda con los identificadores obtenidos en el

modelo de vectorización y la palabra lematizada, sobre la tabla

donde se ecuentran los datos de los productos lematizadas en

unigramas.

4. Se devuelve como diccionario de Json y se muestran los re-

sultados al usuario.

Salida Correcta Resultados que contengan la raíz léxica de la palabra introduci-

da como parámetro de búsqueda.

Estado Sistema Pre-Uso Barra de búsqueda vacía.

Estado Sistema Post-Uso Barra de búsqueda vacía y resultados representados en pantalla.

Cuadro 2: Caso 1 (Una palabra)

16

Page 24: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

Caso de uso 2

CU02 Dos palabras

Descripción El usuario realiza una búsqueda en el servicio web con el tama-

ño de dos palabras.

Procesos Realizados 1. El usuario introduce las palabras que quiere buscar dentro de

la barra de búsqueda.

2. El servidor recibe la palabra en formato Json y la preprocesa

realizando el proceso de lematización (obteniendo 1 digrama y

dos unigramas), y a su vez realiza el proceso llevado a cabo por

el modelo de vectorización TF-IDF

3. Se realiza la búsqueda con los identificadores obtenidos en

el modelo de vectorización y las palabras lematizadas, sobre las

tablas donde se ecuentran los datos de los productos lematiza-

das en unigramas (en el caso de los unigramas obtenidos en el

proceso de lematización) y en digramas (en el caso de los di-

gramas obtenidos también).

4. Se devuelve como diccionario de Json y se muestran los re-

sultados al usuario.

Salida Correcta Resultados que contengan la raíz léxica de las palabras intro-

ducidas como parámetro de búsqueda indiferentemente de la

posición en la que se hayan introducido.

Estado Sistema Pre-Uso Barra de búsqueda vacía.

Estado Sistema Post-Uso Barra de búsqueda vacía y resultados representados en pantalla.

Cuadro 3: Caso 2 (Dos palabras)

17

Page 25: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

Caso de uso 3

CU03 Tres palabras

Descripción El usuario realiza una búsqueda en el servicio web con el tama-

ño de tres palabras.

Procesos Realizados 1. El usuario introduce las palabras que quiere buscar dentro de

la barra de búsqueda.

2. El servidor recibe la palabra en formato Json y la preprocesa

realizando el proceso de lematización (obteniendo 1 trigrama

y dos digramas y tres trigramas), y a su vez realiza el proceso

llevado a cabo por el modelo de vectorización TF-IDF

3. Se realiza la búsqueda con los identificadores obtenidos en el

modelo de vectorización y la palabras lematizadas, sobre las ta-

blas donde se ecuentran los datos de los productos lematizadas

en unigramas (en el caso de los unigramas obtenidos en el pro-

ceso de lematización), en digramas (en el caso de los digramas

obtenidos también) y en trigramas(en el caso de los trigramas

obtenidos también).

4. Se devuelve como diccionario de Json y se muestran los re-

sultados al usuario.

Salida Correcta Resultados que contengan la raíz léxica de las palabras intro-

ducidas como parámetro de búsqueda indiferentemente de la

posición en la que se hayan introducido.

Estado Sistema Pre-Uso Barra de búsqueda vacía.

Estado Sistema Post-Uso Barra de búsqueda vacía y resultados representados en pantalla.

Cuadro 4: Caso 3 (Tres palabras)

18

Page 26: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

Caso de uso 4

CU04 4 palabras o más

Descripción El usuario realiza una búsqueda en el servicio web con el ta-

maño de cuatro palabras. (Y resto de los casos en los que se

utilicen más de cuatro palabras).

Procesos Realizados 1. El usuario introduce las palabras que quiere buscar dentro de

la barra de búsqueda.

2. El servidor recibe la palabra en formato Json y la preprocesa

realizando el proceso de lematización (obteniendo 1 tetragrama

y dos trigramas y tres diigramas y cuatro unigramas; en el caso

de más de 4 palabras aumenta cada número en 1), y a su vez

realiza el proceso llevado a cabo por el modelo de vectoriza-

ción TF-IDF

3. Se realiza la búsqueda con los identificadores obtenidos en el

modelo de vectorización y la palabras lematizadas, sobre las ta-

blas donde se ecuentran los datos de los productos lematizadas

en unigramas (en el caso de los unigramas obtenidos en el pro-

ceso de lematización), en digramas (en el caso de los digramas

obtenidos también), en trigramas(en el caso de los trigramas

obtenidos también) y en tetragramas(en el caso de los tetragra-

mas obtenidos).

4. Se devuelve como diccionario de Json y se muestran los re-

sultados al usuario.

Salida Correcta Resultados que contengan la raíz léxica de las palabras intro-

ducidas como parámetro de búsqueda indiferentemente de la

posición en la que se hayan introducido.

Estado Sistema Pre-Uso Barra de búsqueda vacía.

Estado Sistema Post-Uso Barra de búsqueda vacía y resultados representados en pantalla.

Cuadro 5: Caso 4 (4 palabras o más)

19

Page 27: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

Caso de uso 5

CU05 Búsqueda de elementos que no existen dentro de la base de datos

Descripción El usuario realiza una búsqueda en el servicio web de un ele-

mento que no existe dentro de la base de datos

Procesos Realizados 1. El usuario introduce las palabras que quiere buscar dentro de

la barra de búsqueda.

2. El servidor recibe la palabra en formato Json y la preprocesa

realizando el proceso de lematización (obteniendo 1 tetragrama

y dos trigramas y tres diigramas y cuatro unigramas; en el caso

de más de 4 palabras aumenta cada número en 1), y a su vez

realiza el proceso llevado a cabo por el modelo de vectoriza-

ción TF-IDF

3. Se realiza la búsqueda con los identificadores obtenidos en el

modelo de vectorización y la palabras lematizadas, sobre las ta-

blas donde se ecuentran los datos de los productos lematizadas

en unigramas (en el caso de los unigramas obtenidos en el pro-

ceso de lematización), en digramas (en el caso de los digramas

obtenidos también), en trigramas(en el caso de los trigramas ob-

tenidos también) y en tetragramas(en el caso de los tetragramas

obtenidos), pero al no encontrar nada devuelve una lista vacía.

Salida Correcta Se devuelve un mensaje que dice que no existen resultados.

Estado Sistema Pre-Uso Barra de búsqueda vacía.

Estado Sistema Post-Uso Barra de búsqueda vacía y un mensaje indicando que no hay

resultados.

Cuadro 6: Caso 5 (Búsqueda de elementos que no existen dentro de la base de datos)

20

Page 28: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

Caso de uso 6

CU06 Equivocación a la hora de escribir búsqueda

Descripción El usuario realiza una búsqueda en el servicio web de un ele-

mento y lo escribe mal

Procesos Realizados 1. El usuario introduce las palabras que quiere buscar dentro de

la barra de búsqueda.

2. El servidor recibe la palabra en formato Json y la preprocesa

realizando el proceso de lematización (obteniendo 1 tetragrama

y dos trigramas y tres diigramas y cuatro unigramas; en el caso

de más de 4 palabras aumenta cada número en 1), y a su vez

realiza el proceso llevado a cabo por el modelo de vectoriza-

ción TF-IDF

3. Se realiza la búsqueda con los identificadores obtenidos en el

modelo de vectorización y la palabras lematizadas, sobre las ta-

blas donde se ecuentran los datos de los productos lematizadas

en unigramas (en el caso de los unigramas obtenidos en el pro-

ceso de lematización), en digramas (en el caso de los digramas

obtenidos también), en trigramas(en el caso de los trigramas

obtenidos también) y en tetragramas(en el caso de los tetragra-

mas obtenidos), si la raíz lexica de la palabra mal escrita existe

en la base de datos, devolverá dichos resultados. En el caso de

que no exista, no devolverá nada.

4. Si se obtienen valores debido a la existencia de datos, se de-

vuelve como diccionario de Json y se muestran los resultados

al usuario.

Salida Correcta 1. (Caso en el que exista raíz léxica) Resultados que contengan

la raíz léxica de las palabras introducidas como parámetro de

búsqueda indiferentemente de la posición en la que se hayan

introducido.

2. (Caso en el que no exista) Se envía un mensaje indicando que

no existen resultados.

Estado Sistema Pre-Uso Barra de búsqueda vacía.

Estado Sistema Post-Uso 1. (Caso en el que exista raíz léxica) Barra de búsqueda vacía y

mostrando los resultados.

2. (Caso en el que no exista) Barra de búsqueda vacía y un

mensaje indicando que no hay resultados.

Cuadro 7: Caso 6 (Equivocación a la hora de escribir búsqueda)

21

Page 29: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

3.4. Diseño de Bajo Nivel3.4.1. Esquema de la Base de Datos Pre-Modificación

Figura 10: Modelo Entidad Relación de la Base de Datos Inicial

22

Page 30: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

En este primer esquema se pueden observar las tabla iniciales antes de porcesarlas

mediante el proceso de lematización de los datos que contienen. Las tablas y sus campos

dispuestos en el esquema son los siguientes:

Tabla 1: product

Esta tabla va a contener los datos pertenecientes a los productos de los que se dispone

información, y para ello se han dispuesto los siguientes campos:

id_product contiene el identificador del producto dentro de la tabla.

width contiene el valor del grosor del producto.

depth contiene el valor de la profundidad del producto.

height contiene el valor de la altura del producto.

weight contiene el valor del peso del producto.

last_update contiene la última modificación de los valores del producto.

ean13 contiene el código de barras en formato ean13 (European Ar-

ticle Number) del producto.

isbn contiene el el número del isbn (International Standard Book

Number) del producto.

reference contiene referencias pertenecientes al producto.

Cuadro 8: Tabla 1: product

Tabla 2: product_description

Esta tabla va a contener toda la descripción de la información referente a cada pro-

ducto, y para ello se han dispuesto los siguientes campos:

23

Page 31: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

id_product contiene el identificador del producto dentro de la tabla.

id_shop contiene el identificador de la tienda donde se encuentra el

producto.

id_lang contiene el identificador del lenguaje que se utiliza.

ean13 contiene el código de barras en formato ean13 (European Ar-

ticle Number) del producto.

isbn contiene el el número del isbn (International Standard Book

Number) del producto.

reference contiene referencias pertenecientes al producto.

name contiene el nombre del producto.

description contiene la descripción del producto en formato html.

meta contiene la acción que se puede llevar a cabo con el producto,

por ejemplo (“Comprar producto")

last_update contiene la última modificación de los valores del producto.

description_normal contiene la descripción del producto en formato de string.

Campo introducido al modificar el campo de description.

Cuadro 9: Tabla 2: product_description

Tabla 3: related_entity

Esta tabla va a contener todas las entidades que están relacionadas con cada producto,

y para ello se han dispuesto los siguientes campos:

24

Page 32: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

id_entity contiene el identificador de la entidad dentro de la tabla.

id_type contiene el identificador del tipo del que se trata la entidad.

id_lang contiene el identificador del lenguaje que se utiliza.

name contiene el nombre de la entidad.

description contiene la descripción de la entidad en formato html.

meta contiene la acción que se puede llevar a cabo con la entidad

que está referida al producto, por ejemplo (Çomprar produc-

to")

last_update contiene la última modificación de los valores de la entidad.

description_normal contiene la descripción de la entidad en formato de string.

Campo introducido al modificar el campo de description

Cuadro 10: Tabla 3: related_entity

Tabla 4: characteristic

Esta tabla va a contener todas las características pertenecientes a cada producto, y para

ello se han dispuesto los siguientes campos:

id_characteristic contiene el identificador de la característica dentro de la tabla.

id_type contiene el identificador del tipo del que se trata la caracterís-

tica.

id_lang contiene el identificador del lenguaje que se utiliza.

name contiene el nombre de la característica.

Cuadro 11: Tabla 4: characteristic

Tabla 5: product_related_entity

Esta tabla va a contener todas las uniones existentes entre los productos y sus entida-

des relacionadas, y para ello se han dispuesto los siguientes campos:

id_product contiene el identificador del producto dentro de la tabla.

id_type contiene el identificador del tipo del que se trata la entidad.

id_related_entity contiene el identificador de la entidad dentro de la tabla.

Cuadro 12: Tabla 5: product_related_entity

25

Page 33: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

Tabla 6: product_characteristic

Esta tabla va a contener todas las uniones existentes entre los productos y sus caracte-

rísticas, y para ello se han dispuesto los siguientes campos:

id_product contiene el identificador del producto dentro de la tabla.

id_type contiene el identificador del tipo del que se trata la caracterís-

tica.

id_characteristic contiene el identificador de la característica dentro de la tabla.

Cuadro 13: Tabla 6: product_characteristic

26

Page 34: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

3.4.2. Esquema de la Base de Datos Post-Modificación

Figura 11: Modelo Entidad Relación de la Base de Datos Inicial

27

Page 35: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

En este segundo esquema se pueden observar que se han añadido 12 tablas más a las

que existía en un inicio, esto es debido al procesado de los datos mediante el proceso de

lematización. Las tablas y sus campos dispuestos en el esquema son los siguientes:

Tabla 1: product_description_index1

Esta tabla va a contener todas las lematizaciones/raíces léxicas de los datos perte-

necientes a los productos en forma de unigrama que se encuentren dentro de la tabla

product_description:

term contiene el término (en forma de unigrama) que se va a lema-

tizar en el campo de stem.

stem contiene la raíz del término (en forma de unigrama) que se ha

lematizado.

id_product contiene el identificador del producto dentro de la tabla.

Cuadro 14: Tabla 1: product_description_index1

Tabla 2: product_description_index2

Esta tabla va a contener todas las lematizaciones/raíces léxicas de los datos pertene-

cientes a los productos en forma de digrama que se encuentren dentro de la tabla pro-duct_description:

term contiene el término (en forma de digrama) que se va a lemati-

zar en el campo de stem.

stem contiene la raíz del término (en forma de digrama) que se ha

lematizado.

id_product contiene el identificador del producto dentro de la tabla.

Cuadro 15: Tabla 2: product_description_index2

Tabla 3: product_description_index3

Esta tabla va a contener todas las lematizaciones/raíces léxicas de los datos pertene-

cientes a los productos en forma de trigrama que se encuentren dentro de la tabla pro-duct_description:

28

Page 36: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

term contiene el término (en forma de trigrama) que se va a lemati-

zar en el campo de stem.

stem contiene la raíz del término (en forma de trigrama) que se ha

lematizado.

id_product contiene el identificador del producto dentro de la tabla.

Cuadro 16: Tabla 3: product_description_index3

Tabla 4: product_description_index4

Esta tabla va a contener todas las lematizaciones/raíces léxicas de los datos perte-

necientes a los productos en forma de tetragrama que se encuentren dentro de la tabla

product_description:

term contiene el término (en forma de tetragrama) que se va a le-

matizar en el campo de stem.

stem contiene la raíz del término (en forma de tetragrama) que se

ha lematizado.

id_product contiene el identificador del producto dentro de la tabla.

Cuadro 17: Tabla 4: product_description_index4

Tabla 5: related_entity_index1

Esta tabla va a contener todas las lematizaciones/raíces léxicas de los datos pertene-

cientes a las entidades en forma de unigrama que se encuentren dentro de la tabla rela-ted_entity:

term contiene el término (en forma de unigrama) que se va a lema-

tizar en el campo de stem.

stem contiene la raíz del término (en forma de unigrama) que se ha

lematizado.

id_entity contiene el identificador de la entidad dentro de la tabla.

Cuadro 18: Tabla 5: related_entity_index1

Tabla 6: related_entity_index2

Esta tabla va a contener todas las lematizaciones/raíces léxicas de los datos pertene-

cientes a las entidades en forma de digrama que se encuentren dentro de la tabla rela-

29

Page 37: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

ted_entity:

term contiene el término (en forma de digrama) que se va a lemati-

zar en el campo de stem.

stem contiene la raíz del término (en forma de digrama) que se ha

lematizado.

id_entity contiene el identificador de la entidad dentro de la tabla.

Cuadro 19: Tabla 6: related_entity_index2

Tabla 7: related_entity_index3

Esta tabla va a contener todas las lematizaciones/raíces léxicas de los datos pertene-

cientes a las entidades en forma de trigrama que se encuentren dentro de la tabla rela-ted_entity:

term contiene el término (en forma de trigrama) que se va a lemati-

zar en el campo de stem.

stem contiene la raíz del término (en forma de trigrama) que se ha

lematizado.

id_entity contiene el identificador de la entidad dentro de la tabla.

Cuadro 20: Tabla 7: related_entity_index3

Tabla 8: related_entity_index4

Esta tabla va a contener todas las lematizaciones/raíces léxicas de los datos perte-

necientes a las entidades en forma de tetragrama que se encuentren dentro de la tabla

related_entity:

term contiene el término (en forma de tetragrama) que se va a le-

matizar en el campo de stem.

stem contiene la raíz del término (en forma de tetragrama) que se

ha lematizado.

id_entity contiene el identificador de la entidad dentro de la tabla.

Cuadro 21: Tabla 8: related_entity_index4

30

Page 38: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

Tabla 9: characteristic_index1

Esta tabla va a contener todas las lematizaciones/raíces léxicas de los datos pertene-

cientes a las características en forma de unigrama que se encuentren dentro de la tabla

characteristic:

term contiene el término (en forma de unigrama) que se va a lema-

tizar en el campo de stem.

stem contiene la raíz del término (en forma de unigrama) que se ha

lematizado.

id_characteristic contiene el identificador de la característica dentro de la tabla.

Cuadro 22: Tabla 9: characteristic_index1

Tabla 10: characteristic_index2

Esta tabla va a contener todas las lematizaciones/raíces léxicas de los datos pertene-

cientes a las características en forma de digrama que se encuentren dentro de la tabla

characteristic:

term contiene el término (en forma de digrama) que se va a lemati-

zar en el campo de stem.

stem contiene la raíz del término (en forma de digrama) que se ha

lematizado.

id_characteristic contiene el identificador de la característica dentro de la tabla.

Cuadro 23: Tabla 10: characteristic_index2

Tabla 11: characteristic_index3

Esta tabla va a contener todas las lematizaciones/raíces léxicas de los datos pertene-

cientes a las características en forma de trigrama que se encuentren dentro de la tabla

characteristic:

31

Page 39: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

term contiene el término (en forma de trigrama) que se va a lemati-

zar en el campo de stem.

stem contiene la raíz del término (en forma de trigrama) que se ha

lematizado.

id_characteristic contiene el identificador de la característica dentro de la tabla.

Cuadro 24: Tabla 11: characteristic_index3

Tabla 12: characteristic_index4

Esta tabla va a contener todas las lematizaciones/raíces léxicas de los datos pertene-

cientes a las características en forma de tetragrama que se encuentren dentro de la tabla

characteristic:

term contiene el término (en forma de tetragrama) que se va a le-

matizar en el campo de stem.

stem contiene la raíz del término (en forma de tetragrama) que se

ha lematizado.

id_characteristic contiene el identificador de la característica dentro de la tabla.

Cuadro 25: Tabla 12: characteristic_index4

3.4.3. Ejecución del servicio

En la imagen que tenemos a continuación ?? podemos observar que el cliente está

haciendo una búsqueda en el servicio web, pasando la solicitud al servidor, procesando

los datos en él, enviando una solicitud con los datos procesados a la base de datos de

MySQL, la base de datos devuelve los resultados sin encapsular y por último el servidor

envía los resultados de la solicitud encapsulados en un diccionario de Json mostrándolo

por pantalla al usuario que está utilizando el cliente.

32

Page 40: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

Figura 12: Diagrama de Ejecución del Servicio

3.5. Arquitectura3.5.1. Diagrama de Flujo

El diagrama de flujo que se muestra a continuación 13, se trata de una explicación

gráfica de la arquitectura del servicio. A su vez, dicho diagrama se encuentra dividido en

3 situaciones diferentes.

En primer lugar está el cliente, que se va a encargar de realizar la solicitud de búsqueda

y de recibir la respuesta. En esta situación se puede observar como realiza una solicitud de

búsqueda (pudiendo utilizar el servicio de autocompletado implementado en el servicio),

la cual es encapsulada en un JSON que va a ser enviado al servidor para que lo procese.

Una vez el servidor termina de procesar la búsqueda, el cliente recibe un diccionario de

datos encapsulados en JSON, y los dispone para que el usuario que está utilizando el ser-

vicio los pueda observar.

En segundo lugar está el servidor, que se va a encargar de realizar todos los procesos

para poder obtener el resultado. En el apartado del servidor, se puede observar como

obtiene los datos de la búsqueda encapsulados en un JSON. Una vez obtiene los datos del

JSON, por un lado se dipone a lematizar la búsqueda por n-gramas, entre un rango de 1

a 4 (ambos incluidos). Por otro lado, se realiza el modelo de vectorización de TF-IDF, de

donde va a obtener los identificadores de los productos que poseen un mayor rango de

acierto con los datos introducidos como búsqueda.

Una vez, se obtiene la busqueda lematizada en n-gramas y los identificadores del mo-

delo vectorial, se realiza la búsqueda en la base de datos, de donde se van a recibir los

resultados de mayor similitud a la solicitud del usuario, y posteriormente se van a encap-

sular cada una de las respuestas en un JSON estándo todos estos a su vez dentro de un

diccionario. Cuando se obtiene dicho diccionario de JSON se procede a devolverselo al

cliente como la respuesta.

33

Page 41: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

En tercer y último lugar, está la base de datos, donde se encuentran todos los datos

pertenecientes a los productos. Aquí es donde se va a realizar la búsqueda de los datos

solicitados por el cliente a través del servidor y una vez son obtenidos los resultados, estos

son enviados al servidor con el fin de que los encapsule y se los envíe al cliente.

34

Page 42: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

Figura 13: Diagrama de Flujo

35

Page 43: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

4. IMPLEMENTACIÓNEn este apartado se va a explicar los métodos y programas utilizados para poder rea-

lizar la implementación del servicio web de búsqueda. Para ello se ha dividido en varias

partes:

4.1. Fase de modificación del campo “description”En esta fase, se realizó una columna que contuviese los datos pertenecientes a los

campos de description de cada producto, obteniéndolos en formato string a partir de html.

Para llevarlo a cabo, se ha creado un programa capaz de adquirir de un texto en html, los

datos que este contenía en formato de string.

Las bibliotecas usadas para poder solventar el problema propuesto, son las pertene-

cientes a BeautifulSoup4 (para poder realizar el parseo de HTML a String) y PyMySQL

(para poder acceder a los datos pertenecientes a los productos dentro de la base de datos).

En primer lugar, mediante la biblioteca de BeautifulSoup4, se utilizó la siguiente línea

de código que realizaba el parseo:

soup = B e a u t i f u l S o u p ( e lemento , f e a t u r e s =" h tml . p a r s e r " )

En la línea de código podemos observar que el “elemento”, se trata de cada dato que

se ha obtenido de la base de datos, y una vez éste se parsea, se guarda en la variable

“soup”. Una vez se ha obtenido el dato en la variable “soup”, esta se procede a almace-

nar mediante una sentencia en SQL (utilizando la librería PyMySQL) en la columna de

“description_normal” existente en la tabla de la base de datos.

4.2. Fase de lematización de tablasEn esta segunda fase, se procedió a realizar la lematización de las tablas pertenecien-

tes a “product_description”, “related_entity” y “characteristics” con el fin de obtener las

raíces léxicas de los datos almacenados en estas tablas, disponiendolos en unigramas (in-

dex1), digramas (index2), trigramas (index3) y tetragramas (index4). Para llevar a cabo

este proceso, se han utilizado las bibliotecas pertenecientes a NLP, en especial a NLTK,

de donde se obtienen las funciones de SnowballStemmer (función que realiza la lema-

tización de un término), stopwords (para poder eliminar palabras como determinantes,

preposiciones, y signos innecesarios como pueden ser puntos y comas) y PyMySQL (pa-

ra poder manipular la base de datos).

36

Page 44: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

En primer lugar, se sacan los datos de la base de datos con el fin de lematizarlos me-

diante las siguientes líneas de código:

stemmer = Stemmer ( ’ s p a n i s h ’ )

lexema = stemmer . s tem ( e l e m e n t o )

En la primera línea de código se realiza la inicialización del lematizador utilizando

el lenguaje del “español”, y posteriormente, en la segunda línea de código descrita, se

realiza la lematización del “elemento”, guardando la raíz léxica de dicho término en la

variable “lexema”.

Para poder realizar los n-gramas correspoondientes se usa el siguiente bucle for:

f o r i t em2 i n l i s t a L e x e m a s [ b : b+tam_ngrama ] :

i f l e n ( i t em2 . s t r i p ( ) ) != 0 :

c o n c a t 2 . append ( i t em2 )

b += 1

En este bucle, se sacan todos los lexemas obtenidos anteriormente y almacenados

dentro de la lista “listaLexemas”, y se recorren y almacenan en una lista denominada

“concat2”, según el tamaño de n-grama que se ha dispuesto en la variable “tam_ngrama”

Posteriormente, se utiliza una sentencia en SQL para crear y almacenar en la base de

datos las raíces léxicas obtenidas a partir de los términos correspondiendo cada una a un

n-grama diferente y almacenandose en la tabla de n-grama a la que pertenezca.

4.3. Fase de incorporación de índice “Full-Text” Index a las tablaslematizadas

En esta fase, se van a incluir unos índices a las columnas denominadas como “stem”,

con el fin de que a la hora de la búsqueda no dependa el orden de introducción de las

palabras, es decir, si se busca “guitarra funda” debe de dar los mismo resultados que “fun-

da guitarra”. Dicho índice que se va a introducir se denomina como “Full-Text Index”,

el cuál mediante una sentencia en SQL utilizada sobre la base de datos de tipo “ALTER

TABLE” se consigue modificar el campo para que lo admita. Un ejemplo de la sentencia

SQL puede ser la siguiente:

37

Page 45: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

ALTER TABLE c h a r a c t e r i s t i c _ i n d e x 1 ADD FULLTEXT ( stem ) ;

4.4. Fase de creación de servicio webEn esta fase se va a proceder a inicializar el servicio web mendiante las bibliotecas

que proporciona Django.

Para poder crear el servicio, se procede a realizar las siguientes consultas en la termi-

nal del ordenador:

$django−admin s t a r t p r o j e c t S e a r ch

$python manage . py s t a r t a p p s e a r c h

De esta forma, conseguimos crear el servicio con la primera consulta, y mediante la

segunda creamos la carpeta que va a contener la aplicación, con el fichero “views.py”

que va a ser el que se va a modificar para poder realizar las funciones que va a utilizar el

buscador a definir.

4.5. Fase de creación de diccionarios de las tablas de unigrama parael uso del modelo vectorial

Con el fin de realizar el modelo vectorial sobre los datos de la búsqueda introdu-

cidos como input, se debe realizar previamente la creación de los diccionarios de las

tablas pertenecientes a los términos lematizados en unigramas de las tablas de “pro-

duct_description”,“related_entity” y “characteristics”. Para poder realizar dichos diccio-

narios se va a utilizar función corpora pertenecientes a la biblioteca de gensim, realizando

la siguiente línea de código para cada tabla:

d i c t i o n a r y = c o r p o r a . D i c t i o n a r y ( pdocs )

d i c t i o n a r y . s a ve ( ’ / Use r s / S a l v a / Desktop / Search_VL / s e a r c h / d i c t i o n a r i e s

/ vsm . d i c t ’ )

38

Page 46: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

En dicha línea de código, la variable “pdocs” contiene los datos pertenecientes a las

tablas de unigramas, que mediante la función “corpora.Dictionary” crea un diccionario de

dicha tabla y lo guarda en la variable de “dictionary”. Una vez se obtiene el diccionario se

guarda en un fichero con extensión “.dict”, con el fin de poder utilizarlo posteriormente

en el modelo vectorial.

Posteriormente, se deben de crear los ficheros que contengan los vectores relativos a

cada elemento dentro de la base de datos y del diccionario creado. Para ello, se utiliza

las funciones doc2bow sobre el diccionario para crear los vectores y MmCorpus.serialice

perteneciente a la biblioteca de corpora con el fin de almacenar los vectores en un fichero

con extensión “.mm”. Este proceso se realiza mediante las siguientes líneas de código:

v e c t o r s = [ d i c t i o n a r y . doc2bow ( doc ) f o r doc i n docs ]

c o r p o r a . MmCorpus . s e r i a l i z e ( ’ / Use r s / S a l v a / Desktop / Search_VL / s e a r c h /

d i c t i o n a r i e s / vsm_docs .mm’ , v e c t o r s )

4.6. Fase de implementación de funciones y modelo vectorial TF-IDFen el servicio web

Una vez se ha creado el servicio, se va a proceder a realizar las funciones necesarias

para el funcionamiento del buscador en el fichero “views.py”.

Lo primero que hay que tener en cuenta, es que el servidor va a recibir un json como

input de entrada con los datos pertenecientes a la búsqueda y posteriormente va a tener

que devolver un diccionario de json conteniendo los datos de los resultados a dicha soli-

citud. Para poder recibir el json y a su vez devolver dicho diccionario, se debe de realizar

un método POST, adquiriendo los datos de entrada con la siguiente línea de código:

i f r e q u e s t . method == "POST" :

r e s p o n s e = j s o n . l o a d s ( r e q u e s t . body )

Y en segundo lugar, devolver los diccionarios de json con la siguiente lía de código:

39

Page 47: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

r e t u r n J sonResponse ( d i c t i o n a r y , s a f e = F a l s e )

En segundo lugar, una vez se ha conseguido obtener el input como string, se procede

a realizar el proceso de vectorización, en el que se van a obtener los identificadores de

los productos que tienen mayor similitud con la búsqueda realizada. Para ello, primero se

cargan los diccionarios de cada tabla con las siguientes líneas de código:

d i c t i o n a r y P r o d u c t s = c o r p o r a . D i c t i o n a r y . l o a d (

’ s e a r c h / d i c t i o n a r i e s / v s m _ p r o d u c t _ d e s c r i p t i o n . d i c t ’ )

d i c t i o n a r y R e l a t e d E n t i t y = c o r p o r a . D i c t i o n a r y . l o a d (

’ s e a r c h / d i c t i o n a r i e s / v s m _ r e l a t e d _ e n t i t y . d i c t ’ )

d i c t i o n a r y C h a r a c t e r i s t i c s = c o r p o r a . D i c t i o n a r y . l o a d (

’ s e a r c h / d i c t i o n a r i e s / v s m _ c h a r a c t e r i s t i c . d i c t ’ )

En tercer lugar, una vez se han obtenido los diccionarios, se guardan en variables los

vectores previamente almacenados pertenecientes a cada elemento de cada tabla. Para ello

se realizan las siguiente líneas de código:

l o a d e d _ c o r p u s _ P r o d u c t s = c o r p o r a . MmCorpus (

’ s e a r c h / d i c t i o n a r i e s / v s m _ p r o d u c t _ d e s c r i p t i o n _ d o c s .mm’ )

l o a d e d _ c o r p u s _ R e l a t e d E n t i t y = c o r p o r a . MmCorpus (

’ s e a r c h / d i c t i o n a r i e s / v s m _ r e l a t e d _ e n t i t y _ d o c s .mm’ )

l o a d e d _ c o r p u s _ C h a r a c t e r i s t i c s = c o r p o r a . MmCorpus (

’ s e a r c h / d i c t i o n a r i e s / v s m _ c h a r a c t e r i s t i c _ d o c s .mm’ )

Posteriormente, una vez obtenidos los datos de los vectores, se procede a realizar los

modelos de TF-IDF y posteriormente se realizan las matrices de similitud entre los datos

obtenidos de los modelos TF-IDF. Todo este proceso se realiza mediante las siguientes

líneas de código:

t f i d f P r o d u c t s = models . T f id fMode l ( l o a d e d _ c o r p u s _ P r o d u c t s )

t f i d f R e l a t e d E n t i t y = models . T f id fMode l ( l o a d e d _ c o r p u s _ R e l a t e d E n t i t y )

t f i d f C h a r a c t e r i s t i c s = models . T f id fMode l (

l o a d e d _ c o r p u s _ C h a r a c t e r i s t i c s )

40

Page 48: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

c o r p u s P r o d u c t s D = t f i d f P r o d u c t s [ l o a d e d _ c o r p u s _ P r o d u c t s ]

c o r p u s R e l a t e d E n t i t y D = t f i d f R e l a t e d E n t i t y [

l o a d e d _ c o r p u s _ R e l a t e d E n t i t y ]

c o r p u s C h a r a c t e r i s t i c s D = t f i d f C h a r a c t e r i s t i c s [

l o a d e d _ c o r p u s _ C h a r a c t e r i s t i c s ]

i n d e x P r o d u c t s = s i m i l a r i t i e s . M a t r i x S i m i l a r i t y ( co rpusP roduc t sD ,

n u m _ f e a t u r e s = l e n ( d i c t i o n a r y P r o d u c t s ) )

i n d e x R e l a t e d E n t i t y = s i m i l a r i t i e s . M a t r i x S i m i l a r i t y (

c o r p u s R e l a t e d E n t i t y D , n u m _ f e a t u r e s = l e n ( d i c t i o n a r y P r o d u c t s ) )

i n d e x C h a r a c t e r i s t i c s = s i m i l a r i t i e s . M a t r i x S i m i l a r i t y (

c o r p u s C h a r a c t e r i s t i c s D , n u m _ f e a t u r e s = l e n ( d i c t i o n a r y P r o d u c t s ) )

Una vez obtenidos las matrices de similitud, se preprocesa la búsqueda mediante el

proceso de lematización y se crean a su vez vectores de la misma búsqueda, observando

posteriormente mediante las matrices de similitud, el porcentaje de acierto que tiene con

cada entrada de la base de datos. El proceso descrito se realiza con las siguientes líneas de

código, donde las variables “qtidf_” pertenecen a los datos de la búsqueda una vez usados

sobre los modelos TF-IDF:

s i m P r o d u c t s = i n d e x P r o d u c t s [ q t f i d f P r o d u c t s ]

s i m R e l a t e d E n t i t y = i n d e x R e l a t e d E n t i t y [ q t f i d f R e l a t e d E n t i t y ]

s i m C h a r a c t e r i s t i c s = i n d e x C h a r a c t e r i s t i c s [ q t f i d f C h a r a c t e r i s t i c s ]

r a n k i n g P r o d u c t s = l i s t ( s o r t e d ( enumera t e ( s i m P r o d u c t s ) , key=

i t e m g e t t e r ( 1 ) , r e v e r s e =True ) )

r a n k i n g R e l a t e d E n t i t y = l i s t ( s o r t e d ( enumera t e ( s i m R e l a t e d E n t i t y ) , key

= i t e m g e t t e r ( 1 ) , r e v e r s e =True ) )

r a n k i n g C h a r a c t e r i s t i c s = l i s t ( s o r t e d ( enumera t e ( s i m C h a r a c t e r i s t i c s ) ,

key= i t e m g e t t e r ( 1 ) , r e v e r s e =True ) )

En este momento, obtenidos los rankings pertenecientes al porcentaje de acierto entre

las entradas y la búsqueda, se almacenan todos los identificadores de dichas entradas en

el orden de mayor a menor porcentaje, siendo estos dispuestos entre un 100 % y un 30 %

de acierto, en una lista para posteriormente ser usados en el proceso de matching dentro

de la base de datos.

Lleado a este punto, se procede a realizar el proceso de lematización por n-gramas

dispuesto en la “Fase de lematización de tablas” y posteriormente se realiza una llama-

da a la base de datos con la biblioteca de PyMySQL, en la que la sentencia está limitada

41

Page 49: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

por los identificadores pertenecientes a los productos con mayor acierto sobre la búsqueda

obtenidos en el modelo de vectores TF-IDF, y los datos que se buscan son los lexemas dis-

puestos en n-gramas de la solicitud de búsqueda. Para realizar este proceso de matching

se ha realizado la siguiente línea de código, donde el primer “ %s” pertenece al índice

de tamaño de n-grama, el segundo al elemento perteneciente a la solicitud de búsqueda

lematizado en el tamaño que corresponda con el n-grama de la tabla donde se va a buscar,

y por último el tercero corresponde con la lista de identificadores que se va a usar para

limitar la búsqueda en las tablas de la base de datos:

queryMatchXGrama = " " " SELECT i d _ p r o d u c t FROM

p r o d u c t _ d e s c r i p t i o n _ i n d e x %s WHERE MATCH( stem ) AGAINST (’ % s ’ ) AND

i d _ p r o d u c t i n ( %s ) " " " %(i n d i c e , e lemento , l i s t a V e c t o r i z a c i o n )

Una vez obtenidos los resultados de la búsqueda, se procede a realizar el encapsula-

miento de los datos en un diccionario de json. Si la búsqueda es nula, es decir, no existen

resultados, se encapsulará en un json un mensaje que indique que no existen resultados ni

identificadores que correspondan con la búsqueda. Todo este proceso se realiza mediante

las siguientes líneas de código:

i f l i s t a F i n a l == O r d e r e d S e t ( ) :

r e s p u e s t a = {

" i d " : "No ID " ,

" name " : "No R e s u l t s "

}

l i s t a R e s p u e s t a . append ( r e s p u e s t a )

e l s e :

f o r n i n l i s t a F i n a l :

r e s p u e s t a = {

" i d " : n [ 0 ] ,

" name " : n [ 1 ] ,

}

l i s t a R e s p u e s t a . append ( r e s p u e s t a )

o r i g i n a l D i c t i o n a r y = {}

o r i g i n a l D i c t i o n a r y = {

" p r o d u c t o s " : l i s t a R e s p u e s t a

}

r e t u r n o r i g i n a l D i c t i o n a r y

42

Page 50: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

4.7. Fase de creación de cliente de pruebasEn esta fase se procede a realziar la creación de un cliente para poder realizar pruebas

sobre el servicio web creado. Para ello se ha realizado un fichero html que contiene lo

necesario para poder introducir un texto de búsqueda, lo envíe encapsulado en un json

al servidor, y una vez devueltos los resultados en un diccionario de json, este ser capaz

de poder mostrarlos por pantalla en formato de tabla, indicando los campos de “ID” y de

“NAME” pertenecientes al producto.

Con el fin de que el cliente de pruebas pueda realizar dichas tareas, se va a utilizar

JQuery para poder enviar métodos POST al servidor y mostrar los resultados de forma

correcta por pantalla. El código descrito para que se encapsulen los datos de la búsqueda

en un json y devuelva los resultados en forma de tabla es el siguiente:

f u n c t i o n r e t u r n S e n t e n c e ( ) {

v a r e l e m e n t o = document . ge tE lemen tById ( " S e a r c h " ) . v a l u e

/ / a l e r t ( e l e m e n t o )

$ . a j a x ( {

t y p e : ’POST ’ ,

u r l : ’ / s e a r c h ’ ,

d a t a : JSON . s t r i n g i f y ( {

s e n t e n c e : e l e m e n t o

} ) ,

s u c c e s s : ( da t a , t e x t S t a t u s , jqXHR ) => {

c o n s o l e . l o g ( da t a , t e x t S t a t u s , jqXHR )

$ ( ’ t a b l e > tbody > t r > t d ’ ) . p a r e n t ( ) . remove ( ) ;

numberP roduc t s ( d a t a ) ;

} ,

c o n t e n t T y p e : ’ a p p l i c a t i o n / j s o n ’ ,

da t aType : ’ j s o n ’

} )

}

f u n c t i o n numberProduc t s ( d a t a ) {

p r o d u c t o s = d a t a [ " p r o d u c t o s " ] ;

v a r i t e m s = [ ] ;

$ . each ( p r o d u c t o s , f u n c t i o n ( key , v a l ) {

i t e m s . push ( "< t r >" ) ;

i t e m s . push ( "< t d i d = ’ ’ "+key+" ’ ’ > "+ v a l . i d +" </ td >" ) ;

i t e m s . push ( "< t d i d = ’ ’ "+key+" ’ ’ > "+ v a l . name+" </ td >" ) ;

i t e m s . push ( " </ t r >" ) ;

} )

$ ( ’< tbody / > ’ ,{ h tml : i t e m s . j o i n ( " " ) } ) . appendTo ( " t a b l e " ) ;

getNumber ( ) ;

}

43

Page 51: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

4.8. Fase de implementación del servicio de autocompletadoComo función adicional al buscador del cliente, se ha realizado un método de auto-

completado que funciona cada vez que se levanta una tecla en la búsqueda. Para ello, se ha

realizado un método que se encarga de enviar una solicitud en formato json al servidor con

los datos que se han introducido en la barra de búsqueda hasta que se levanta una tecla,

realizando una llamada a la base de datos, devolviendo los nombres de los productos que

son similares a la búsqueda que se está realizando. El código utilizado para enviar el json,

está realizado en JQuery y la búsqueda en la base de datos se realiza de igual forma que en

el método de búsqueda que usa el servicio en el momento de buscar los resultados una vez

se ha hecho la solicitud de búsqueda completa. El código escrito en JQuery es el siguiente:

f u n c t i o n au toComple t e ( ) {

v a r e l e m e n t o = document . ge tE lemen tById ( " S e a r c h " ) . v a l u e

$ . a j a x ( {

t y p e : ’POST ’ ,

u r l : ’ / a u t o c o m p l e t e ’ ,

d a t a : JSON . s t r i n g i f y ( {

f r a s e : e l e m e n t o

} ) ,

s u c c e s s : ( da t a , t e x t S t a t u s , jqXHR ) =>{

c o n s o l e . l o g ( da t a , t e x t S t a t u s , jqXHR )

p r o d u c t o s = d a t a [ " p r o d u c t o s " ]

v a r a r r = [ ]

$ . each ( p r o d u c t o s , f u n c t i o n ( key , v a l u e ) {

i f ( $ . i n A r r a y ( v a l u e . name , a r r ) === −1) {

a r r . push ( v a l u e . name )

}

} )

$ ( " # S e a r c h " ) . a u t o c o m p l e t e ( {

s o u r c e : a r r

} ) ;

} ,

c o n t e n t T y p e : ’ a p p l i c a t i o n / j s o n ’ ,

da t aType : ’ j s o n ’

} )

}

4.9. Fase de implementación del filtro por número de resultadosLa última función que se ha implementado en el cliente, es el filtro de búsqueda por

número de elementos, es decir, el usuario que utiliza la aplicación decide el número de

elementos que quiere que le aparezcan por pantalla. El código utilizado ha sido descrito

44

Page 52: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

en JQuery mediante el uso de botones en la interfaz, siendo este el siguiente:

f u n c t i o n getNumber ( ) {

$ ( document ) . on ( " c l i c k " , ’ #bu5 ’ , f u n c t i o n ( ) {

$ ( " t a b l e > tbody > t r " ) . h i d e ( ) . s l i c e ( 0 , 6 ) . show ( ) ;

} )

$ ( document ) . on ( " c l i c k " , ’ # bu10 ’ , f u n c t i o n ( ) {

$ ( " t a b l e > tbody > t r " ) . h i d e ( ) . s l i c e ( 0 , 11) . show ( ) ;

} )

$ ( document ) . on ( " c l i c k " , ’ # bu15 ’ , f u n c t i o n ( ) {

$ ( " t a b l e > tbody > t r " ) . h i d e ( ) . s l i c e ( 0 , 16) . show ( ) ;

} )

$ ( document ) . on ( " c l i c k " , ’ # bu20 ’ , f u n c t i o n ( ) {

$ ( " t a b l e > tbody > t r " ) . h i d e ( ) . s l i c e ( 0 , 21) . show ( ) ;

} )

$ ( document ) . on ( " c l i c k " , ’ # bu30 ’ , f u n c t i o n ( ) {

$ ( " t a b l e > tbody > t r " ) . h i d e ( ) . s l i c e ( 0 , 31) . show ( ) ;

} )

$ ( document ) . on ( " c l i c k " , ’ # bu50 ’ , f u n c t i o n ( ) {

$ ( " t a b l e > tbody > t r " ) . h i d e ( ) . s l i c e ( 0 , 51) . show ( ) ;

} )

$ ( document ) . on ( " c l i c k " , ’ #buTOT ’ , f u n c t i o n ( ) {

$ ( " t a b l e > tbody > t r " ) . show ( ) ;

} )

}

El código HTML queda descrito al final de la siguiente forma:

< d i v c l a s s =" c o n t a i n e r theme−showcase " r o l e =" main ">

< d i v c l a s s =" jumbo t ron ">

<h1 a l i g n =" c e n t e r "> I n t r o d u c e your o b j e c t t o s e a r c h here < / h1>

<p c l a s s =" t e x t −c e n t e r ">

< i n p u t t y p e =" t e x t " name = " S e a r c h " i d = " S e a r c h " onkeyup="

au toComple t e ( ) ">

< i n p u t t y p e =" s u b m i t " v a l u e =" Send " s t y l e =" background−c o l o r

: # 4 CAF50 ; c o l o r : rgb ( 2 5 5 , 255 , 255) ; " o n c l i c k =" r e t u r n S e n t e n c e ( ) ">

< d i v c l a s s ="w3−c o n t a i n e r " a l i g n =" c e n t e r ">

<h6>Number o f p r o d u c t s : < / h6>

< b u t t o n c l a s s =" b u t t o n " i d =" bu5 " >5 </ b u t t o n >

< b u t t o n c l a s s =" b u t t o n " i d =" bu10 " >10 </ b u t t o n >

< b u t t o n c l a s s =" b u t t o n " i d =" bu15 " >15 </ b u t t o n >

< b u t t o n c l a s s =" b u t t o n " i d =" bu20 " >20 </ b u t t o n >

< b u t t o n c l a s s =" b u t t o n " i d =" bu30 " >30 </ b u t t o n >

< b u t t o n c l a s s =" b u t t o n " i d =" bu50 " >50 </ b u t t o n >

< b u t t o n c l a s s =" b u t t o n " i d ="buTOT">Todos < / b u t t o n >

</ div >

45

Page 53: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

</p>

< t a b l e c l a s s = " t a b l e t a b l e −b o r d e r e d t a b l e −s t r i p e d t a b l e −hover ">

< t h r e a d >

< t r a l i g n =" c e n t e r ">

< t h b g c o l o r =" #9 b f f b c ">ID </ th >

< t h b g c o l o r =" #9 b f f b c ">NAME</ th >

</ t r >

</ t h r e a d >

</ t a b l e >

</ div >

5. PRUEBAS Y RESULTADOS

5.1. Prueba 1: Una palabra.

Figura 14: Prueba 1

46

Page 54: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

5.2. Prueba 2: Dos palabras.

Figura 15: Prueba 2

47

Page 55: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

5.3. Prueba 3: Tres palabras.

Figura 16: Prueba 3

5.4. Prueba 4: Cuatro palabras o más.

Figura 17: Prueba 4

48

Page 56: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

5.5. Prueba 5: Búsqueda errónea.

Figura 18: Prueba 5

5.6. Prueba 6: Búsqueda de un elemento mal escrito.

Figura 19: Prueba 6

49

Page 57: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

5.7. Prueba 7: Búsqueda de un elemento que no se encuentra dentrode la base de datos.

Figura 20: Prueba 7

5.8. Prueba 8: Búsqueda de palabras con caracteres UTF-8.

Figura 21: Prueba 8

50

Page 58: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

5.9. Prueba 9: Búsqueda de elemento limitando resultados en 5 ele-mentos.

Figura 22: Prueba 9

5.10. Prueba 10: Muestra de sistema de autocompletado.

Figura 23: Prueba 10

51

Page 59: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

5.11. Prueba 11: Búsqueda de elementos en distinto orden.

Figura 24: Prueba 11.1

Figura 25: Prueba 11.2

52

Page 60: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

5.12. Prueba 12: Búsqueda con una palabra (Error con devoluciónde elemento)

Como se puede observar en la imagen, se ha solicitado la búsqueda de una “guitarra”,

y se han obtenido datos de soporte de guitarra, fundas de guitarras... y guitarras entre

estos, en lugar de aparecer las guitarras en primer lugar.

Figura 26: Prueba 12.1

53

Page 61: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

Figura 27: Prueba 12.2

6. DISCUSIÓNEl servicio de búsqueda que se ha desarrollado mejora en muchos aspectos respecto a

buscadores como pueden ser “Magento”, “Prestashop” o “Opencart”, debido a que uiliza

un proceso de lematización de búsquedas y resultados en vez de realizar la búsqueda por

el nombre del producto completo.

A su vez, el servicio de búsqueda implementa un proceso de modelo vectorial, utiliza-

do para poder reducir el número de las búsquedas en la base de datos según el porcentaje

de acierto que tiene la solicitud de búsqueda con los productos que existen dentro de la

base de datos.

Por otro lado, debido al problema existente y demostrado en la prueba número 12 26,

no se puede decir que supera a buscadores como pueden ser “Sphinx”, “Solr” y “Elastic-

Search” en cuanto a la búsqueda correcta al completo de términos compuestos únicamente

por una sola palabra.

54

Page 62: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

7. CONCLUSIONESEl trabajo que se ha llevado a cabo en este proyecto, ha sido la realización de un

servicio de búsqueda para una empresa correspondiente al comercio electrónico. Dicho

servicio de búsqueda utiliza técnicas de lematización y modelación de vectores con el fin

de obtener los resultados más exactos a las búsquedas que el usuario que utiliza el servicio

realiza.

En primer lugar se realiza la lematización de la búsqueda con el fin de realizar en

segundo lugar, el modelo de vectores TF-IDF y la búsqueda en la base de datos (junto

con los identificadores obtenidos en el modelo de vectores) de los productos que más se

adcuan a la solicitud del cliente, devolviéndolos en un diccionario de json con el fin de

poder mostrarlo por pantalla al usuario.

Como mejora futura a este buscador, se pueden tener en cuenta el método de retro-

alimentación mediante Machine Lerning, utilizado para hacer que el servicio reciba los

resultados y los devuelva al cliente ordenados según el orden de preferencia, con el fin de

poder solventar el problema existente con la prueba 12 26.

REFERENCIAS[1] T. Rubenczyk, N. Dershowitz, Y. Choueka, M. Flor, O. Hod y A. Roth, Search

engine method and apparatus, 2003. dirección: https://patents.google.com/patent/US20030217052A1/en.

[2] A. Broder, “A taxonomy of web search”, ACM SIGIR Forum, vol. 36, n.o 2, pág. 3,

2002, ISSN: 01635840. DOI: 10.1145/792550.792552.

[3] S. R. Lawrence y C. L. Giles, Meta search engine, 2006. dirección: https://patents.google.com/patent/US6999959B1/en.

[4] D. Sullivan, “How Search Engines Work”, 2002. dirección: http : / / www .uniroma2.it/didattica/prog_web/deposito/search_engine.pdf.

[5] W. Chun, Core Python Programming. Prentice Hall Professional, 2001, Google-

Books-ID: mh0bU6NXrBgC, ISBN: 978-0-13-026036-9.

[6] J. Melton, “SQL language summary”, ACM Computing Surveys, 141–143, 1996.

[7] R. Camps Paré, Bases de datos. UOC, 2005, ISBN: 978-84-9788-269-9.

[8] Dirección: https://pymysql.readthedocs.io/en/latest/index.html.

[9] M.-P. Perea y H. Ueda, Método general de lematización con una gramática míni-ma y un diccionario óptimo. Aplicación a un corpus escrito dialectal. dirección:

https://lecture.ecc.u-tokyo.ac.jp/~cueda/kenkyu/zyoho/lematizacion.pdf.

55

Page 63: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

[10] N. Madnani, “Getting started on natural language processing with Python”, Cross-roads, vol. 13, n.o 4, 5–5, 2007, ISSN: 15284972. DOI: 10.1145/1315325.1315330.

[11] Dirección: https://www.nltk.org/api/nltk.stem.html.

[12] pág. 369,

[13] L. Richardson, “Beautiful Soup Documentation”, pág. 68,

[14] J. Plekhanova, “Evaluating web development frameworks:”, pág. 20,

[15] E. T. Bray, “The JavaScript Object Notation (JSON) Data Interchange Format”,

2017, ISSN: 2070-1721. dirección: http://www.rfc-editor.org/info/rfc8259.

[16] W. B. Frakes y R. Baeza-Yates, eds., Information Retrieval: Data Structures andAlgorithms. Upper Saddle River, NJ, USA: Prentice-Hall, Inc., 1992, ISBN: 0-13-

463837-9.

[17] R. Rehurek y P. Sojka, “Gensim—Statistical Semantics in Python”, pág. 1,

[18] M. A. Alvarez, “Este manual ha sido realizado por los siguientes colaboradores de

DesarrolloWeb.com:”, pág. 96,

[19] J. Ramos, E-Commerce 2.0. XinXii, 2017, Google-Books-ID: RZE2DgAAQBAJ,

ISBN: 978-3-96142-470-2.

[20] R. C. Miller y K. Bharat, “SPHINX: a framework for creating personal, site-specific

Web crawlers”, Computer Networks and ISDN Systems, Proceedings of the Seventh

International World Wide Web Conference, vol. 30, n.o 1, 119–130, 1998, ISSN:

0169-7552. DOI: 10.1016/S0169-7552(98)00064-6.

[21] Proceedings of the SIGIR 2012 Workshop on Open Source Information Retrieval.Department of Computer Science, University of Otago, 2012, ISBN: 978-0-473-

22025-9.

[22] K. N. Vavliakis, G. Katsikopoulos y A. L. Symeonidis, “E-commerce Personaliza-

tion with Elasticsearch”, Procedia Computer Science, pág. 6, 2018.

56

Page 64: TRABAJO FIN DE GRADO Servicio de búsqueda inteligente para …oa.upm.es/55745/1/TFG_SALVADOR_GONZALEZ_GERPE.pdf · A su vez, existen varios tipos de consultas[2], realizadas en los

Este documento esta firmado porFirmante CN=tfgm.fi.upm.es, OU=CCFI, O=Facultad de Informatica - UPM,

C=ES

Fecha/Hora Mon Jun 03 10:51:36 CEST 2019

Emisor delCertificado

[email protected], CN=CA Facultad deInformatica, O=Facultad de Informatica - UPM, C=ES

Numero de Serie 630

Metodo urn:adobe.com:Adobe.PPKLite:adbe.pkcs7.sha1 (AdobeSignature)