Advertisement
Ra1ski

Untitled

Oct 8th, 2014
484
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.23 KB | None | 0 0
  1.    'keywords'    => $this->generateKeywordsFromTitle($advert->getDataproperty('title'), false),
  2.  
  3.     /**
  4.      * Возвращает отформатированую строку ключевых слов разделенных запятыми
  5.      *
  6.      * @param $title            - Заголовок
  7.      * @param int $limit        - Лимит количества слов
  8.      * @param string $wordCase  - MB_CASE_LOWER | MB_CASE_TITLE| MB_CASE_UPPER
  9.      * @param string $separator - разделитель слов
  10.      * @return string           - Отформатированная строка разделенная запятыми
  11.      */
  12.     public function generateKeywordsFromTitle($title, $prefix = 'Маркет', $limit = 10, $wordCase = MB_CASE_LOWER, $separator = ', ')
  13.     {
  14.         // Заглушка. TODO: удалить
  15.         $title .= ' Создает массив из строк, в файле. Игнорирует-пустые строки и знаки перевода строки';
  16.  
  17.         // Переводим все в нижний регистр
  18.         $title =  mb_convert_case($title, MB_CASE_LOWER, 'UTF-8');
  19.  
  20.         // Стоп-слова. Заглушка. TODO: удалить
  21.         $arrayOfStopWords   = ['для','беременных'];
  22.  
  23.         // Коллекция для удаления стоп-слов
  24.         $stopWordsReplcementCollection   = implode('|', $arrayOfStopWords);
  25.  
  26.         // Набор шаблонов для очистки заголовка от ненужных вхождений,
  27.         // Вынесены в массив для удобной читаемости и редактирования
  28.         // u - utf8, i - для регистронезависимости
  29.         $replacementPatterns = [
  30.             '/[^а-я a-z 0-9]/iu',                           // удаляет все знаки, кроме букв и чисел
  31.             '/\b\w{1,3}\b/ui',                              // удаляет все слова, которые <= 3 знаков
  32.             '/\s{2,}/',                                     // удаляет лишние пробелы
  33.             '/\b('.$stopWordsReplcementCollection.')\b/i',  // удаляет стоп-слова
  34.         ];
  35.  
  36.         // Обработанный заголовок, чистый от вхождений описанных выше
  37.         $cleanTitleString = trim(preg_replace($replacementPatterns, ' ', $title));
  38.  
  39.         // Массив уникальных слов с лимитом $limit штук
  40.         $uniqueWordsWithNLimitation = array_slice(array_unique(explode(' ', $cleanTitleString)),0,10);
  41.  
  42.         // Очищяем от последней запятой
  43.         $keywords = rtrim(implode($separator, $uniqueWordsWithNLimitation), $separator);
  44.  
  45.  
  46.         // Добавляем префикс
  47.         if($prefix)
  48.             $keywords = $prefix.$separator.$keywords;
  49.  
  50.  
  51.         // Применяем регистр
  52.         $cases = [
  53.             MB_CASE_LOWER,
  54.             MB_CASE_TITLE,
  55.             MB_CASE_UPPER
  56.         ];
  57.  
  58.         $wordCase = (in_array($wordCase, $cases))? $wordCase : MB_CASE_LOWER;
  59.  
  60.         return mb_convert_case($keywords, $wordCase, 'UTF-8');
  61.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement