Порівняння контрактів
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
Вирівнювання абзаців і зміни
- Семантичні рядки групуються за межами сторінок, стовпців, списків чи заголовків і налаштовуваними інтервалами базових ліній, з нормалізацією пробілів між рядками
- Спочатку зіставляються точні абзаци, а повторювані ідентичні основні застереження зберігають порядок появи та кратність
- Змінені абзаци зіставляються за налаштовуваною оцінкою подібності слів multiset, незалежно від обраної гранулярності відмінностей
- Найдовша зростаюча послідовність спарованих абзаців виявляє перевпорядкування, не повідомляючи звичайні зсуви індексів від вставлень і видалень як переміщення
- Змінені спаровані абзаци використовують обмежене вирівнювання токенів, щоб повертати записи вставлення, видалення чи заміни з повними контекстами обох абзаців
- Режим слів відокремлює пунктуацію від слів, а режим речень використовує кінцеву крапку, знак оклику чи знак питання, за якими йдуть пробіл або кінець абзацу
- Межі речень є лексичними і можуть розрізати скорочення чи нумеровані позначки застережень, тож для точного юридичного перегляду формулювань типовим є режим слів
JoinPageContinuationsконсервативно з'єднує незавершений абзац біля низу однієї сторінки зі звичайним абзацом біля верху наступної, і викликачі можуть вимкнути цю евристику компонування
Посилання на сторінки та геометрію
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 і ніколи не інтерпретує регулярні вирази чи шаблони підрядків
Обирайте поля та вилучення обдумано, адже дати чи інший контрактний текст у вилученому повторюваному рядку поля не потраплять до перегляду формулювань
Бюджети та скасування
| Параметр | За замовчуванням | Охоплення |
|---|---|---|
MaxPages | 500 | Кожен документ |
MaxParagraphs | 4000 | Кожен документ після вилучень |
MaxSemanticLines | 50000 | Сумарні семантичні рядки до знімків і вилучень |
MaxCharacters | 2000000 | Сумарний витягнутий текст рядків до вилучень |
MaxTokens | 200000 | Сумарні токени слів і, у режимі речень, речень |
MaxDifferences | 10000 | Повернуті записи, включно з переміщеннями |
MaxAlignmentCells | 2000000 | Кумулятивні токенні матриці змінених абзаців |
MaxWorkUnits | 50000000 | Облік витягання та робота вирівнювання |
Досягнення межі бюджету повертає 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