posquit0 / Awesome-CV

:page_facing_up: Awesome CV is LaTeX template for your outstanding job application
LaTeX Project Public License v1.3c
22.24k stars 4.71k forks source link

ATS incompataibility #137

Open Rogeralpha opened 7 years ago

Rogeralpha commented 7 years ago

Most organizations use ATS now to parse information from your resume. Recruiters search buzz words using the ATS system as well. The .pdf output doesn't pass the ATS test i.e whenever i select all the text and paste it on a word or notepad, only a few lines show up. As you can see this will be a big issue and this will never reach the human eye. Any suggestions?

NiallDillane commented 3 years ago

Old issue, but leaving a link to a related one that seemed to work for me, in case anyone ends up here:

https://github.com/posquit0/Awesome-CV/issues/275#issuecomment-475865923

davejscott commented 2 years ago

@NiallDillane I don't understand why this solution works, do you mind explaining?

Quang-Vinh commented 2 years ago

Still doesn't seem like it's parsing properly when I run it through https://resume-parser.vercel.app/

chelseanbr commented 11 months ago

Hi all, I found a solution that worked for me, got it from ChatGPT with the following Prompt: "How do I add pdf-parsable spaces between all words for bulleted items in the LaTeX Awesome-CV?"

Edited Response (Had to change "cvlist" from the original response to "cvitems"): To add PDF-parsable spaces between all words for bulleted items in the Awesome-CV LaTeX template, you can modify the cvitems environment. The cvitems environment is used to create the bulleted lists in the Awesome-CV template. We'll customize this environment to include parsable spaces between words.

Here's how you can achieve this:

  1. Open the awesome-cv.cls file in a text editor.

  2. Search for the definition of the cvitems environment. It should look something like this:

\newenvironment{cvitems}{
  \begin{itemize}[leftmargin=2ex, nosep, noitemsep]
    \vspace{-2mm}
}{
  \end{itemize}
}
  1. Modify the cvitems environment to include parsable spaces between words. We'll use the \hspace{} command to add space between each word.
\newenvironment{cvitems}{
  \begin{itemize}[leftmargin=2ex, nosep, noitemsep, label=]
    \setlength\itemsep{0pt}
    \setlength\parskip{0pt}
    \setlength\parsep{0pt}
    \renewcommand\labelitemi{\hspace{0.5em}\textbullet\hspace{0.5em}}
}{
  \end{itemize}
}

In this modification, we set the label option to be empty and redefine the labelitemi command to include \hspace{} before and after the bullet symbol, effectively adding spaces between each bullet point and word.

  1. Save the awesome-cv.cls file after making the changes.

  2. In your main .tex document, use the updated Awesome-CV class:

\documentclass[11pt, a4paper]{awesome-cv}

\begin{document}

% Your CV content here, use the cvitems environment as usual
\section{Education}
\begin{cvitems}
  \item First item in the list.
  \item Second item in the list.
  \item Third item in the list.
\end{cvitems}

\end{document}

With these modifications, the cvitems environment in Awesome-CV will now display the bulleted items with spaces between words in the PDF output, making it copy-pasteable and searchable. The spaces between words will be handled automatically, and you don't need to manually adjust the spacing for each item.

OJFord commented 11 months ago

Is there an offline tool we can run the example through in CI? Would be great to have as a test.

I'm not sure how much content there's supposed to be, but the webapp linked above doesn't error at least. Need something more concrete to go on here really.

mrepetto-certx commented 11 months ago

The solution proposed by @chelseanbr does not work for me on the tool proposed by @Quang-Vinh

mrepetto-certx commented 11 months ago

@OJFord you mean a tool that compares the .tex file (using detex) and the extracted text from the .pdf or something more nuanced?

OJFord commented 11 months ago

Actually less advanced would be fine: we have the example tex with known fixed (as fixed as the test) content; if we could just run an 'ATS' tool over the rendered example, we could then compare that output to a fixed test of the expected information.

$make example.pdf
$result="$(ats example.pdf)"
$expect='{
    "name": "Claude",
    "job-history": [ ... ],
    ...
}'
$test "$result" = "$expect"

sort of thing.

I've used some generic PDF parsers/text extraction tools before, but if there's something ATS-specific that'd be great, otherwise we'll be guessing whether a whitespace change or something will affect them when it changes.

mrepetto-certx commented 11 months ago

I tried to search for specific ATS either as CLI or as a Python package but the only thing I found was the following tool, which under the hood utilizes pypdf. But It does a decent job of creating a json of the relevant information if provided with an ATS-friendly template.

dcsim commented 9 months ago

Over the past...almost decade...I haven't found a consistently satisfactory solution for this. With the recent progress towards creating accessible pdf files with LaTeX (see LaTeX 2023-06-01 Release Distributed and automatic tagging, maybe this will be easier and more consistent in the future.

I think the best solution for ATS compatibility is to upload a .txt, .rtf, or .docx version of the resume to the ATS let it process everything, then remove the original file and upload the pretty PDF.

Pandoc from the example .tex to .md isn't too bad. Maybe to a template or filter could simplify that for folks and guarantee every ATS will be able to process the text without spacing issues.