Best AI Apps Finder - resume layout text-extraction test, 25 September 2026 (UTC) One fictional resume (Sam Okafor; example.com email, Ofcom drama-range phone number) built in four layouts with Python reportlab 4.4.10. The words are the same in all four; only the layout changes. A single column, dates right-aligned on the same line as the job title B two columns: grey sidebar (name, contact, skills, education) + main column (summary, experience) C single column, but name and contact rendered as an image banner, and skill levels shown as dots D single column, dates written inline after the job title ("Title | Sep 2024 - present") PDFs: https://bestaiappsfinder.com/wp-content/uploads/2026/09/A-single-column.pdf (and B-two-column.pdf, C-image-header-skill-dots.pdf, D-single-column-inline-dates.pdf) MD5: A 9232a7b7d858f2231841d61fe6ef1a35, B 95c3f39a4ecb55c6eb2b911033df39c6, C 518d0c99bb51f747689f0ab274717cf6, D 063f70f4b843e6604a69734227a86800 Extractors: pdftotext 24.02.0 (poppler, default mode) and pdfminer.six 20251230 (extract_text defaults). These are generic open-source text extractors used as a stand-in for the text-extraction step of a parser. They are not an applicant tracking system, and commercial parsers may behave differently. Scoring (score.py): contact = how many of "Sam Okafor", "sam.okafor@example.com", "07700 900123" appear anywhere in the extracted text (0-3) dates = how many of the three dates sit on the same line as, or the line directly after, the entry they belong to (two jobs + degree) (0-3) summary = whether the line after the "Summary" heading is the start of the summary text Results layout extractor contact dates summary A pdftotext 3/3 0/3 yes A pdfminer 3/3 1/3 yes B pdftotext 3/3 2/3 no (email and phone interleaved with the summary) B pdfminer 3/3 2/3 yes C pdftotext 0/3 0/3 yes C pdfminer 0/3 1/3 yes D pdftotext 3/3 3/3 yes D pdfminer 3/3 3/3 yes ===== pdftotext output, layout A ===== Sam Okafor sam.okafor@example.com | 07700 900123 | Bradford Summary Operations assistant with daily Excel reporting and invoice reconciliation experience, seeking a junior data analyst role. Experience Operations Assistant, Northgate Logistics - Maintain daily delivery spreadsheets in Excel - Reconcile shipment records against invoices - Built a weekly on-time delivery report Sep 2024 - present Volunteer Treasurer, Bradford Community Allotments - Kept the accounts in Excel 2022 - 2024 Education BSc Economics (2:1), University of Bradford Skills - Excel (pivot tables, XLOOKUP) - SQL (SELECT, JOIN) 2024 ===== pdftotext output, layout B ===== Sam Okafor Summary sam.okafor@example.com Operations assistant with daily Excel reporting and invoice reconciliation experience, seeking a junior data analyst role. 07700 900123 Bradford Skills Excel (pivot tables, XLOOKUP) SQL (SELECT, JOIN) Education BSc Economics (2:1) University of Bradford 2024 Experience Operations Assistant, Northgate Logistics Sep 2024 - present - Maintain daily delivery spreadsheets in Excel - Reconcile shipment records against invoices - Built a weekly on-time delivery report Volunteer Treasurer, Bradford Community Allotments 2022 - 2024 - Kept the accounts in Excel ===== pdftotext output, layout C ===== Summary Operations assistant with daily Excel reporting and invoice reconciliation experience, seeking a junior data analyst role. Experience Operations Assistant, Northgate Logistics - Maintain daily delivery spreadsheets in Excel - Reconcile shipment records against invoices - Built a weekly on-time delivery report Sep 2024 - present Volunteer Treasurer, Bradford Community Allotments - Kept the accounts in Excel 2022 - 2024 Education BSc Economics (2:1), University of Bradford Skills Excel (pivot tables, XLOOKUP) SQL (SELECT, JOIN) 2024 ===== pdftotext output, layout D ===== Sam Okafor sam.okafor@example.com | 07700 900123 | Bradford Summary Operations assistant with daily Excel reporting and invoice reconciliation experience, seeking a junior data analyst role. Experience Operations Assistant, Northgate Logistics | Sep 2024 - present - Maintain daily delivery spreadsheets in Excel - Reconcile shipment records against invoices - Built a weekly on-time delivery report Volunteer Treasurer, Bradford Community Allotments | 2022 - 2024 - Kept the accounts in Excel Education BSc Economics (2:1), University of Bradford | 2024 Skills - Excel (pivot tables, XLOOKUP) - SQL (SELECT, JOIN) ===== score.py ===== import subprocess,re,json from pdfminer.high_level import extract_text files=["A-single-column.pdf","B-two-column.pdf","C-image-header-skill-dots.pdf","D-single-column-inline-dates.pdf"] def lines(t): return [l.strip() for l in t.splitlines() if l.strip()] PAIRS=[("Operations Assistant, Northgate Logistics","Sep 2024 - present"),("Volunteer Treasurer, Bradford Community Allotments","2022 - 2024"),("BSc Economics (2:1)","2024")] res={} for f in files: for ex in ["pdftotext","pdfminer"]: t=subprocess.run(["pdftotext",f,"-"],capture_output=True,text=True).stdout if ex=="pdftotext" else extract_text(f) L=lines(t) contact=sum(x in t for x in ["Sam Okafor","sam.okafor@example.com","07700 900123"]) att=0 for title,date in PAIRS: i=[k for k,l in enumerate(L) if title in l] if not i: continue i=i[0] if date in L[i] or (i+1