¿Alguna vez se ha preguntado cómo buscar fácilmente entre muchos archivos o afrontar el desafío de buscar dentro de archivos en diferentes carpetas? Este artículo tiene las respuestas que estás buscando. Sumerjámonos en el mundo de la búsqueda de texto y exploremos cómo buscar varios textos o frases en diferentes archivos en diversas carpetas usando C#.
API de C# para escanear texto en archivos y carpetas
Ahora, utilizaremos la API GroupDocs.Search for .NET para explorar numerosos textos dentro de archivos de diversos formatos en carpetas. Esta biblioteca nos permite escanear texto sistemáticamente en una amplia gama de formatos de archivo, como documentos de Word, hojas de cálculo, presentaciones, archivos PDF, archivos de marcado, libros electrónicos, mensajes de correo electrónico, documentos de One Note y archivos ZIP. Para obtener una lista detallada de los formatos de archivo admitidos, consulte la documentación completa.
Tiene la opción de obtener las DLL o el instalador MSI desde la sección de descargas, o puede instalar la API en su aplicación .NET usando NuGet.
PM> Install-Package GroupDocs.Search
Buscar varios textos en archivos en carpetas usando C#
Siga estos pasos para realizar una búsqueda de texto en varios archivos dentro de varias carpetas usando C# y generar archivos de salida HTML resaltados para cada documento encontrado.
- Cree un objeto Índice con la ruta de la carpeta de índice especificada.
- Indexe la carpeta de documentos principal utilizando el método Agregar.
- Defina una consulta de búsqueda con varios términos o frases.
- Ejecute el escaneo de texto utilizando el método de búsqueda y almacene los resultados.
- Iterar a través de los resultados de la búsqueda:
- Recupere cada documento encontrado utilizando el método GetFoundDocument.
- Recupere o imprima cualquier información de archivo para el documento encontrado.
- Configure un OutputAdapter para el formato y la ruta deseados.
- Cree un Resaltador para el documento.
- Resalte y envíe los resultados de la búsqueda a un archivo HTML utilizando el método Resaltar.
// Búsqueda de texto en varios archivos de varios formatos de archivo dentro de varias carpetas usando C#
// Crear un índice e indexar documentos desde la carpeta especificada
Index index = new Index("path/for/indexingFolder");
index.Add("path/parent-folder/");
// Busque documentos que contengan la palabra 'agua' o 'no' o la frase 'Lorem ipsum'
string query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.Search(query);
// Imprimir el resultado
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
FoundDocument document = result.GetFoundDocument(i);
// Resalte los resultados de la búsqueda
OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
Highlighter highlighter = new DocumentHighlighter(outputAdapter);
index.Highlight(document, highlighter); // Generating HTML formatted text with highlighted occurrences
}
El código anterior le permite buscar textos particulares en varios archivos y crear archivos de salida HTML resaltados para cada documento encontrado.
Impresión de los resultados de la búsqueda de texto
Del resultado de la consulta de búsqueda, puede extraer más información sobre los documentos encontrados.
// Imprimir el resultado
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
FoundDocument document = result.GetFoundDocument(i);
Console.WriteLine("Document: " + document.DocumentInfo.FilePath);
Console.WriteLine("Occurrences: " + document.OccurrenceCount);
for (int j = 0; j < document.FoundFields.Length; j++)
{
FoundDocumentField field = document.FoundFields[j];
Console.WriteLine("\tField: " + field.FieldName);
Console.WriteLine("\tOccurrences: " + document.OccurrenceCount);
// Impresión de términos encontrados
if (field.Terms != null)
{
for (int k = 0; k < field.Terms.Length; k++)
{
Console.WriteLine("\t\t" + field.Terms[k].PadRight(20) + field.TermsOccurrences[k]);
}
}
// Imprimir frases encontradas
if (field.TermSequences != null)
{
for (int k = 0; k < field.TermSequences.Length; k++)
{
string sequence = string.Join(" ", field.TermSequences[k]);
Console.WriteLine("\t\t" + sequence.PadRight(30) + field.TermSequencesOccurrences[k]);
}
}
}
}
El siguiente será el resultado de imprimir los resultados de búsqueda anteriores obtenidos de los archivos DOCX, PDF y TXT:
Documents: 3
Total occurrences: 141
Document: Lorem ipsum.docx
Occurrences: 101
Field: filename
Occurrences: 101
lorem ipsum 1
Field: content
Occurrences: 101
non 94
lorem ipsum 6
Document: Lorem ipsum.pdf
Occurrences: 1
Field: filename
Occurrences: 1
lorem ipsum 1
Document: English.txt
Occurrences: 39
Field: content
Occurrences: 39
water 39
código completo
Aquí está el código C# completo que busca colectivamente cadenas de texto y frases en múltiples archivos y carpetas:
// Búsqueda de texto en varios archivos de varios formatos de archivo dentro de varias carpetas usando C#
// Crear un índice e indexar documentos desde la carpeta especificada
Index index = new Index("path/for/indexingFolder");
index.Add("path/parent-folder/");
// Busque documentos que contengan la palabra 'agua' o 'no' o la frase 'Lorem ipsum'
string query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.Search(query);
// Imprimir el resultado
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
FoundDocument document = result.GetFoundDocument(i);
// Resalte los resultados de la búsqueda
OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
Highlighter highlighter = new DocumentHighlighter(outputAdapter);
index.Highlight(document, highlighter); // Generating HTML formatted text with highlighted occurrences
Console.WriteLine("Document: " + document.DocumentInfo.FilePath);
Console.WriteLine("Occurrences: " + document.OccurrenceCount);
for (int j = 0; j < document.FoundFields.Length; j++)
{
FoundDocumentField field = document.FoundFields[j];
Console.WriteLine("\tField: " + field.FieldName);
Console.WriteLine("\tOccurrences: " + document.OccurrenceCount);
// Impresión de términos encontrados
if (field.Terms != null)
{
for (int k = 0; k < field.Terms.Length; k++)
{
Console.WriteLine("\t\t" + field.Terms[k].PadRight(20) + field.TermsOccurrences[k]);
}
}
// Imprimir frases encontradas
if (field.TermSequences != null)
{
for (int k = 0; k < field.TermSequences.Length; k++)
{
string sequence = string.Join(" ", field.TermSequences[k]);
Console.WriteLine("\t\t" + sequence.PadRight(30) + field.TermSequencesOccurrences[k]);
}
}
}
}
Obtener una licencia gratuita o una prueba gratuita
Licencia gratuita
Obtenga una licencia temporal gratuita para explorar esta biblioteca sin restricciones.
Prueba gratis
Puedes descargar la prueba gratuita desde la sección de descargas.
Conclusión
En este artículo, hemos investigado el escaneo de texto para buscar varios textos en numerosos archivos en varias carpetas usando C#. Comenzando con la consulta de búsqueda, exploramos varios archivos y carpetas, resaltando las palabras o frases buscadas en los respectivos archivos HTML.
Para obtener detalles completos sobre la API, se recomienda a los lectores que consulten la documentación.
Cualquier consulta o discusión adicional puede dirigirse al foro disponible.