Comparaison de contrats
HPDFContractCompare compare le texte sémantique et la géométrie des lignes de deux documents PDF chargés, aligne les paragraphes et renvoie des enregistrements auditables d'insertion, de suppression, de remplacement et de déplacement
Utilisez cet assistant pour la revue de formulation et de clauses, et THPDFDocComparison pour les différences de pages, d'objets et de rendu
Comparer des contrats chargés
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;
Enregistrez le HTML renvoyé en UTF-8 et inspectez Report.Status et Report.Note lorsque la fonction de comparaison renvoie false
Alignement des paragraphes et changements
- Les lignes sémantiques sont regroupées à partir de la page, des colonnes et des limites de listes ou de titres, avec des écarts de ligne de base configurables et une normalisation des espaces entre les lignes
- Les paragraphes identiques sont appariés en premier, et les clauses de corps identiques répétées conservent leur ordre d'occurrence et leur multiplicité
- Les paragraphes modifiés sont appariés par un score configurable de similarité de mots en multiset, indépendant de la granularité de différences choisie
- Une plus longue séquence croissante de paragraphes appariés identifie les réordonnancements sans rapporter comme déplacements les simples décalages d'index dus aux insertions et suppressions
- Les paragraphes appariés modifiés utilisent un alignement de tokens borné pour renvoyer des enregistrements d'insertion, de suppression ou de remplacement avec les deux contextes complets de paragraphe
- Le mode mot sépare la ponctuation des mots, et le mode phrase coupe au point, au point d'exclamation ou au point d'interrogation suivis d'un espace ou de la fin du paragraphe
- Les frontières de phrases sont lexicales et peuvent couper des abréviations ou des numéros de clauses ; le mode mot est donc le défaut pour une revue juridique précise de la formulation
JoinPageContinuationsrelie de manière conservatrice un paragraphe inachevé près du bas d'une page à un paragraphe simple près du haut de la page suivante, et les appelants peuvent désactiver cette heuristique de mise en page
Références de pages et de géométrie
PageIndex et ParagraphIndex sont en base zéro, tandis que CharacterStart est une position UTF-16 en base un au sein du paragraphe normalisé en espaces
Le côté absent d'une insertion ou suppression de paragraphe entier porte des index de page et de paragraphe de -1, et une insertion ou suppression de token au sein d'un paragraphe apparié conserve une position de longueur nulle du côté opposé
Chaque rectangle porte son propre index de page et couvre une ligne sémantique en intersection dans l'espace utilisateur PDF, et un paragraphe à cheval sur plusieurs pages peut avoir des rectangles sur plusieurs pages
Les emplacements décrivent la couverture de lignes plutôt que des quadrilatères de caractères exacts, si bien qu'un PDF annoté peut mettre en surbrillance la même ligne pour plusieurs changements de mots indépendants
Exclure les éléments de page récurrents et les clauses types
Par défaut, les lignes sémantiques identiques apparaissant dans les 54 points supérieurs ou inférieurs d'au moins deux pages distinctes de chaque entrée sont exclues, et les chiffres de marge sont normalisés pour que des numéros de page répétés puissent correspondre
Les documents avant et après sont filtrés indépendamment, et les répétitions du corps restent éligibles à la comparaison quel que soit leur nombre d'occurrences
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 supprime une ligne sémantique complète par égalité littérale après normalisation des espaces, respecte IgnoreCase et n'interprète jamais d'expressions régulières ni de motifs de sous-chaînes
Choisissez marges et exclusions avec soin, car des dates ou d'autres textes contractuels situés dans une ligne de marge récurrente exclue sont absents de la revue de formulation
Budgets et annulation
| Option | Défaut | Portée |
|---|---|---|
MaxPages | 500 | Chaque document |
MaxParagraphs | 4000 | Chaque document après exclusions |
MaxSemanticLines | 50000 | Lignes sémantiques combinées avant instantanés et exclusions |
MaxCharacters | 2000000 | Texte de lignes extrait combiné avant exclusions |
MaxTokens | 200000 | Tokens de mots et, en mode phrase, de phrases combinés |
MaxDifferences | 10000 | Enregistrements renvoyés, déplacements compris |
MaxAlignmentCells | 2000000 | Matrices de tokens cumulées des paragraphes modifiés |
MaxWorkUnits | 50000000 | Comptabilité d'extraction et travail d'alignement |
Une limite de budget renvoie ccsBudgetExceeded et une annulation renvoie ccsCancelled, avec conservation des constatations partielles pour diagnostic et marquage d'incomplétude en HTML
L'annulation est contrôlée entre les extractions de pages et dans toutes les boucles d'alignement de la bibliothèque, tandis que l'extracteur sémantique mono-page sous-jacent reste synchrone
ccsInvalidInput signale des documents manquants, des ordinaux d'enum invalides ou des options invalides, et ccsExtractionFailed signale des pages sans texte extractible ou un échec d'extraction sémantique
Un OCR ou une suppression explicite des pages blanches est requis avant de comparer des pages sans texte extractible, et ccsComplete ne certifie que l'achèvement de cette comparaison de texte
Artefacts de revue
HPDFContractReviewHTML renvoie un document autonome avec titre échappé, messages, textes, contextes complets de paragraphes, types de changements et les deux emplacements source, avec une limite de sortie de 8388608 caractères UTF-16 par défaut
L'exporteur HTML lève EHPDFContractCompareBudget lorsque sa sortie dépasse la limite configurée, et son jeton d'annulation lève EHPDFOperationCancelled
HPDFSaveContractAnnotatedPDF exige un rapport terminé, charge un document source séparé et vérifie chaque instantané de page sémantique, géométrie exacte des lignes comprise, avant d'ajouter des surbrillances avec des commentaires de revue numérotés
Spécifiez des chemins source et sortie distincts, choisissez ccsBefore ou ccsAfter, et exportez les deux versions lorsque vous devez passer en revue ensemble les suppressions et insertions de paragraphes entiers
Sous Windows, les identités des fichiers source et sortie sont vérifiées pour rejeter les liens physiques ou autres alias du fichier source
L'exporteur PDF désactive AutoLaunch, laisse les documents d'entrée et le fichier source inchangés, et contrôle l'annulation avant le chargement, entre les pages et les changements, et avant l'enregistrement
Cet assistant compare la formulation extraite et les références de mise en page sans inférer de sens juridique, reconnaître du texte scanné ni certifier l'effet juridique d'une révision
API associées
HPDFCompareContracts · THPDFContractCompareOptions · THPDFContractCompareReport · HPDFContractReviewHTML · HPDFSaveContractAnnotatedPDF