Professional Documents
Culture Documents
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA EN INFORMÁTICA
Santiago de Chile
2 - 2017
TABLA DE CONTENIDOS
CAPÍTULO 1: INTRODUCCIÓN 1
MARCO TEÓRICO 2
Paradigmas de Programación 2
Paradigma Imperativo-Procedural 2
OBJETIVOS 2
CAPÍTULO 2: ANÁLISIS DE LA SOLUCIÓN 3
Obtener Documentos 3
Crear Índice 3
Guardar Índice 3
Cargar Índice 3
Buscar frase 3
Mostrar resultados 3
Menú 4
CAPÍTULO 3: DESARROLLO DE LA SOLUCIÓN 4
LIBRERÍAS UTILIZADAS 4
ESTRUCTURAS CREADAS 4
FUNCIONES CREADAS 5
StopWords* loadStopWords(char* pathStopWordsFile, code *statusCode) 5
Index* createIndex(char* pathDocumentsFile, StopWords *sw, code* statusCode) 6
void saveIndex(Index *i, int *id, code *statusCode) 6
Index* loadIndex(int id, code *statusCode) 6
Ranking* query(Index *i, StopWords *sw, char* text, code *statusCode) 6
void displayResults(Ranking *r, int TopK, code *statusCode) 7
void menu(code statusCode) 7
CAPÍTULO 4: RESULTADOS 7
POSIBLES ERRORES 7
CAPÍTULO 5: CONCLUSIONES 7
CAPÍTULO 6: BIBLIOGRAFÍA 8
CAPÍTULO 1: INTRODUCCIÓN
1
La problemática consta de implementar un sistema de recuperación de información,
como lo es Google o Bing, pero de manera más simplificada. Para ello se solicita crear
funciones obligatorias, que representan los subproblemas a llevar, junto con una serie de
propuestas a implementar.
Para llevar a cabo la solución se hizo uso de ciertas herramientas, como el editor de
texto Sublime Text 2 y Google Drive como controlador de versiones.
MARCO TEÓRICO
Paradigmas de Programación
Es un modelo para resolver problemas. Los lenguajes de programación
necesariamente utilizan uno o varios paradigmas.
Paradigma Imperativo-Procedural
Describe la programación como una secuencia de instrucciones que cambian el estado
de un programa. Estas instrucciones se leen en orden en que aparecen.
OBJETIVOS
Como anteriormente se mencionó el objetivo general consta de obtener los
documentos donde se encuentran las palabras que el usuario ingresó. Para lograr cumplir este
objetivo es necesario plantearse objetivos específicos, los cuales se presentan a continuación.
● Obtener Documentos.
● Crear Índice.
● Guardar Índice.
● Cargar Índice.
2
● Buscar frase.
● Mostrar resultados.
● Menú.
1. Obtener Documentos
Es necesario recibir un archivo donde se encuentren los documentos almacenados,
además de recibir otro archivo que incluya las StopWords las cuales serán palabras que no se
deben tomar en cuenta para la búsqueda de la frase ingresada por el usuario.
2. Crear Índice
Luego de recibir los documentos se debe crear un índice donde se obtenga por cada
palabra leída de los documentos (y que no se encuentren en el StopWords) una lista de
documentos con su ID donde aparezca dicha palabra.
3. Guardar Índice
Permite almacenar la información recolectada por el índice creado en un archivo de
texto, además debe autogenerar un ID del archivo e incluir la fecha y hora de cuando se
almacena esta información.
4. Cargar Índice
A partir de un archivo de texto ya creado donde se encuentre almacenado algún índice
se debe obtener dicho índice. Para ello es necesario primero obtener la ID del archivo y
verificar si es que éste existe.
5. Buscar frase
Se debe permitir al usuario ingresar una frase y que se busque a partir de ésta en el
índice cargado todos los documentos encontrados por palabra y ordenarlos de mayor a menor
incidencia, utilizando un ranking.
6. Mostrar resultados
Luego de obtener los documentos encontrados y las palabras ordenadas se debe
mostrar al usuario dichos resultados.
3
7. Menú
Se debe permitir al usuario elegir la opción que desea ejecutar.
Primero se crearon dos archivos, uno con extensión .c y otro con extensión .h, el
primero correspondiente a las funciones del programa y el segundo a las cabeceras,
estructuras y librerías importadas. A continuación se presentarán de manera más específica
lo recientemente mencionado.
LIBRERÍAS UTILIZADAS
Cada una de las librerías que se presentan otorgan funciones que fueron utilizadas en
el proyecto, tales como malloc, strcpy, time_t, etc.
● stdio.h
● stdlib.h
● string.h
● time.h
ESTRUCTURAS CREADAS
Las estructuras que se mencionan a continuación son parte fundamental para obtener
la solución a la problemática, y serán utilizadas en la mayoría de las funciones que resuelven
los objetivos específicos.
4
- struct Documento *sgte, un puntero a otro documento.
FUNCIONES CREADAS
Para lograr cumplir cada uno de los objetivos específicos, y a su vez el general, se
utilizaron las funciones que se encuentran a continuación.
5
Index* createIndex(char* pathDocumentsFile, StopWords *sw, code* statusCode)
Crea un índice a partir de un archivo de texto entregado por el usuario, el cual
contiene todos los documentos, este es ubicado en pathDocumentsFile. Esta función recibe
como parámetros el archivo, el arreglo de las StopWords y el statusCode, retorna un arreglo
de Index, donde en cada posición se encuentra la palabra indexada con su lista de documentos
y el largo del arreglo.
En el procedimiento primero abre el archivo contenedor de los documentos, luego
obtiene la cantidad de palabras del archivo y crea un arreglo de Index del tamaño de cantidad
de palabras. Luego lee el archivo y va viendo en qué parte del texto se encuentra, es decir,
índice, título, autor, bibliografía o texto del documento. Con estos datos procede a almacenar
correspondientemente en el interior del índice las palabras y la lista de documentos. Para
crear la lista de documentos se utiliza una lista enlazada. Finalmente cierra el archivo.
6
StopWords e índice, si encuentra coincidencia con el último la agrega al arreglo ranking junto
con sus otros datos (lista documentos, cantidad total que se encuentra en esa lista, veces que
el usuario ingresó la palabra y total documentos encontrados). Luego calcula el valor final
que queda en el ranking y lo agrega. Finalmente ordena por ranking el arreglo y lo retorna.
CAPÍTULO 4: RESULTADOS
El resultado final de esta entrega corresponde al buscador de documentos creado en
lenguaje de programación C, con paradigma Imperativo-Procedural. El código fuente del
buscador (llamado “ELGOOG”) puede ser compilado para su ejecución tanto en Windows
como en Linux, debido a que el código cuenta con las normas del ANSI C.
Al ejecutar el programa se muestra por pantalla el menú con las opciones a elegir.
Con respecto a los requerimientos extras, no fueron implementados debido a la falta
de tiempo, ni algunos requerimientos funcionales por el mismo motivo .
POSIBLES ERRORES
En el desarrollo del programa, se tiene contemplado varios posibles errores, los cuales
fueron evitados con verificaciones, pero eso no evita que quizás se pase más de alguna
verificación. Por ejemplo si se ingresa un archivo, y este no existe, se le da a saber al
usuario.
CAPÍTULO 5: CONCLUSIONES
Para lograr obtener el buscador ELGOOG fueron muchas horas de arduo trabajo,
donde se tuvo que analizar el problema y luego programar. Debido a un mal análisis en un
inicio se perdió tiempo valioso, ya que se tuvo que partir desde cero luego de darse cuenta de
este mal análisis.
7
Sin embargo, después de corregir lo anterior se logró avanzar con mucha más rapidez
y se alcanzó a cumplir con todos los pedidos obligatorios.
Los conocimientos vistos en cátedra fueron utilizados en esta experiencia, como por
ejemplo el paso por referencia. Además se logró cumplir con los objetivos propuestos en un
inicio.
En futuras entregas se debe realizar el mismo proyecto, con la diferencia de que los
lenguajes a utilizar ocupan otros paradigmas.
CAPÍTULO 6: BIBLIOGRAFÍA
- Qué es un índice invertido
http://copro.com.ar/Indice_invertido.html
- Sentencia switch
http://blog.espol.edu.ec/programando/sentencia-switch-lenguaje-c/