Porovnání smluv
HPDFContractCompare porovná sémantický text a geometrii řádků dvou načtených PDF dokumentů, spáruje odstavce a vrátí auditovatelné záznamy insert, delete, replace a move
Tento pomocník použijte na revizi formulací a doložek a THPDFDocComparison na rozdíly stránek, objektů a renderu
Porovnání načtených smluv
uses HPDFDoc, HPDFTypes, HPDFContractCompare;
Options := HPDFDefaultContractCompareOptions;
Options.Granularity := ccgWord;
BeforePDF.LoadFromFile('contract-before.pdf');
AfterPDF.LoadFromFile('contract-after.pdf');
if HPDFCompareContracts(BeforePDF, AfterPDF, Options, Report, Token) then
begin
HTML := HPDFContractReviewHTML(Report, 'Services agreement review',
8388608, Token);
HPDFSaveContractAnnotatedPDF('contract-before.pdf',
'contract-before-review.pdf', Report, ccsBefore, Token);
HPDFSaveContractAnnotatedPDF('contract-after.pdf',
'contract-after-review.pdf', Report, ccsAfter, Token);
end;
Vrácené HTML uložte v UTF-8 a když porovnávací funkce vrátí false, prohlédněte si Report.Status a Report.Note
Párování odstavců a změny
- Sémantické řádky se seskupují podle hranic stránek, sloupců, seznamů či nadpisů a konfigurovatelných mezer baseline, přičemž bílé znaky mezi řádky se normalizují
- Nejprve se spárují identické odstavce a opakované shodné doložky v těle si zachovají pořadí výskytu a multiplicitu
- Změněné odstavce se párují podle konfigurovatelného multiset skóre podobnosti slov, nezávisle na zvolené granularitě rozdílů
- Nejdelší rostoucí sekvence spárovaných odstavců rozpozná přeuspořádání, aniž by běžné posuny indexů od insertů a deletů hlásila jako move
- Změněné spárované odstavce použijí ohraničené zarovnání tokenů a vrátí záznamy insert, delete či replace s oběma kompletními kontexty odstavců
- Režim slov odděluje interpunkci od slov a režim vět použije koncovou tečku, vykřičník či otazník následovaný bílým znakem nebo koncem odstavce
- Hranice vět jsou lexikální a mohou rozdělit zkratky či číslovaná označení doložek, proto je pro přesnou revizi právních formulací výchozím režimem režim slov
JoinPageContinuationskonzervativně spojí nedokončený odstavec poblíž spodku jedné stránky s prostým odstavcem poblíž vršku stránky následující a volající mohou tuto layout heuristiku vypnout
Odkazy na stránky a geometrii
PageIndex a ParagraphIndex jsou číslované od nuly, zatímco CharacterStart je pozice v UTF-16 číslovaná od jedničky uvnitř odstavce s normalizovanými bílými znaky
Chybějící strana insertu či deletu celého odstavce má index stránky a odstavce -1 a insert či delet tokenu uvnitř spárovaného odstavce si na opačné straně ponechá pozici nulové délky
Každý obdélník nese vlastní index stránky a pokrývá protínající se sémantický řádek v PDF user space a odstavec přecházející přes stránky může mít obdélníky na více stránkách
Pozice popisují pokrytí řádků, nikoli přesné čtyřúhelníky znaků, takže anotované PDF může zvýraznit týž řádek pro několik nezávislých změn slov
Vyloučení opakujících se prvků stránek a boilerplate
Výchozí nastavení vyloučí shodné sémantické řádky, které se objeví v horních či dolních 54 bodech na nejméně dvou odlišných stránkách každého vstupu, a normalizuje číslice na okrajích, aby se opakovaná čísla stránek mohla párovat
Dokumenty před a po se filtrují nezávisle a opakování v těle zůstávají pro porovnání způsobilá bez ohledu na to, kolikrát se objeví
Options.IgnoreRepeatedHeadersFooters := False;
Options.NormalizeMarginDigits := False;
Options.HeaderMarginPoints := 40;
Options.FooterMarginPoints := 35;
SetLength(Options.ExcludedLineTexts, 1);
Options.ExcludedLineTexts[0] :=
'The parties shall maintain an accurate register of approved subcontractors.';
ExcludedLineTexts odstraní kompletní sémantický řádek podle literální shody po normalizaci bílých znaků, respektuje IgnoreCase a nikdy neinterpretuje regulární výrazy ani vzory podřetězců
Okraje a vyloučení volte záměrně, protože data či jiný smluvní text uvnitř vyloučeného opakovaného okrajového řádku z revize formulací zmizí
Meze a zrušení
| Volba | Výchozí | Rozsah |
|---|---|---|
MaxPages | 500 | Každý dokument |
MaxParagraphs | 4000 | Každý dokument po vyloučeních |
MaxSemanticLines | 50000 | Sémantické řádky dohromady před snapshoty a vyloučeními |
MaxCharacters | 2000000 | Extrahovaný text řádků dohromady před vyloučeními |
MaxTokens | 200000 | Tokeny slov dohromady a v režimu vět i tokeny vět |
MaxDifferences | 10000 | Vrácené záznamy, včetně move |
MaxAlignmentCells | 2000000 | Kumulativní token matice změněných odstavců |
MaxWorkUnits | 50000000 | Účtování extrakce a práce zarovnávání |
Dosažení limitu vrátí ccsBudgetExceeded a zrušení vrátí ccsCancelled, přičemž částečné nálezy zůstanou zachované pro diagnostiku a v HTML se označí jako nekompletní
Zrušení se kontroluje mezi extrakcemi stránek a v celých smyčkách zarovnávání vlastněných knihovnou, zatímco podkladový sémantický extraktor jedné stránky zůstává synchronní
ccsInvalidInput hlásí chybějící dokumenty, neplatné enum ordinály či neplatné volby a ccsExtractionFailed stránky bez extrahovatelného textu nebo nezdařenou sémantickou extrakci
Stránky bez extrahovatelného textu je před porovnáním potřeba projít OCR nebo explicitně odstranit jako prázdné a ccsComplete osvědčuje dokončení jen tohoto textového porovnání
Revizní artefakty
HPDFContractReviewHTML vrací samostatný dokument s escapovaným titulkem, zprávami, textem, kompletními kontexty odstavců, druhy změn i oběma zdrojovými pozicemi, s výchozím limitem výstupu 8388608 znaků UTF-16
HTML exporter vyhodí EHPDFContractCompareBudget, když výstup překročí nakonfigurovaný limit, a svůj token zrušení promítne jako EHPDFOperationCancelled
HPDFSaveContractAnnotatedPDF vyžaduje dokončený report, načte samostatný zdrojový dokument a před přidáním zvýraznění s číslovanými revizními komentáři zkontroluje každý sémantický snapshot stránky včetně jeho přesné geometrie řádků
Zadejte odlišné cesty zdroje a výstupu, zvolte ccsBefore či ccsAfter a exportujte obě verze, když chcete delety a inserty celých odstavců revizovat společně
Na Windows se ověří identity zdrojového a výstupního souboru, aby se odmítly hardlinkové či jiné aliasy zdrojového souboru
PDF exporter vypne AutoLaunch, vstupní dokumenty i zdrojový soubor ponechá beze změny a zrušení kontroluje před načtením, mezi stránkami a změnami i před uložením
Tento pomocník porovnává extrahované formulace a odkazy na layout, aniž by odvozoval právní význam, rozpoznával naskenovaný text nebo osvědčoval právní účinek revize
Související API
HPDFCompareContracts · THPDFContractCompareOptions · THPDFContractCompareReport · HPDFContractReviewHTML · HPDFSaveContractAnnotatedPDF