Как правильно разделить текст на части?

195
13 августа 2018, 06:00

В тексте (вакансии) есть три основных ключа : Требования, Условия, Обязанности.

вот пример :

В строительную компанию, на постоянную работу требуются специалисты по отделке помещений различного назначения.
Требования:
- Опыт работы в сфере ремонтно-строительных услуг (квартиры, офисы, магазины) от 1 года 
- Аккуратность, внимательность, стрессоустойчивость
Обязанности:
- Своевременное, качественное выполнение работ по отделке помещений различного назначения (квартиры, офисы, торговые площади)
Условия:
- График работы 6/1
- Объекты г. Иваново/Ивановская область

Эти ключи могут быть в разном положении, некоторые могут отсутствовать, но всегда после них идет описание.

Возможно ли как-то разделить текст на несколько логических частей (нужно в базу по отдельным колонка занести будет в итоге), чтобы более-менее было все логично по тексту ?

Answer 1

Решение "в лоб":

<?php    
$data = preg_split('/(Требования:|Обязанности:|Условия:)/u', $str, -1, PREG_SPLIT_DELIM_CAPTURE);

На выходе получите массив такого вида:

array (
  0 => 'В строительную компанию, на постоянную работу требуются специалисты по отделке помещений различного назначения.
',
  1 => 'Требования:',
  2 => '
- Опыт работы в сфере ремонтно-строительных услуг (квартиры, офисы, магазины) от 1 года 
- Аккуратность, внимательность, стрессоустойчивость
',
  3 => 'Обязанности:',
  4 => '
- Своевременное, качественное выполнение работ по отделке помещений различного назначения (квартиры, офисы, торговые площади)
',
  5 => 'Условия:',
  6 => '
- График работы 6/1
- Объекты г. Иваново/Ивановская область',
)

Теперь можно ориентируясь на ключевые слова, которые будут отдельными элементами массива, определить идущий за ними и относящийся к ним контент. Понятное дело, что точность разбора в таком варианте - очень относительная.

Answer 2

Можно собрать шаблон для получения слов, за которыми находится двоеточие с последующим описанием, и сохранять совпавшие подстроки по отдельным ячейкам массива. Но так как "ключевые слова" могут располагаться в разных позициях, то привязаться к конкретному элементу результирующего массива не выйдет - понадобится ещё какой-то дальнейший разбор результирующего массива:

$str = 'В строительную компанию, на постоянную работу требуются специалисты по отделке помещений различного назначения.
Требования:
- Опыт работы в сфере ремонтно-строительных услуг (квартиры, офисы, магазины) от 1 года 
- Аккуратность, внимательность, стрессоустойчивость
Обязанности:
- Своевременное, качественное выполнение работ по отделке помещений различного назначения (квартиры, офисы, торговые площади)
Условия:
- График работы 6/1
- Объекты г. Иваново/Ивановская область';
$patt = '~\pL+:[\r\n]+^-[\s\w(),./-]+$~um';
preg_match_all($patt, $str, $arr);
var_dump($arr);

Собственно готовое решение будет выглядеть так:

$result = [];
preg_replace_callback(
    '~\pL+:[\r\n]+^-[\s\w(),./-]+$~um',
    function($a)use(&$result){
        preg_match('~(\pL+):~u', $a[0], $key);
        $result[$key[1]] = str_replace($key[0], '', $a[0]);
    },
    $str
);

Доступ к необходимым элементам можно получить по ключам:

echo $result['Обязанности'];

READ ALSO
Интеграция оплаты на сайт

Интеграция оплаты на сайт

Пытался установить на сайт оплату через Paysera, но так и не могу додуматься как связать html страничку с php файлом, который предоставляется в оф документации...

182
Генерирующийся PHP файл

Генерирующийся PHP файл

Хотел задать несколько вопросов:

223
Как спарсить первую страницу поиска Google

Как спарсить первую страницу поиска Google

Нужно парсингом (можно cUrl ) получить самую первую страницу поиска гугл по конкретному запросу, мне нужно получить только вот эту информацию:

183