Confronto di contratti
HPDFContractCompare confronta il testo semantico e la geometria delle righe di due documenti PDF caricati, allinea i paragrafi e restituisce record verificabili di inserimenti, eliminazioni, sostituzioni e spostamenti
Usa questo helper per la revisione di formulazioni e clausole, e usa THPDFDocComparison per le differenze di pagina, oggetti e rendering
Confronto di contratti caricati
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;
Salvare l'HTML restituito usando UTF-8, e ispezionare Report.Status e Report.Note quando la funzione di confronto restituisce false
Allineamento dei paragrafi e modifiche
- Le righe semantiche vengono raggruppate usando pagina, colonna, confini di elenco o di heading e gap di baseline configurabili, con whitespace normalizzato tra le righe
- I paragrafi identici esatti vengono abbinati per primi, e le clausole identiche ripetute nel corpo conservano ordine di occorrenza e molteplicità
- I paragrafi modificati vengono abbinati con un punteggio configurabile di similarità multiset delle parole, indipendente dalla granularità di differenza scelta
- Una sequenza crescente più lunga di paragrafi abbinati identifica i riordinamenti, senza riportare come spostamenti i normali scostamenti di indice dovuti a inserimenti ed eliminazioni
- I paragrafi abbinati modificati usano un allineamento di token a limiti definiti per restituire record di inserimento, eliminazione o sostituzione con entrambi i contesti completi di paragrafo
- La modalità word separa la punteggiatura dalle parole, e la modalità sentence usa punto, punto esclamativo o punto interrogativo finali seguiti da whitespace o dalla fine del paragrafo
- I confini di frase sono lessicali e possono spezzare abbreviazioni o etichette numerate di clausole, quindi la modalità word è il predefinito per una revisione precisa del testo legale
JoinPageContinuationsunisce in modo conservativo un paragrafo incompleto vicino al fondo di una pagina con un paragrafo semplice vicino alla cima della pagina successiva, e i chiamanti possono disattivare questa euristica di layout
Riferimenti di pagina e geometria
PageIndex e ParagraphIndex sono a base zero, mentre CharacterStart è una posizione UTF-16 a base uno all'interno del paragrafo con whitespace normalizzato
Il lato assente di un inserimento o eliminazione di un intero paragrafo ha indici di pagina e paragrafo -1, e un inserimento o eliminazione di token dentro un paragrafo abbinato conserva una posizione a lunghezza zero sul lato opposto
Ogni rettangolo porta il proprio indice di pagina e copre una riga semantica intersecante nello spazio utente PDF, e un paragrafo che attraversa le pagine può avere rettangoli su più pagine
Le posizioni descrivono la copertura della riga invece dei quadrilateri esatti dei caratteri, quindi un PDF annotato può evidenziare la stessa riga per diverse modifiche di parole indipendenti
Escludere gli elementi di pagina ricorrenti e il boilerplate
I predefiniti escludono le righe semantiche corrispondenti che compaiono nei 54 punti superiori o inferiori su almeno due pagine distinte di ogni input, e normalizzano le cifre dei margini così che i numeri di pagina ripetuti possano corrispondere
I documenti before e after vengono filtrati indipendentemente, e le ripetizioni nel corpo restano idonee al confronto indipendentemente da quante volte compaiono
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 rimuove una riga semantica completa per uguaglianza letterale dopo la normalizzazione del whitespace, rispetta IgnoreCase e non interpreta mai espressioni regolari o pattern di sottostringa
Scegliere margini ed esclusioni con attenzione, perché date o altro testo contrattuale dentro una riga di margine ricorrente esclusa vengono omessi dalla revisione del testo
Budget e cancellation
| Opzione | Predefinito | Ambito |
|---|---|---|
MaxPages | 500 | Ogni documento |
MaxParagraphs | 4000 | Ogni documento dopo le esclusioni |
MaxSemanticLines | 50000 | Righe semantiche combinate prima di snapshot ed esclusioni |
MaxCharacters | 2000000 | Testo di riga estratto combinato prima delle esclusioni |
MaxTokens | 200000 | Token di parole combinati e, in modalità sentence, token di frase |
MaxDifferences | 10000 | Record restituiti, spostamenti inclusi |
MaxAlignmentCells | 2000000 | Matrici di token cumulative dei paragrafi modificati |
MaxWorkUnits | 50000000 | Contabilità dell'estrazione e lavoro di allineamento |
Un limite di budget restituisce ccsBudgetExceeded, e la cancellation restituisce ccsCancelled, con segnalazioni parziali conservate per la diagnosi e marcate incomplete nell'HTML
La cancellation viene verificata tra le estrazioni di pagina e lungo tutti i loop di allineamento della libreria, mentre l'estrattore semantico a pagina singola sottostante resta sincrono
ccsInvalidInput segnala documenti mancanti, ordinali di enum non validi o opzioni non valide, e ccsExtractionFailed segnala pagine senza testo estraibile o estrazione semantica fallita
OCR o rimozione esplicita delle pagine vuote è richiesta prima di confrontare pagine senza testo estraibile, e ccsComplete certifica solo il completamento di questo confronto testuale
Artefatti di revisione
HPDFContractReviewHTML restituisce un documento standalone con titolo escaped, messaggi, testo, contesti completi di paragrafo, tipi di modifica ed entrambe le posizioni sorgente, con un limite di output predefinito di 8388608 caratteri UTF-16
L'exporter HTML solleva EHPDFContractCompareBudget quando il proprio output supera il limite configurato, e il suo cancellation token solleva EHPDFOperationCancelled
HPDFSaveContractAnnotatedPDF richiede un report completato, carica un documento sorgente separato e verifica ogni snapshot semantico di pagina inclusa la sua geometria esatta delle righe prima di aggiungere evidenziazioni con commenti di revisione numerati
Specificare percorsi sorgente e output distinti, selezionare ccsBefore o ccsAfter, ed esportare entrambe le versioni quando serve revisionare insieme eliminazioni e inserimenti di interi paragrafi
Su Windows, le identità dei file sorgente e output vengono verificate per respingere hard link o altri alias del file sorgente
L'exporter PDF disattiva AutoLaunch, lascia invariati i documenti di input e il file sorgente, e verifica la cancellation prima del caricamento, tra pagine e modifiche e prima del salvataggio
Questo helper confronta il testo estratto e i riferimenti di layout senza dedurre significato legale, riconoscere testo scansionato o certificare l'effetto legale di una revisione
API correlate
HPDFCompareContracts · THPDFContractCompareOptions · THPDFContractCompareReport · HPDFContractReviewHTML · HPDFSaveContractAnnotatedPDF