Construcción del índice invertido - UTEC-BDII/Lab6.2 GitHub Wiki
La implementación del índice invertido se hizo en una clase denominada InvertedIndex que va a contener los métodos para su contrucción así como los métodos para hacer las consultas booleanas.
Estructura de la clase
La clase del InvertedIndex tiene dos atributos filename, que guarda el nombre del archivo de texto en el que se va a almacenar el índice, y index, diccionario que guarda el índice en sí y que mapea cada término con una lista compuesta por la frecuencia del término y la lista de los IDs de los documentos en los que aparece.
El constructor de la clase recibe y asigna el valor de filename y llama a la función createIndex la cual construye el index. La función write escribe el index en el archivo de texto con el nombre de filename. La función L recibe un término y retorna la lista de publicaciones asociadas a este. Finalmente, las funciones AND, OR y AND_NOT aplican las operaciones respectivas sobre dos términos.
Construcción de index
La función createIndex primero llama a la función readDocuments y almacena el valor retornado en el diccionario docs. Luego, recorre la lista de términos de cada documento para almacenar en la lista tokens todos los términos en el conjunto de documentos. Se almacenan estos términos sin repeticiones usando un set en otra lista tokensSet que se recorre para guardar los pares de términos y su frecuencia en todos los documentos, calculada en base a la lista original de términos, en la lista tokenFreq. Esta lista se ordena de modo que al final se ubiquen al final los términos que tienen una mayor frecuencia y, de haber empates, se ordenen en orden alfabético. De este modo, podemos extraer los últimos 500 elementos de la lista para tener los 500 términos más frecuentes de toda la colección priorizandolos según orden alfabético en el caso de que tengan la misma frecuencia. Finalmente, esta lista es ordenada y recorrida para agregar sus contenidos al índice. Antes de finalizar la función, se llama a write para escribir el índice recién creado en un archivo de texto.
Escritura en archivo de texto
Para la escritura primero se abre el archivo con el nombre definido en filename y se crea de no existir. Luego, se hace un recorrido por index escribiendo cada término con la lista de documentos asociado a este según el formato solicitado. Al finalizar, se cierra el archivo.