Přemýšleli jste někdy nad tím, jak plynule prohledávat mnoho souborů nebo se snad orientovat ve složitosti hledání v souborech ve více složkách? Zde najdete odpovědi na všechny vaše dotazy. Tento článek se ponoří do oblasti skenování textu a ukazuje, jak pomocí Javy vyhledávat více textů nebo frází v různých souborech rozmístěných v různých složkách.

Java API pro skenování textu napříč soubory a složkami

Dnes budeme používat GroupDocs.Search for Java API k vyhledávání více textů v souborech různých formátů souborů napříč složkami. Tato knihovna nám umožňuje programově skenovat text v široké škále formátů souborů pro dokumenty Word, tabulky, prezentace, soubory PDF, soubory značek, elektronické knihy, e-mailové zprávy, dokumenty One Note a archivy ZIP. Dokumentace poskytuje podrobný seznam podporovaných formátů souborů.

Soubor JAR si můžete stáhnout z části ke stažení nebo použít nejnovější konfigurace úložiště a závislostí Maven ve vašich aplikacích Java.

Vyhledávání více textů v souborech napříč složkami pomocí Java

Chcete-li pomocí jazyka Java provést textové vyhledávání ve více souborech ve více složkách a vygenerovat zvýrazněné výstupní soubory HTML pro každý nalezený dokument, postupujte podle následujících kroků.

  • Vytvořte objekt Index se zadanou cestou složky indexu.
  • Indexujte nadřazenou složku dokumentů pomocí metody add.
  • Definujte vyhledávací dotaz s více termíny nebo frázemi.
  • Proveďte skenování textu pomocí vyhledávací metody a uložte výsledky.
  • Iterujte výsledky vyhledávání:
    • Ke každému nalezenému dokumentu přistupujte pomocí metody getFoundDocument.
    • Otevřete nebo vytiskněte informace o souboru nalezeného dokumentu.
    • Nastavte OutputAdapter pro požadovaný formát a cestu.
    • Vytvořte Zvýrazňovač pro dokument.
    • Zvýrazněte a vytiskněte výsledky hledání do souboru HTML pomocí metody zvýraznění.
// Hledání textu ve více souborech různých formátů souborů v rámci více složek pomocí Java

// Vytvoření indexu v zadané složce
Index index = new Index("path/for/indexingFolder");

// Indexování dokumentů ze zadané složky
index.add("path/parent-folder/");

String query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.search(query);

for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
    System.out.println("====================================");
    System.out.println("File Name: " + document.getDocumentInfo().getFilePath());

    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.highlight(document, highlighter);
}

Výše uvedený kód společně umožňuje vyhledávat konkrétní texty ve více souborech a generovat zvýrazněné výstupní soubory HTML pro každý nalezený dokument.

Zvýrazněné výsledky hledání textu ve formátu HTML

Tisk výsledků hledání textu

Z výsledku vyhledávacího dotazu můžete dále extrahovat informace o nalezených dokumentech.

// Tisk výsledků hledání ===

for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
 
    // Tisk výsledků hledání ===========
    System.out.println("Occurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\tOccurrences: " + field.getOccurrenceCount());

        // Tisk nalezených termínů
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
        // Tisk nalezených frází
        if (field.getTermSequences() != null) {
            for (int k = 0; k < field.getTermSequences().length; k++) {
                String[] terms = field.getTermSequences()[k];
                String sequence = "";
                for (String term : terms) {
                    sequence += term + " ";
                }
                System.out.println("\t\t" + sequence + " - " + field.getTermSequencesOccurrences()[k]);
            }
        }
    }
}

Následující výstup bude výstupem tisku výše uvedených výsledků vyhledávání získaných ze souborů DOCX, PDF a TXT:

File Name: Lorem ipsum.docx
Occurrences: 101
	Field: filename
	Occurrences: 1
		lorem ipsum  - 1
	Field: content
	Occurrences: 100
		non - 94
		lorem ipsum  - 6
====================================
File Name: Lorem ipsum.pdf
Occurrences: 60
	Field: filename
	Occurrences: 1
		lorem ipsum  - 1
	Field: content
	Occurrences: 59
		non - 53
		lorem ipsum  - 6
====================================
File Name: English.txt
Occurrences: 39
	Field: content
	Occurrences: 39
		water - 39

Kompletní kód

Zde je úplný kód Java, který společně prohledává textové řetězce a fráze ve více souborech a složkách:

// Hledání textu ve více souborech různých formátů souborů v rámci více složek pomocí Java

// Vytvoření indexu v zadané složce
Index index = new Index("path/for/indexingFolder");

// Indexování dokumentů ze zadané složky
index.add("path/parent-folder/");

String query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.search(query);

for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
    System.out.println("====================================");
    System.out.println("File Name: " + document.getDocumentInfo().getFilePath());

    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.highlight(document, highlighter);
  
    // Tisk výsledků hledání ============
    System.out.println("Occurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\tOccurrences: " + field.getOccurrenceCount());

        // Tisk nalezených termínů
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
        // Tisk nalezených frází
        if (field.getTermSequences() != null) {
            for (int k = 0; k < field.getTermSequences().length; k++) {
                String[] terms = field.getTermSequences()[k];
                String sequence = "";
                for (String term : terms) {
                    sequence += term + " ";
                }
                System.out.println("\t\t" + sequence + " - " + field.getTermSequencesOccurrences()[k]);
            }
        }
    }  
}

Získání bezplatné licence nebo bezplatné zkušební verze

Bezplatná licence

Chcete-li prozkoumat tuto knihovnu bez omezení, můžete získat dočasnou licenci zdarma.

Zkušební verze zdarma

Stáhněte si bezplatnou zkušební verzi ze sekce ke stažení.

Java API pro vyhledávání v souborech a složkách

Závěr

V tomto článku jsme právě prozkoumali skenování textu pro vyhledávání více textů ve více souborech ve více složkách pomocí Java. Počínaje vyhledávacím dotazem jsme hledali ve více souborech a složkách a zvýraznili nalezené výsledky v příslušných souborech HTML.

Pro podrobné informace o API se čtenářům doporučuje nahlédnout do dokumentace. Dotazy a další diskuse můžete směřovat na poskytnuté fórum.

Viz také