Coder Social home page Coder Social logo

search-text's Introduction

Índice Invertido para Búsqueda y Recuperación de Información

Este proyecto se centra en la implementación de un Índice Invertido eficiente para la búsqueda y recuperación de información en documentos de texto. En este informe se presentarán los detalles del proyecto, incluyendo los objetivos, la descripción del sistema, los requisitos y las instrucciones de instalación.

Integrante

  • Marco Wanly Obregón Casique [202010147]

Docente

  • Heider Sanchez Enriquez

Objetivos

El objetivo principal de este proyecto es desarrollar un sistema de búsqueda y recuperación de información basado en el Índice Invertido. Los objetivos específicos incluyen:

  • Implementar el algoritmo de construcción del Índice Invertido.
  • Realizar el preprocesamiento de los documentos de texto, incluyendo tokenización y filtrado de stopwords.
  • Aplicar el cálculo de pesos TF-IDF para la ponderación de términos.
  • Diseñar e implementar una interfaz de usuario para realizar consultas y mostrar los resultados.

Descripción del Sistema

El sistema se compone de dos partes principales: el backend y el frontend.

Backend

En el backend, se implementa el Índice Invertido y se realiza el procesamiento de los documentos. Las tareas realizadas incluyen:

  • Tokenización: Dividir los documentos en palabras o términos.
  • Filtrado de stopwords: Eliminar palabras comunes que no aportan información relevante.
  • Cálculo de pesos TF-IDF: Asignar pesos a los términos según su frecuencia en los documentos y en la colección.
  • Construcción del Índice Invertido: Estructurar y organizar la información de los términos y documentos.
  • Implementación de los Apis a consumir -> Busqueda y Carga.

Frontend

El frontend consiste en una interfaz de usuario que permite realizar consultas y mostrar los resultados de búsqueda. Las funcionalidades incluyen:

  • Entrada de consulta: El usuario puede ingresar una consulta en lenguaje natural.
  • Procesamiento de consulta: Se realiza el preprocesamiento de la consulta para buscar los términos relevantes.
  • Búsqueda en el Índice Invertido: Se busca en el Índice Invertido los documentos que coincidan con la consulta.
  • Presentación de resultados: Los resultados de la búsqueda se muestran al usuario de forma clara y legible.

Requisitos

Para ejecutar el proyecto, se requiere tener instalado lo siguiente:

  • Backend:
fastapi==0.68.1
uvicorn==0.15.0
nltk==3.6.3
psycopg2==2.9.1
  • Frontend:
Angular = 15.2.2
Node = v14.20.1

Aplicaciones adicionales añadidas

  • Se creo un servicio EC2 en amazon donde la base de datos se encuentra levantada

Instrucciones de Instalación

  • Backend:
git clone https://github.com/OBCApps/search-text.git
cd search-text
pip install -r requirements.txt
python3 -m uvicorn api:app --host 0.0.0.0 --port 8000
  • Frontend:
git clone https://github.com/OBCApps/search-text.git
cd search-text
npm install
ng serve --open

Función de las técnicas

Vista Web

  • Vista general de búsqueda

  • Vista de resultado

    • Vista de Agregar

Backends Implementados

Busqueda de elementos

  • Tokenizar y evaluar la relevancia de la consulta.
  • Comparar con los índices invertidos aplicando la similitud del coseno y ordenar los resultados.
  • Presentar los resultados más relevantes al usuario
def search_tweet(query, k): 
    print("search_tweet_local(query, k):")
    global direction_dataset_clean
    direction_dataset_clean = "./src/clean_data" 

    global direction_indexs
    direction_indexs =  "./src/indexs-local/index"
    documentos = documentos_relevantes(clean_all(query)) 
    palabras = clean_all(query) 

    list_fined = search_valid(documentos , palabras)

    
    return list_fined[:k]

Diagrama

Creación del Indice Invertido

  • Extraer el ID y el texto relevante de cada archivo JSON.
  • Leer y procesar los archivos como diccionarios.
  • Limpiar y tokenizar el texto de cada tweet.
  • Calcular la frecuencia de cada palabra en los tweets (tf - term frequency).
  • Calcular el puntaje TF-IDF para cada palabra.
  • Agrupar los resultados por cada 5 documentos.
  • Escribir un índice invertido en la memoria secundaria para cada grupo de documentos
def create_invert_index():
    generate_clean_tweets()
    print("... Construcción Indice Local.. ")
    global ruta_archivo
    ruta_archivo = "./src/indexs-local"
    
    global direction_dataset_clean
    direction_dataset_clean = "./src/clean_data"

    global nanmes_docs
    nanmes_docs = os.listdir(direction_dataset_clean) 
    
    all_jsns_frecuency = [] 

    for filename in nanmes_docs:
        lista = []       
        with open(direction_dataset_clean + '/' + filename, 'r', encoding='utf-8') as all_tweets:
            print(f"Load File: {direction_dataset_clean + '/' + filename}")
            all_tweets_dictionary = json.load(all_tweets)
            for tweet in all_tweets_dictionary: 
                temp = clean_all2(all_tweets_dictionary[tweet]) 
                lista.append(Counter(temp))
            all_jsns_frecuency.append( sum(lista, Counter()) ) 
    
    calculate_TF_IDF(all_jsns_frecuency)
    print("... Construcción Local Finalizada .. ")

Diagrama

Manejo de Memoria Secundaria

  • Para este sistema se aplicó la división entre documentos. Cada 5 documentos procesados obtener un archivo indice. Esto con el fin de dividir el trabajo en partes más pequeñas y manejables. Esto es útil cuando se trabaja con documentos extensos y dividirlo en varios bloques evitamos problemas de sobrecarga en memoria y se mejora la eficiencia.

Tabla de Comparación de tiempos

Conclusión

Los resultados obtenidos al evaluar el rendimiento de la implementación del índice invertido indican que el tiempo de procesamiento se mantiene relativamente constante a medida que aumenta la cantidad de datos. Aunque se observa un ligero incremento en el tiempo a medida que se manejan conjuntos de datos más grandes, este aumento es mínimo.

Esto sugiere que la implementación del índice invertido es eficiente y escalable, ya que logra mantener tiempos de procesamiento bajos incluso con volúmenes significativos de datos. Por lo tanto, se puede concluir que el enfoque utilizado en la implementación del índice invertido es adecuado para las necesidades actuales y futuras de la aplicación.

search-text's People

Contributors

wanly13 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.