Move PDF text extraction to its own module