Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'keywords' => $this->generateKeywordsFromTitle($advert->getDataproperty('title'), false),
- /**
- * Возвращает отформатированую строку ключевых слов разделенных запятыми
- *
- * @param $title - Заголовок
- * @param int $limit - Лимит количества слов
- * @param string $wordCase - MB_CASE_LOWER | MB_CASE_TITLE| MB_CASE_UPPER
- * @param string $separator - разделитель слов
- * @return string - Отформатированная строка разделенная запятыми
- */
- public function generateKeywordsFromTitle($title, $prefix = 'Маркет', $limit = 10, $wordCase = MB_CASE_LOWER, $separator = ', ')
- {
- // Заглушка. TODO: удалить
- $title .= ' Создает массив из строк, в файле. Игнорирует-пустые строки и знаки перевода строки';
- // Переводим все в нижний регистр
- $title = mb_convert_case($title, MB_CASE_LOWER, 'UTF-8');
- // Стоп-слова. Заглушка. TODO: удалить
- $arrayOfStopWords = ['для','беременных'];
- // Коллекция для удаления стоп-слов
- $stopWordsReplcementCollection = implode('|', $arrayOfStopWords);
- // Набор шаблонов для очистки заголовка от ненужных вхождений,
- // Вынесены в массив для удобной читаемости и редактирования
- // u - utf8, i - для регистронезависимости
- $replacementPatterns = [
- '/[^а-я a-z 0-9]/iu', // удаляет все знаки, кроме букв и чисел
- '/\b\w{1,3}\b/ui', // удаляет все слова, которые <= 3 знаков
- '/\s{2,}/', // удаляет лишние пробелы
- '/\b('.$stopWordsReplcementCollection.')\b/i', // удаляет стоп-слова
- ];
- // Обработанный заголовок, чистый от вхождений описанных выше
- $cleanTitleString = trim(preg_replace($replacementPatterns, ' ', $title));
- // Массив уникальных слов с лимитом $limit штук
- $uniqueWordsWithNLimitation = array_slice(array_unique(explode(' ', $cleanTitleString)),0,10);
- // Очищяем от последней запятой
- $keywords = rtrim(implode($separator, $uniqueWordsWithNLimitation), $separator);
- // Добавляем префикс
- if($prefix)
- $keywords = $prefix.$separator.$keywords;
- // Применяем регистр
- $cases = [
- MB_CASE_LOWER,
- MB_CASE_TITLE,
- MB_CASE_UPPER
- ];
- $wordCase = (in_array($wordCase, $cases))? $wordCase : MB_CASE_LOWER;
- return mb_convert_case($keywords, $wordCase, 'UTF-8');
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement