Проверьте, присутствует ли значение местоположения в массиве - PullRequest
0 голосов
/ 02 августа 2020

Я пишу скрипт для синтаксического анализа LinkedIn-CV. Я застрял в разделе опыта работы. В настоящее время я могу извлечь текст опыта работы из PDF. Но у меня проблема с ключом местоположения, поскольку он не является обязательным.

Array
(
    [0] => Company 1
    [1] => Software Engineer
    [2] => July 2020 - Present  (1 month)   
    [3] => Pretoria, Gauteng, South Africa //this key is optional
    [4] => Company 2
    [5] => CTO
    [6] => September 2016 - Present     (3 years 11 months) 
    [7] => Pretoria, South Africa //this key is optional
)

Формат следующий:

  • Название компании - обязательно
  • Должность - Обязательный
  • Продолжительность работы - Обязательный
  • Местоположение - Необязательно

Я пробовал использовать array_chunk($array, 4); Но это работает только в том случае, если местоположение присутствует в массиве.

Моя другая попытка заключалась в поиске присутствия страны во всем массиве, но это сложно, поскольку названия некоторых компаний содержат страны. например, MTN - Южная Африка.

Моя последняя попытка - попытаться написать регулярное выражение для проверки шаблона местоположения. LinkedIn анализирует его как City, Province, Country для Южной Африки. Но для других стран он разбирается как City, Country. Но я не смог правильно это понять. Я пробовал preg_match('#\((,*?)\)#', $value, $match), где $value - значение строки для текущей итерации

Я хотел бы иметь массив для каждого опыта работы, который мог бы включать местоположение или нет. Например:

Array
(
    [0] => Array
        (
            [0] => Company 1
            [1] => Software Engineer
            [2] => July 2020 - Present  (1 month)   
            [3] => Pretoria, Gauteng, South Africa
        )

    [1] => Array
        (
            [0] => Company 2
            [1] => CTO
            [2] => September 2016 - Present     (3 years 11 months) 
            [3] => Pretoria Area, South Africa
        )

)

Я ценю вашу помощь.

РЕДАКТИРОВАТЬ:

Основная строка (опыт работы)

$string = 'Company 1 Software Engineer July 2020 - Present  (1 month) Pretoria, Gauteng, South Africa Company 2 CTO September 2016 - Present  (3 years 11 months) Pretoria Area, South Africa';

$array = splitNewLine($string);

function splitNewLine($text) {
    $code = preg_replace('/\n$/', '', preg_replace('/^\n/', '', preg_replace('/[\r\n]+/', "\n", $text)));
    return explode("\n", $code);
}

1 Ответ

1 голос
/ 02 августа 2020

Вы можете захватить 4 строки за раз, затем проверить местоположение с помощью правильного регулярного выражения, а затем соответствующим образом скорректировать положение следующего фрагмента:

function computeExperiences(array $lines): array
{
  $experiences = [];

  $position = 0;
  while ($chunkLines = array_slice($lines, $position, 4)) {
    $experience = array_slice($chunkLines, 0, 3);
    $locationIsPresent = isset($chunkLines[3]) && preg_match('/\w+,\s\w+(?:,\s\w+)?/', $chunkLines[3]);
    if ($locationIsPresent) {
      $experience[] = $chunkLines[3];
      $position += 4;
    } else {
      $position += 3;
    }
    $experiences[] = $experience;
  }

  return $experiences;
}

Demo

...