import type { EmbedderInterface } from '../chunker/semantic-chunker.js'; export type { EmbedderInterface }; /** * Text item with position information from PDF */ interface TextItemWithPosition { text: string; x: number; y: number; fontSize: number; hasEOL: boolean; fontName?: string; fontWeight?: string; blockOrdinal?: number; lineOrdinal?: number; bbox?: [number, number, number, number]; } /** * Page data containing positioned text items */ export interface PageData { pageNum: number; items: TextItemWithPosition[]; pageHeight?: number; } export interface FilteredTextFragment { pageNum: number; blockOrdinal: number; lineOrdinal: number; fragmentOrdinal: number; bbox: [number, number, number, number]; text: string; pageTextStart: number; pageTextEnd: number; } export interface FilteredPageLayout { text: string; textFragments: FilteredTextFragment[]; } /** * Configuration for sentence-level pattern detection */ interface SentencePatternConfig { /** Similarity threshold for pattern detection (default: 0.85) */ similarityThreshold: number; /** Minimum pages required for pattern detection (default: 3) */ minPages: number; /** Number of pages to sample from center for pattern detection (default: 5) */ samplePages: number; /** Block attribute hints for boosted threshold (from detectBlockAttributeCandidates) */ blockHints?: BlockAttributeHints; /** Boosted similarity threshold when block hints match (default: 0.75) */ boostedThreshold?: number; } /** * Hints for block-level header/footer detection based on font attributes */ export interface BlockAttributeHints { medianFontSize: number; headerCandidateYs: Set; footerCandidateYs: Set; } export declare function detectBlockAttributeCandidates(pages: PageData[], config?: Partial>): BlockAttributeHints; /** * Result of sentence-level pattern detection */ interface SentencePatternResult { /** Whether first sentences should be removed (detected as header) */ removeFirstSentence: boolean; /** Whether last sentences should be removed (detected as footer) */ removeLastSentence: boolean; /** Median similarity of first sentences */ headerSimilarity: number; /** Median similarity of last sentences */ footerSimilarity: number; } export declare function detectSentencePatterns(pages: PageData[], embedder: EmbedderInterface, config?: Partial): Promise; /** * Main entry point for sentence-level header/footer filtering: removes * repeating boundary sentences while retaining native provenance for every * survivor. */ export declare function filterPageBoundaryLayouts(pages: PageData[], embedder: EmbedderInterface, config?: Partial): Promise; //# sourceMappingURL=pdf-filter.d.ts.map