Spaces:
Running
Running
| /** | |
| * Cleans raw extracted text from PDF/DOCX. | |
| * Removes page numbers, form feeds, repeated headers, and normalizes whitespace. | |
| * @param {string} rawText - Raw text from parser. | |
| * @returns {string} - Cleaned text. | |
| */ | |
| const cleanText = (rawText) => { | |
| let text = rawText; | |
| // Replace form feeds (PDF page breaks) with newlines | |
| text = text.replace(/\f/g, '\n'); | |
| // Remove carriage returns | |
| text = text.replace(/\r/g, ''); | |
| // Remove "Page X of Y" patterns (case-insensitive) | |
| text = text.replace(/\b[Pp]age\s+\d+\s+of\s+\d+\b/g, ''); | |
| // Remove "- 1 -" style page numbers on their own line | |
| text = text.replace(/^[-–]\s*\d+\s*[-–]\s*$/gm, ''); | |
| // Remove standalone digits on their own line (likely page numbers, e.g. "1", "12") | |
| text = text.replace(/^\s*\d{1,3}\s*$/gm, ''); | |
| // Normalize tabs to single space | |
| text = text.replace(/\t/g, ' '); | |
| // Collapse multiple spaces into one | |
| text = text.replace(/ {2,}/g, ' '); | |
| // Collapse 3+ consecutive newlines into exactly two | |
| text = text.replace(/\n{3,}/g, '\n\n'); | |
| // Trim each line | |
| text = text | |
| .split('\n') | |
| .map((line) => line.trim()) | |
| .join('\n'); | |
| return text.trim(); | |
| }; | |
| module.exports = { cleanText }; | |