Resume Example {n} 1
Borrowed from University of La Verne Career Center - Link
This playground showcases the ResumeFlow resume parser and its ability to parse information from a resume PDF. Click around the PDF examples below to observe different parsing results.
Borrowed from University of La Verne Career Center - Link
Created with ResumeFlow resume builder - Link
You can also add your resume below to access how well your resume would be parsed by similar Application Tracking Systems (ATS) used in job applications. The more information it can parse out, the better it indicates the resume is well formatted and easy to read. It is beneficial to have the name and email accurately parsed at the very least.
Browse a pdf file or drop it here
File data is used locally and never leaves your browser
| Profile | |
|---|---|
| Name | |
| Phone | |
| Location | |
| Link | |
| Summary | |
| Education | |
| School | |
| Degree | |
| GPA | |
| Date | |
| Descriptions | |
| Work Experience | |
| Company | |
| Job Title | |
| Date | |
| Descriptions | |
| Skills | |
| Descriptions | |
For the technical curious, this section will dive into the ResumeFlow parser algorithm and walks through the 4 steps on how it works. (Note that the algorithm is designed to parse single column resume in English language)
A PDF file is a standardized file format defined by the ISO 32000 specification. When you open up a PDF file using a text editor, you'll notice that the raw content looks encoded and is difficult to read. To display it in a readable format, you would need a PDF reader to decode and view the file. Similarly, the resume parser first needs to decode the PDF file in order to extract its text content.
While it is possible to write a custom PDF reader function following the ISO 32000 specification, it is much simpler to leverage an existing library. In this case, the resume parser uses Mozilla's open source pdf.js library to first extract all the text items in the file.
The table below lists 0 text items that are extracted from the resume PDF added. A text item contains the text content and also some metadata about the content, e.g. its x, y positions in the document, whether the font is bolded, or whether it starts a new line. (Note that x,y position is relative to the bottom left corner of the page, which is the origin 0,0)
| # | Text Content | Metadata |
|---|
The extracted text items aren't ready to use yet and have 2 main issues:
Issue 1: They have some unwanted noises.Some single text items can get broken into multiple ones, as you might observe on the table above, e.g. a phone number "(123) 456-7890" might be broken into 3 text items "(123) 456", "-" and "7890".
Solution: To tackle this issue, the resume parser connects adjacent text items into one text item if their distance is smaller than the average typical character width, whereThe average typical character width is calculated by dividing the sum of all text items' widths by the total number characters of the text items (Bolded texts and new line elements are excluded to not skew the results).
Issue 2: They lack contexts and associations.When we read a resume, we scan a resume line by line. Our brains can process each section via visual cues such as texts' boldness and proximity, where we can quickly associate texts closer together to be a related group. The extracted text items however currently don't have those contexts/associations and are just disjointed elements.
Solution: To tackle this issue, the resume parser reconstructs those contexts and associations similar to how our brains do it, through grouping them into lines and sections.
| Lines | Line Content |
|---|
Now that we have the lines, the next step is to group them into sections. The main idea is to find section titles and group their following lines (content) together. Section titles are detected by checking whether a line is bolded and has short text content (a heuristic). Once section titles are identified, the rest of the lines that follow are grouped as their content until the next section title is reached.
A section is represented by its section title and an array of lines. The table below shows the 0 sections that are detected: The section titles are bolded and the lines associated with the section are highlighted with the same colors.
| Lines | Line Content |
|---|
As a demonstration, the table below shows 3 resume attributes in the profile section of the resume PDF added.
| Resume Attribute | Text (Highest Feature Score) | Feature Scores of Other Texts |
|---|---|---|
| Name | ||
| Phone |
| Name Feature Sets | |
|---|---|
| Feature Function | Feature Matching Score |
| Contains only letters, spaces or periods | +3 |
| Is bolded | +2 |
| Contains all uppercase letters | +2 |
| Contains @ | -4 (match email) |
| Contains number | -4 (match phone) |
| Contains , | -4 (match address) |
| Contains / | -4 (match url) |
| Resume Attribute | Core Feature Function | Regex |
|---|---|---|
| Name | Contains only letters, spaces or periods | /^[a-zA-Z\s\.]+$/ |
| Match email format xxx@xxx.xxx xxx can be anything not space | /\S+@\S+\.\S+/ | |
| Phone | Match phone format (xxx)-xxx-xxxx () and - are optional | /\(?\d{3}\)?[\s-]?\d{3}[\s-]?\d{4}/ |
| Location | Match city and state format {City, ST} | /[A-Z][a-zA-Z\s]+, [A-Z]{2}/ |
| Url | Match url format xxx.xxx/xxx | /\S+\.[a-z]+\/\S+/ |
| School | Contains a school keyword, e.g. College, University, School | |
| Degree | Contains a degree keyword, e.g. Associate, Bachelor, Master | |
| GPA | Match GPA format x.xx | /[0-4]\.\d{1,2}/ |
| Date | Contains date keyword related to year, month, seasons or the word Present | Year: /(?:19|20)\d{2}/ |
| Job Title | Contains a job title keyword, e.g. Analyst, Engineer, Intern | |
| Company | Is bolded or doesn't match job title & date | |
| Project | Is bolded or doesn't match date |
And that is everything about the ResumeFlow parser algorithm :)
Written by Xitang on June 2023