Advertisement
Ra1ski

Untitled

Oct 8th, 2014
465
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.72 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('.$stopWordsPattern.')\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.         if($prefix)
  47.             $keywords = $prefix.$separator.$keywords;
  48.    
  49.         // Применяем регистр
  50.         $cases = [
  51.             MB_CASE_LOWER,
  52.             MB_CASE_TITLE,
  53.             MB_CASE_UPPER
  54.         ];
  55.  
  56.         $wordCase = (in_array($wordCase, $cases)) ? : MB_CASE_LOWER;
  57.  
  58.         return mb_convert_case($keywords, $wordCase, 'UTF-8');
  59.  
  60.     /*
  61.         // Применяем регистр
  62.         switch ($wordCase) {
  63.             case 'upperAll':
  64.                 $keywords = mb_convert_case($keywords, MB_CASE_UPPER, 'UTF-8');
  65.                 break;
  66.             case 'upperFirst':
  67.                 $keywords = mb_convert_case($keywords, MB_CASE_TITLE, 'UTF-8');
  68.                 break;
  69.             case 'lowerAll':
  70.             default:
  71.                 $keywords = mb_convert_case($keywords, MB_CASE_LOWER, 'UTF-8');
  72.                 break;
  73.         }
  74.  
  75.         return $keywords;
  76.     */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement