コーパス最小化関数

function HPDFMinimizeCorpusCase(const Input: TBytes;
  const Predicate: THPDFFailurePredicate; MaximumAttempts: Integer;
  out AInfo: THPDFCorpusMinimizationInfo): TBytes;

リデューサは最初に完全な間接オブジェクトスパンを削除し、次に段階的に小さくなるバイト範囲の削減を適用します

候補は述語が元の失敗署名をまだ報告する場合にのみ受け入れられます

AInfo は試行回数、受け入れられた削減、削除されたオブジェクトスパン、削除されたバイト範囲、元のサイズと最終サイズ、保持された署名を報告します

継続的なコーパス保存

function HPDFDefaultCorpusStoreOptions: THPDFCorpusStoreOptions;

function HPDFMinimizeAndStoreCorpusCase(const Input: TBytes;
  const Predicate: THPDFFailurePredicate;
  const CorpusDirectory: string;
  const Options: THPDFCorpusStoreOptions;
  out AInfo: THPDFCorpusCaseInfo): Boolean;

function HPDFCorpusCaseInfoToJSON(
  const AInfo: THPDFCorpusCaseInfo): AnsiString;
type
  THPDFCorpusStoreAction = (csaAdded, csaReplaced, csaKeptExisting);

  THPDFCorpusStoreOptions = record
    MaximumAttempts: Integer;
    MaximumInputBytes: Int64;
    MaximumStoredBytes: Int64;
    LockRetryCount: Integer;
  end;

ストアは失敗署名の SHA-256 ダイジェストから安定したケース ID を導出し、既存のケースを再検証し、既存と受信の両方の候補を最小化して、最小の結果を保持します

プロセス間ロックは 1 つのコーパスディレクトリの決定を直列化し、ライトスルーの一時ファイルと原子的な置換は、リーダーが部分的な PDF やメタデータファイルを観察するのを防ぎます

THPDFCorpusStoreOptions は最小化試行、受信バイト、保存バイト、ロック再試行を制限し、THPDFCorpusCaseInfo.Action はケースが追加、置換、または保持されたかを報告します

サイドカースキーマ hotpdf.corpus.case.v1 は、ケース ID、正確な失敗署名、コンテンツ SHA-256、保存されたバイト数を安定したフィールド順で記録します

HPDFCompareRegressionResultsDeterministic は、解析、描画、テキスト、保存の各ドメインにわたって繰り返しのクロスエンジン署名を比較し、不安定な実行や失敗した実行を拒否します