Порівняння контрактів

HPDFContractCompare порівнює семантичний текст і геометрію рядків двох завантажених PDF-документів, вирівнює абзаци та повертає придатні для аудиту записи вставлення, видалення, заміни й переміщення

Використовуйте цей хелпер для перегляду формулювань і застережень, а THPDFDocComparison — для відмінностей сторінок, об'єктів і рендерингу

Порівняння завантажених контрактів

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;

Зберігайте повернений HTML у UTF-8 і перевіряйте Report.Status та Report.Note, коли функція порівняння повертає false

Вирівнювання абзаців і зміни

Посилання на сторінки та геометрію

PageIndex і ParagraphIndex відлічуються від нуля, а CharacterStart — позиція UTF-16, що відлічується від одиниці, у нормалізованому за пробілами абзаці

Відсутня сторона вставлення чи видалення цілого абзацу має індекси сторінки та абзацу -1, а вставлення чи видалення токена у спарованому абзаці зберігає позицію нульової довжини на протилежній стороні

Кожен прямокутник несе власний індекс сторінки та покриває перетинаний семантичний рядок у просторі користувача PDF, а абзац, що охоплює кілька сторінок, може мати прямокутники на кількох сторінках

Розташування описують покриття рядків, а не точні чотирикутники символів, тож анотований PDF може підсвітити той самий рядок для кількох незалежних змін слів

Вилучення повторюваних елементів сторінки та шаблонного тексту

Типові налаштування вилучають збіжні семантичні рядки, що трапляються у верхніх чи нижніх 54 пунктах щонайменше на двох різних сторінках кожного входу, і нормалізують цифри полів, щоб повторювані номери сторінок могли збігатися

Документи «до» і «після» фільтруються незалежно, а повторення в основному тексті залишаються придатними для порівняння незалежно від кількості появ

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 вилучає повний семантичний рядок за буквальним збігом після нормалізації пробілів, враховує IgnoreCase і ніколи не інтерпретує регулярні вирази чи шаблони підрядків

Обирайте поля та вилучення обдумано, адже дати чи інший контрактний текст у вилученому повторюваному рядку поля не потраплять до перегляду формулювань

Бюджети та скасування

ПараметрЗа замовчуваннямОхоплення
MaxPages500Кожен документ
MaxParagraphs4000Кожен документ після вилучень
MaxSemanticLines50000Сумарні семантичні рядки до знімків і вилучень
MaxCharacters2000000Сумарний витягнутий текст рядків до вилучень
MaxTokens200000Сумарні токени слів і, у режимі речень, речень
MaxDifferences10000Повернуті записи, включно з переміщеннями
MaxAlignmentCells2000000Кумулятивні токенні матриці змінених абзаців
MaxWorkUnits50000000Облік витягання та робота вирівнювання

Досягнення межі бюджету повертає ccsBudgetExceeded, а скасування — ccsCancelled; часткові знахідки зберігаються для діагностики та позначаються в HTML як неповні

Скасування перевіряється між витяганнями сторінок і впродовж усіх власних циклів вирівнювання бібліотеки, тоді як базовий односторінковий семантичний витягувач залишається синхронним

ccsInvalidInput повідомляє про відсутні документи, недійсні порядкові значення enum чи недійсні параметри, а ccsExtractionFailed — про сторінки без тексту, який можна витягти, або невдале семантичне витягання

OCR або явне вилучення порожніх сторінок потрібне перед порівнянням сторінок без тексту, який можна витягти, а ccsComplete засвідчує завершення лише цього текстового порівняння

Артефакти перегляду

HPDFContractReviewHTML повертає самодостатній документ з екранованим заголовком, повідомленнями, текстом, повними контекстами абзаців, видами змін і обома вихідними розташуваннями, з типовою межею результату 8388608 символів UTF-16

HTML-експортер створює EHPDFContractCompareBudget, коли його результат перевищує налаштовану межу, а його токен скасування — EHPDFOperationCancelled

HPDFSaveContractAnnotatedPDF вимагає завершеного звіту, завантажує окремий вихідний документ і перевіряє кожен семантичний знімок сторінки, включно з точною геометрією рядків, перед додаванням підсвічувань із пронумерованими коментарями перегляду

Вказуйте різні шляхи джерела та результату, обирайте ccsBefore чи ccsAfter, і експортуйте обидві версії, коли потрібно переглядати видалення та вставлення цілих абзаців разом

У Windows тотожність файлів джерела та результату перевіряється, щоб відхилити hard link чи інші псевдоніми вихідного файлу

PDF-експортер вимикає AutoLaunch, залишає вхідні документи і вихідний файл без змін та перевіряє скасування перед завантаженням, між сторінками і змінами та перед збереженням

Цей хелпер порівнює витягнуті формулювання та посилання на компонування, не виводячи юридичного змісту, не розпізнаючи сканований текст і не засвідчуючи юридичної чинності редакції

Пов'язані API

HPDFCompareContracts · THPDFContractCompareOptions · THPDFContractCompareReport · HPDFContractReviewHTML · HPDFSaveContractAnnotatedPDF