Búsqueda difusa usando Java

La búsqueda difusa le ayuda a encontrar contenido que sea similar, no exactamente igual, en sus datos. Es muy útil cuando hay pequeños errores tipográficos, faltas de ortografía o variaciones en los datos. Este artículo trata sobre la forma Java de realizar búsquedas difusas para buscar archivos que se encuentran dispersos en carpetas.

A continuación se muestran algunos ejemplos para elaborar el contenido de muestra de búsqueda difusa:

  • Es posible que no esté seguro de si el documento utiliza la ortografía “color” o “color”.
  • Al buscar “John”, en realidad podría escribirse como “Jon” o quizás “Jhon”.
  • Intentando encontrar “EE.UU.” incluso si alguien escribe “EE.UU.”
  • Si cometes un “error”, espera, en realidad es un “error”.

La solución para encontrar dicho contenido es Fuzzy Search.

Biblioteca de búsqueda difusa de Java

Para realizar búsquedas difusas en Java, usaremos la API GroupDocs.Search for Java. La API es muy capaz de mostrar flexibilidad y proporciona un grado personalizable de tolerancia a errores. Esta característica es favorable cuando se trata de variaciones de idiomas como el inglés británico y americano y errores tipográficos.

Con esta biblioteca, se puede realizar una búsqueda difusa en una gran variedad de formatos de archivo. El soporte no se limita solo a documentos de Word (DOC, DOCX), hojas de cálculo (XLS, XLSX), presentaciones (PPT, PPTX), archivos PDF, lenguajes de marcado (HTML, XML), Markdown (MD), libros electrónicos (EPUB, CHM, FB2), correos electrónicos (MSG, EML), notas de OneNote e incluso archivos ZIP.

Si desea conocer todos los tipos de archivos que esta magia puede manejar, simplemente eche un vistazo a la documentación.

Para comenzar, puede obtener la API de la sección de descargas, o simplemente agregar las últimas configuraciones de repositorio y dependencia de Maven directamente en sus aplicaciones Java.

Hagamos una búsqueda difusa en archivos usando Java

Siga estos pasos para realizar una búsqueda difusa en varios archivos de varios formatos dentro de carpetas usando Java:

  1. Comience creando un Índice usando la carpeta donde están sus archivos.
  2. Agregue la ruta de la carpeta principal al índice.
  3. Proporcione la consulta de búsqueda que desea buscar.
  4. Active la magia de Fuzzy Search para que comprenda los pequeños errores.
  5. Establezca el nivel de similitud en el algoritmo difuso.
  6. Ejecute la búsqueda utilizando el método de búsqueda para obtener los resultados de la búsqueda.
  7. Ahora, puede recorrer Resultados de búsqueda para crear o imprimir el resultado como desee.

En el código Java a continuación, el programa busca contenido similar que sea el que usted solicitó en todos los archivos y subcarpetas. Es tolerante a los errores ortográficos, hasta un 25% de error. Si echas un vistazo al código, verás que el nivel de similitud está establecido en 0,75, lo que equivale a una coincidencia del 75 %. Si desea ajustar la búsqueda, simplemente cambie el nivel de similitud en el código.

// Búsqueda difusa de varios archivos en varias carpetas utilizando Java

// Crear una carpeta de índice y agregarle la carpeta del documento
Index index = new Index("path/indexing-folder-path");
index.add("path/parent-folder");

SearchOptions options = new SearchOptions();
options.getFuzzySearch().setEnabled(true); // Enabling the fuzzy search
options.getFuzzySearch().setFuzzyAlgorithm(new SimilarityLevel(0.75));

String query = "nulla"; // search approximate matches of the provided query  
SearchResult result = index.search(query, options);

Después de ejecutar el código, obtendrá una lista de resultados de búsqueda difusos obtenidos. Si quieres ver cómo imprimir los resultados de la búsqueda, sigue leyendo este artículo.

Query: nulla
 Documents: 2
 Occurrences: 135

     Document: Lorem ipsum.docx
     Occurrences: 132
         Field: content
         Occurrences: 132
             nulla               98
             nullam              34

     Document: EnglishText.txt
     Occurrences: 3
         Field: content
         Occurrences: 3
             dull                1
             full                1
             fully               1

Imprimir resultados de búsqueda

El siguiente código Java proporciona dos formas de presentar los resultados de su búsqueda.

  • Resalte todas las coincidencias aproximadas.
  • Imprima los resultados en un formato legible y analizable.
// Resalte e imprima los resultados de búsqueda de todos los documentos utilizando Java
for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
  
    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "path/Highlight" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.highlight(document, highlighter);
 
    System.out.println("\tDocument: " + document.getDocumentInfo().getFilePath());
    System.out.println("\tOccurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\t\tField: " + field.getFieldName());
        System.out.println("\t\tOccurrences: " + field.getOccurrenceCount());

        // Impresión de términos encontrados
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
    }
}

Obtener una licencia gratuita o una prueba gratuita

Licencia gratuita

Obtenga una licencia temporal de forma gratuita para explorar esta biblioteca sin restricciones.

Prueba gratis

Puedes descargar la prueba gratuita desde la sección de descargas.

API de Java para buscar dentro de archivos y carpetas

Conclusión

En este artículo, exploramos la forma programática de Java para realizar búsquedas difusas. Ayuda a encontrar palabras coincidentes aproximadas que sean similares, incluso si hay pequeños errores. Esta función es útil para solucionar diferencias entre el inglés británico y americano, errores tipográficos, cambios de nombres y sonidos similares en las palabras.

Para obtener más información sobre la API, consulte la documentación.

Si tiene preguntas o desea discutir más, diríjase al foro.


Ver también