Zum Inhalt springen
getnextpdf.com

Pro Edition

Klassifizierer

NextPDF\Pro\Classifier weist einem Dokument einen Dokumenttyp (Rechnung, Vertrag, Bericht usw.) und eine erkannte Sprache zu, und zwar mithilfe deterministischer Heuristiken über Dokumenttext und -struktur. Es ist regelbasiert, kein Machine-Learning-Modell.

Diese Funktion ist in NextPDF Pro (nextpdf/pro) enthalten und wird mit einem Lizenz-Envelope der Pro-Stufe aktiviert. Eine Bereitstellung ohne diese Berechtigung lädt die Klassen der Funktion nicht. Editionen vergleichen und Lizenz erwerben.

Kein Laufzeit-Fähigkeits-Flag schaltet dieses Modul. Die Classifier-Klassen sind verfügbar, sobald nextpdf/pro installiert ist.

Terminal-Fenster
composer require nextpdf/pro:^3

DocumentClassifier orchestriert drei Kollaborateure:

  • StructureAnalyzer untersucht das PDF auf Seitenzahl, Bild- und Schriftarten-Anzahl sowie Formular-/Signaturfelder und erzeugt eine StructureAnalysis.
  • HeuristicClassifier (das standardmäßige ClassifierInterface) bewertet den Text anhand typbezogener Schlüsselwort-Wörterbücher und wendet strukturelle Heuristiken an (zum Beispiel werden kurze Dokumente vom Typ „report“ weggewichtet) und liefert einen DocumentType sowie eine Konfidenz.
  • LanguageDetector ermittelt die Sprache anhand von Zeichen-Trigramm-Häufigkeitsprofilen für zehn Sprachen und fällt unterhalb einer Konfidenzschwelle auf Englisch zurück.

classifyFromText() akzeptiert bereits extrahierten Text (mit optionalen rohen PDF-Bytes für die Struktur); classifyFromFile() akzeptiert rohe PDF-Bytes und extrahiert Text, indem es die textanzeigenden Operatoren aus §9.4 direkt parst.

Die tragende Entscheidung besteht darin, mit deterministischen Heuristiken zu klassifizieren, nicht mit einem Machine-Learning-Modell. Eine regelbasierte Pipeline ist eine reine Funktion ihrer Eingabe: Identische Bytes liefern stets einen identischen Typ, eine identische Konfidenz und Sprache, ohne Modelldrift und ohne Netzwerkaufruf. Dieser Determinismus erlaubt es dem Ergebnis, eine explizite Konfidenz, ein isConfident()-Gate und eine typbezogene scores-Map offenzulegen, sodass das Modul zeigt, wie es entschieden hat, statt die Wahl hinter einem Modell zu verbergen. Aufrufer leiten Dokumente mit niedriger Konfidenz daher vertraglich zur manuellen Prüfung weiter, und Text, der zu kurz zum Bewerten ist, fällt nach derselben festen Regel auf en zurück. Der Kompromiss ist bewusst gewählt: Die Genauigkeit ist durch feste Schlüsselwort- und Trigramm-Profile begrenzt, im Austausch gegen Reproduzierbarkeit, Prüfbarkeit und einen Classifier, der vollständig prozessintern läuft.

Design-Hintergrund: Eine API, die sich weigert zu raten.

  • Eingabe. Extrahierter Text (classifyFromText) oder rohe PDF-Bytes (classifyFromFile). Eine leere Eingabe ist gültig und liefert ein Ergebnis mit niedriger Konfidenz, typischerweise DocumentType::Other.
  • Ausgabe. Ein ClassificationResult mit dem DocumentType, einer Konfidenz in [0.0, 1.0], erkannten strukturellen Merkmalen, einem ISO 639-1-Sprachcode und Metadaten. isConfident(0.7) ist der dokumentierte Schwellenwert-Helfer.
  • Determinismus. Klassifizierung und Spracherkennung sind reine Funktionen der Eingabe — gleiche Eingabe, gleiches Ergebnis, keine Zufälligkeit, kein Netzwerk.
  • Geltungsbereich. Zwölf Dokumenttypen und zehn Sprachprofile, beide in diesem Release fest. Eigene Strategien lassen sich über ClassifierInterface bereitstellen.
TypeKindKey members
NextPDF\Pro\Classifier\DocumentClassifierfinal classstatic create(): self, classifyFromText(string $text, string $pdfData = ''): ClassificationResult, classifyFromFile(string $pdfData): ClassificationResult
NextPDF\Pro\Classifier\ClassifierInterfaceinterfaceclassify(string $text, StructureAnalysis $structure): ClassificationResult, supports(string $contentType): bool
NextPDF\Pro\Classifier\HeuristicClassifierfinal classimplements ClassifierInterface
NextPDF\Pro\Classifier\StructureAnalyzerfinal classanalyze(string $pdfData): StructureAnalysis
NextPDF\Pro\Classifier\LanguageDetectorfinal classdetect(string $text): string
NextPDF\Pro\Classifier\ClassificationResultfinal readonly classDocumentType $type, float $confidence, array $features, string $language, isConfident(float $threshold = 0.7): bool
NextPDF\Pro\Classifier\DocumentTypeenum12 cases (Invoice, Contract, Form, Report, Letter, Receipt, Legal, Medical, Financial, Technical, Academic, Other); label(): string
<?php
declare(strict_types=1);
use NextPDF\Pro\Classifier\DocumentClassifier;
$result = DocumentClassifier::create()
->classifyFromText('Invoice #4471 — Amount due: $1,200.00');
printf(
"%s (%.0f%% confidence), lang=%s\n",
$result->type->label(),
$result->confidence * 100,
$result->language,
);
<?php
declare(strict_types=1);
use NextPDF\Pro\Classifier\DocumentClassifier;
use NextPDF\Pro\Classifier\DocumentType;
function routeDocument(string $pdfBytes): string
{
$result = DocumentClassifier::create()->classifyFromFile($pdfBytes);
if (! $result->isConfident(0.7)) {
return 'manual-review';
}
return match ($result->type) {
DocumentType::Invoice, DocumentType::Receipt => 'accounts-payable',
DocumentType::Contract, DocumentType::Legal => 'legal-intake',
default => 'general-inbox',
};
}
  • Die Konfidenz ist heuristisch. Behandeln Sie Ergebnisse unterhalb der Schwelle als „unsicher“ und leiten Sie sie zur manuellen Prüfung weiter, wie es das Produktionsbeispiel tut.
  • Die Spracherkennung benötigt genügend Text; sehr kurze Strings fallen bauartbedingt auf Englisch zurück.
  • classifyFromFile() verwendet eine begrenzte Textextraktion auf Byteebene; stark komprimierte oder reine Bild-PDFs verringern den zur Bewertung verfügbaren Text.
  • Die Mengen an Dokumenttypen und Sprachen sind in diesem Release fest; erweitern Sie die Klassifizierung, indem Sie ClassifierInterface implementieren, nicht indem Sie eingebaute Wörterbücher verändern.

Die Klassifizierung läuft prozessintern, ohne Netzwerkaufrufe und ohne Speicherung der Eingabe. Das Ergebnis enthält einen DocumentType und einen Sprachcode, nicht den Quelltext. Wenn Aufrufer metadata persistieren, prüfen Sie diese vor der Speicherung auf zufällige PII.

Das Modul gibt keine Telemetrie aus und protokolliert keine Eingabe. Aufrufer, die Logging hinzufügen, sollten nur den resultierenden DocumentType und den Sprachcode aufzeichnen, niemals den klassifizierten Text.

Schlüsselwort-Bewertung und Trigramm-Zählung sind linear in der Textlänge. Die Strukturanalyse ist linear in der PDF-Bytelänge mit einer begrenzten Dekomprimierungsgrenze. Siehe performance_budget.

classifyFromFile() parst nicht vertrauenswürdige PDF-Bytes mit begrenztem Scannen und einer Dekomprimierungs-Größengrenze, um Dekomprimierungsbomben als Eingabe abzuwehren. Es werden keine eingebetteten Skripte ausgeführt.

ClaimSpec clauseStatus
Text recovered via Tj for file classificationISO 32000-2:2020 §9.4Verified (unit suite)
Text recovered via TJ for file classificationISO 32000-2:2020 §9.4Verified (unit suite)
Machine-learning / model-based classificationNot supported (heuristic only)

Für Dokumentklassifizierung oder Spracherkennung gibt es kein Core-Äquivalent.

Dieser Classifier ist regelbasiert und deterministisch. Er führt kein Embedding, keine Vektorähnlichkeit, keine Modellinferenz und kein semantisches Verständnis durch. Diese Fähigkeiten sind nicht Teil dieses Moduls und werden von ihm nicht impliziert.

Diese Seite dokumentiert ausschließlich extern beobachtbares Verhalten und die unterstützte öffentliche API-Oberfläche. Interne Namespace-Pfade, Hilfsklassen, Mechanismus-Tabellen, Runbook-Dateinamen und Ticket-Präfixe liegen außerhalb des Geltungsbereichs.