- Erstellen einer Klassifizierungsdatenbank
- Klassifizieren von Dokumenten
Implementierung des Szenarios
Die in diesem Thema bereitgestellten Codebeispiele sind spezifisch für Windows.
Schritt 1. ABBYY FineReader Engine laden
Schritt 1. ABBYY FineReader Engine laden
Um mit ABBYY FineReader Engine zu beginnen, müssen Sie das Objekt Engine erstellen. Das Engine-Objekt ist das oberste Objekt in der Hierarchie der ABBYY FineReader Engine-Objekte und stellt verschiedene globale Einstellungen, einige Verarbeitungsmethoden sowie Methoden zum Erstellen anderer Objekte bereit.Zum Erstellen des Engine-Objekts können Sie die Funktion InitializeEngine verwenden. Siehe auch andere Möglichkeiten zum Laden des Engine-Objekts (Win).
C#
Schritt 2. ClassificationEngine erstellen
Schritt 2. ClassificationEngine erstellen
Erstellen Sie ein ClassificationEngine-Objekt, das als Factory für andere Objekte der Classification API dient. Verwenden Sie dafür die Methode CreateClassificationEngine des Engine-Objekts.
C#
Schritt 3. Die Klassifizierungsobjekte vorbereiten
Schritt 3. Die Klassifizierungsobjekte vorbereiten
Die Trainings- und Klassifizierungsmethoden arbeiten mit einem speziellen Objekttyp, der aus einem Dokument oder einer Seite erstellt wird: ClassificationObject, das alle für die Klassifizierung relevanten Informationen enthält.Gehen Sie wie folgt vor, um ein Dokument für die Verwendung in einem Klassifizierungsszenario vorzubereiten:
- Laden Sie die zu verarbeitenden Bilder. Dafür gibt es mehrere Möglichkeiten: Sie können beispielsweise das Objekt FRDocument mithilfe der Methode CreateFRDocument des Engine-Objekts erstellen und dann mit der Methode AddImageFile Bilder aus einer Datei zum erstellten FRDocument-Objekt hinzufügen.
- Wenn Sie einen Klassifikator trainieren oder verwenden möchten, der Textmerkmale berücksichtigt (CT_Combined, CT_Text), erkennen Sie das Dokument zunächst mit einer geeigneten Methode. Wir verwenden die Methoden Analyze und Recognize des Objekts FRDocument. Eine Dokumentensynthese ist für die Klassifizierung nicht erforderlich.
Obwohl die Parallelverarbeitung für die Klassifizierung selbst nicht unterstützt wird, benötigen Sie sie möglicherweise für die vorbereitende Erkennung von Dokumenten unter Windows und Linux. Wenn Sie eine große Anzahl von Dokumenten klassifizieren möchten, empfehlen wir die Verwendung von Batch Processor oder anderen Methoden zur Parallelverarbeitung, die unter Parallel Processing with ABBYY FineReader Engine beschrieben sind.
- Verwenden Sie die Methode CreateObjectFromDocument des Objekts ClassificationEngine, um ein ClassificationObject zu erstellen, das die Informationen der ersten Seite des Dokuments enthält. Wenn Sie eine andere Seite des Dokuments verwenden möchten, rufen Sie die Methode CreateObjectFromPage auf.
- Die Eigenschaft Description des ClassificationObject ist standardmäßig leer. Geben Sie diese Eigenschaft an, wenn Sie eine aussagekräftige Beschreibung benötigen.
Es kann gelegentlich vorkommen, dass das erkannte Dokument oder die erkannte Seite dennoch keinen erkannten Text enthält (zum Beispiel, wenn versehentlich eine leere Seite verwendet wurde). In diesem Fall kann das ClassificationObject nicht für Klassifikatoren verwendet werden, die Textmerkmale erfordern. Sie können die Eigenschaft SuitableClassifiers zur zusätzlichen Überprüfung verwenden.
C#
Schritt 4. Erstellen eines Trainingsdatensatzes
Schritt 4. Erstellen eines Trainingsdatensatzes
Um einen Klassifikator zu trainieren, der zwischen mehreren Dokumenttypen unterscheiden kann, benötigen Sie einen kategorisierten Datensatz, der Beispiele für jeden Typ enthält. Verwenden Sie das Objekt TrainingData, um diesen Datensatz aufzubauen und zu verwalten:
- Erstellen Sie mithilfe der Methode CreateTrainingData des ClassificationEngine-Objekts ein leeres Objekt.
- Greifen Sie über die Eigenschaft Categories auf die Kategoriensammlung zu.
- Verwenden Sie die Methode AddNew des Objekts Categories mehrmals, um für jeden Dokumenttyp, den Sie klassifizieren möchten, eine Kategorie hinzuzufügen. Die Methode erwartet als Eingabeparameter einen string mit der Kategorienbezeichnung. Diese Bezeichnung wird von den Klassifizierungsmethoden zurückgegeben und muss daher innerhalb der Kategoriensammlung eindeutig sein.
- Öffnen Sie für jedes neu hinzugefügte Objekt Category über die Eigenschaft Objects die Sammlung der Klassifizierungsobjekte. Fügen Sie mithilfe der Methode IClassificationObjects::Add die Klassifizierungsobjekte hinzu, die zu dieser Kategorie gehören.
Keine Kategorie darf leer bleiben. Aus offensichtlichen Gründen sind für das Training mindestens zwei Kategorien erforderlich. - Nachdem Sie den Trainingsdatensatz eingerichtet haben, können Sie ihn zur späteren Verwendung in einer Datei auf der Festplatte speichern, etwa wenn sich die Genauigkeit des trainierten Modells als unzureichend erweist und Sie zur Verbesserung der Qualität Daten hinzufügen oder korrigieren möchten. Das Objekt TrainingData stellt dazu die Methode SaveToFile bereit.
C#
Schritt 5. Das Klassifizierungsmodell trainieren
Schritt 5. Das Klassifizierungsmodell trainieren
Die Funktionalität für das Modelltraining wird vom Trainer-Objekt bereitgestellt. Verwenden Sie die CreateTrainer-Methode des ClassificationEngine-Objekts, um es zu erstellen.Es enthält alle Einstellungen für den Klassifikatortyp und das Trainingsverfahren in zwei Unterobjekten: TrainingParams und ValidationParams. Legen Sie fest, welche Einstellungen Sie benötigen, und passen Sie die entsprechenden Eigenschaften an:Die Eigenschaft ITrainingResult::Model ermöglicht den Zugriff auf das trainierte Klassifizierungsmodell. Sie können es mithilfe der Methode SaveToFile in einer Datei speichern oder es direkt zur Klassifizierung von Dokumenten verwenden (weiter zu Schritt 6).
- Der Typ des Klassifikators (ITrainingParams::ClassifierType). Diese Einstellung legt fest, welche Merkmale des Dokuments bei der Kategorisierung berücksichtigt werden: Bildeigenschaften, der Inhalt des erkannten Textes oder beides. Wenn Sie einen Typ auswählen möchten, der den Textinhalt nutzt, müssen Sie sicherstellen, dass alle Klassifizierungsobjekte im Trainingsdatensatz aus zuvor erkannten Dokumenten erstellt wurden.
- Der Trainingsmodus (ITrainingParams::TrainingMode). Diese Einstellung legt fest, ob der Trainingsprozess auf hohe Präzision (wie viele der ausgewählten Elemente korrekt sind), hohe Trefferquote (wie viele der korrekten Elemente ausgewählt werden) oder ein ausgewogenes Verhältnis zwischen beiden ausgerichtet sein soll.
- Ob eine k-fache Kreuzvalidierung verwendet werden soll (IValidationParams::ShouldPerformValidation). Wir empfehlen, die Kreuzvalidierung zu verwenden, wenn Ihre Trainingsstichprobe nicht groß ist, da Sie damit mehrere Modelle auf den verschiedenen Partitionen derselben Stichprobe trainieren und das beste auswählen können. Wenn Ihnen eine große Menge kategorisierter Daten zur Verfügung steht, ist es möglicherweise besser, die Validierung zu deaktivieren, das Modell mit der gesamten Trainingsstichprobe zu trainieren und anschließend die Klassifizierungsmethoden (Schritt 6) zu verwenden, um das Modell an einer anderen Stichprobe zu testen und die Leistungskennzahlen selbst zu berechnen.
- Die Parameter der k-fachen Kreuzvalidierung: die Anzahl der Teile, in die die Trainingsmenge aufgeteilt wird (IValidationParams::FoldsCount), und die Anzahl der Iterationen (IValidationParams::RepeatCount). Beachten Sie, dass die erforderliche Anzahl von Objekten in der Trainingsmenge bei jeder Iteration für den Textklassifikator mindestens 4 und für den kombinierten Klassifikator mindestens 8 betragen muss. Stellen Sie sicher, dass Ihre Trainingsmenge genügend Objekte enthält.
Modelltraining und -klassifizierung werden unter Linux und Windows unabhängig vom Wert von IMultiProcessingParams::MultiProcessingMode im sequenziellen Modus durchgeführt.
C#
Schritt 6. Dokumente klassifizieren
Schritt 6. Dokumente klassifizieren
Um das trainierte Modell für die Klassifizierung zu verwenden:
- Wenn das Modell derzeit nicht geladen ist, rufen Sie die Methode CreateModelFromFile des Objekts ClassificationEngine auf, um es aus einer Datei auf dem Datenträger zu laden.
- Bereiten Sie die Klassifizierungsobjekte aus den Dokumenten vor, die Sie klassifizieren möchten, wie in Schritt 3 beschrieben.
- Rufen Sie für jedes Klassifizierungsobjekt die Methode Classify des Objekts Model auf und übergeben Sie das ClassificationObject als Eingabeparameter. Die Methode gibt eine Sammlung von ClassificationResult-Objekten zurück, die jeweils die Kategorienbezeichnung und die Wahrscheinlichkeit für diese Kategorie enthalten. Die Ergebnisse sind nach Wahrscheinlichkeit vom besten zum schlechtesten sortiert. Rufen Sie das Ergebnis ab und prüfen Sie, ob die Wahrscheinlichkeit für Sie akzeptabel ist.
Wenn der Klassifikator keine Kategorie zuweisen konnte, wird anstelle der Ergebnissammlung null zurückgegeben.
Das Modelltraining und die Klassifizierung werden unter Linux und Windows unabhängig vom Wert von IMultiProcessingParams::MultiProcessingMode im sequenziellen Modus durchgeführt.
C#
Schritt 7. ABBYY FineReader Engine entladen
Schritt 7. ABBYY FineReader Engine entladen
Nachdem Sie Ihre Arbeit mit ABBYY FineReader Engine abgeschlossen haben, müssen Sie das Objekt Engine entladen. Verwenden Sie dazu die exportierte Funktion DeinitializeEngine.
C#
Erforderliche Ressourcen
Zusätzliche Optimierung
- Laden der Engine - nur für Windows
- Verschiedene Möglichkeiten zum Laden des Engine-Objekts
Beschreibt die verschiedenen Möglichkeiten zum Laden des Engine-Objekts im Detail. - Verwenden von ABBYY FineReader Engine in Multithread-Serveranwendungen
Behandelt die Besonderheiten bei der Verwendung von FineReader Engine in Serveranwendungen.
- Verschiedene Möglichkeiten zum Laden des Engine-Objekts
- Erkennung - für Linux und Windows
- Parallelverarbeitung mit ABBYY FineReader Engine
Um die erkannten Dokumente oder Seiten schnell für einen Klassifikator mit Textmerkmalen vorzubereiten, verwenden Sie für die Erkennung die Parallelverarbeitung und deaktivieren Sie anschließend Multiprocessing für die Klassifizierung.
- Parallelverarbeitung mit ABBYY FineReader Engine
