Pro editie
Classifier
In het kort
Sectie met titel “In het kort”NextPDF\Pro\Classifier kent een documenttype toe (factuur, contract, rapport,
enzovoort) en een gedetecteerde taal met behulp van deterministische heuristieken over
de documenttekst en -structuur. Het is regelgebaseerd, geen machine-learningmodel.
Beschikbaarheid en licentie
Sectie met titel “Beschikbaarheid en licentie”Deze functie zit in NextPDF Pro (nextpdf/pro) en wordt geactiveerd met een licentie-envelop van de Pro-tier. Een deployment zonder die entitlement laadt de klassen van de functie niet. Vergelijk edities en vraag een licentie aan.
Geen runtime-mogelijkheidsvlag bewaakt deze module. De Classifier-klassen zijn beschikbaar zodra nextpdf/pro is geïnstalleerd.
Installatie
Sectie met titel “Installatie”composer require nextpdf/pro:^3Conceptueel overzicht
Sectie met titel “Conceptueel overzicht”DocumentClassifier orkestreert drie samenwerkende componenten:
StructureAnalyzerinspecteert de PDF op paginaaantal, aantal afbeeldingen en lettertypen en formulier-/handtekeningvelden, en produceert eenStructureAnalysis.HeuristicClassifier(de standaardClassifierInterface) scoort de tekst tegen woordenboeken met trefwoorden per type en past structurele heuristieken toe (korte documenten worden bijvoorbeeld weggestuurd van “report”), wat eenDocumentTypeen een betrouwbaarheid oplevert.LanguageDetectoridentificeert de taal aan de hand van frequentieprofielen van tekentrigrammen voor tien talen, en valt onder een betrouwbaarheidsdrempel terug op Engels.
classifyFromText() accepteert reeds geëxtraheerde tekst (met optioneel ruwe PDF-
bytes voor structuur); classifyFromFile() accepteert ruwe PDF-bytes en extraheert
tekst door de §9.4-tekstweergaveoperatoren rechtstreeks te parsen.
Waarom het zo werkt
Sectie met titel “Waarom het zo werkt”De dragende beslissing is om te classificeren met deterministische heuristieken, niet met een machine-learningmodel. Een regelgebaseerde pipeline is een pure functie van zijn invoer: identieke bytes leveren altijd een identiek type, betrouwbaarheid en taal op, zonder modeldrift en zonder netwerkoproep. Dat determinisme laat het resultaat een expliciete betrouwbaarheid tonen, een isConfident()-poort en een scores-map per type, zodat de module laat zien hoe hij beslist heeft in plaats van de keuze achter een model te verbergen. Callers routeren documenten met lage betrouwbaarheid daarom per contract naar handmatige beoordeling, en tekst die te kort is om te scoren valt onder dezelfde vaste regel terug op en. De afweging is bewust: de nauwkeurigheid wordt begrensd door vaste trefwoord- en trigramprofielen, in ruil voor reproduceerbaarheid, inspecteerbaarheid en een classifier die volledig in-process draait.
Ontwerpachtergrond: Een API die weigert te gokken.
Gedragscontract
Sectie met titel “Gedragscontract”- Invoer. Geëxtraheerde tekst (
classifyFromText) of ruwe PDF-bytes (classifyFromFile). Lege invoer is geldig en levert een resultaat met lage betrouwbaarheid op, doorgaansDocumentType::Other. - Uitvoer. Een
ClassificationResultmet hetDocumentType, een betrouwbaarheid in[0.0, 1.0], gedetecteerde structurele kenmerken, een ISO 639-1-taalcode en metadata.isConfident(0.7)is de gedocumenteerde drempelhelper. - Determinisme. Classificatie en taaldetectie zijn pure functies van de invoer — dezelfde invoer, hetzelfde resultaat, geen willekeur, geen netwerk.
- Bereik. Twaalf documenttypen en tien taalprofielen, beide vast in
deze release. Aangepaste strategieën kunnen via
ClassifierInterfaceworden aangeleverd.
Publiek API-oppervlak
Sectie met titel “Publiek API-oppervlak”| Type | Soort | Belangrijkste leden |
|---|---|---|
NextPDF\Pro\Classifier\DocumentClassifier | final class | static create(): self, classifyFromText(string $text, string $pdfData = ''): ClassificationResult, classifyFromFile(string $pdfData): ClassificationResult |
NextPDF\Pro\Classifier\ClassifierInterface | interface | classify(string $text, StructureAnalysis $structure): ClassificationResult, supports(string $contentType): bool |
NextPDF\Pro\Classifier\HeuristicClassifier | final class | implements ClassifierInterface |
NextPDF\Pro\Classifier\StructureAnalyzer | final class | analyze(string $pdfData): StructureAnalysis |
NextPDF\Pro\Classifier\LanguageDetector | final class | detect(string $text): string |
NextPDF\Pro\Classifier\ClassificationResult | final readonly class | DocumentType $type, float $confidence, array $features, string $language, isConfident(float $threshold = 0.7): bool |
NextPDF\Pro\Classifier\DocumentType | enum | 12 cases (Invoice, Contract, Form, Report, Letter, Receipt, Legal, Medical, Financial, Technical, Academic, Other); label(): string |
Codevoorbeeld — Snelstart
Sectie met titel “Codevoorbeeld — Snelstart”<?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,);Codevoorbeeld — Productie
Sectie met titel “Codevoorbeeld — Productie”<?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', };}Randgevallen en valkuilen
Sectie met titel “Randgevallen en valkuilen”- Betrouwbaarheid is heuristisch. Behandel resultaten onder de drempel als “onzeker” en stuur ze naar handmatige beoordeling, zoals het productievoorbeeld doet.
- Taaldetectie heeft voldoende tekst nodig; zeer korte strings vallen terug op Engels — dit is opzettelijk.
classifyFromFile()gebruikt begrensde tekstextractie op byteniveau; sterk gecomprimeerde of alleen-afbeelding-PDF’s verkleinen de tekst die beschikbaar is om te scoren.- De sets met documenttypen en talen liggen vast in deze release; breid
classificatie uit door
ClassifierInterfacete implementeren, niet door ingebouwde woordenboeken te muteren.
Datalocatie en PII-mitigaties
Sectie met titel “Datalocatie en PII-mitigaties”Classificatie draait in-process zonder netwerkoproepen en zonder opslag van de
invoer. Het resultaat bevat een DocumentType en taalcode, niet de bron-
tekst. Als callers metadata bewaren, beoordeel het dan op incidentele PII vóór
opslag.
Veilige telemetrie en logopschoning
Sectie met titel “Veilige telemetrie en logopschoning”De module zendt geen telemetrie uit en logt geen invoer. Callers die logging
toevoegen, mogen alleen het resulterende DocumentType en de taalcode vastleggen, nooit de
geclassificeerde tekst.
Prestaties
Sectie met titel “Prestaties”Trefwoordscoring en trigramtelling zijn lineair in de tekstlengte. Structuur-
analyse is lineair in de PDF-bytelengte met een begrensde decompressielimiet. Zie
performance_budget.
Beveiligingsnotities
Sectie met titel “Beveiligingsnotities”classifyFromFile() parseert niet-vertrouwde PDF-bytes met begrensd scannen en een
decompressiegroottelimiet om bestand te zijn tegen decompressiebom-invoer. Er worden geen ingebedde
scripts uitgevoerd.
Conformiteit
Sectie met titel “Conformiteit”| Claim | Spec-clausule | Status |
|---|---|---|
Tekst hersteld via Tj voor bestandsclassificatie | ISO 32000-2:2020 §9.4 | Geverifieerd (unit suite) |
Tekst hersteld via TJ voor bestandsclassificatie | ISO 32000-2:2020 §9.4 | Geverifieerd (unit suite) |
| Machine-learning-/modelgebaseerde classificatie | — | Niet ondersteund (alleen heuristisch) |
Core-fallback / alternatief
Sectie met titel “Core-fallback / alternatief”Er bestaat geen Core-equivalent voor documentclassificatie of taaldetectie.
Enterprise-grensnotitie
Sectie met titel “Enterprise-grensnotitie”Deze classifier is regelgebaseerd en deterministisch. Deze voert geen embedding, vectorgelijkenis, modelinferentie of semantisch begrip uit. Die mogelijkheden maken geen deel uit van deze module en worden er niet door geïmpliceerd.
Publicatiegrens
Sectie met titel “Publicatiegrens”Deze pagina documenteert alleen extern waarneembaar gedrag en het ondersteunde publieke API-oppervlak. Interne namespace-paden, helperklassen, mechanismetabellen, runbook-bestandsnamen en ticketprefixen vallen buiten het bereik.
Zie ook
Sectie met titel “Zie ook”- Classifier — Diepgaande referentie — het volledige publieke API-oppervlak, de pipeline-volgorde en de faalmodi.
- Extraction
- Filter
- Diff