Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace app\modules\nomad\models\Exports;
- class Keywords {
- private $partialIndexList = [25, 27, 29, 30, 35, 37, 39, 42, 44, 45, 76, 77, 89, 90, 120, 121, 135, 136];
- const EVENT_TYPE_SPORT = 'SPORT';
- const EVENT_TYPE_THEATER = 'THEATER';
- const EVENT_TYPE_CONCERT = 'CONCERT';
- const AD_TYPE_DEFAULT = 'default';
- const AD_TYPE_CONCERT = 'concert';
- const AD_TYPE_TOUR = 'tour';
- /**
- *
- * @param array $keywordsParams
- * @param string $eventType SPORT|THEATER|CONCERT
- * @param string $eventCategory
- * @param bool $partial
- * @param string $adBlock default|concert|tour
- * @return array
- */
- public function getKeywordsList($keywordsParams, $eventType, $eventCategory, $partial = false, $adBlock = 'default') {
- $keywordsList = [];
- $keywordsMap = $this->getKeywordsMap($adBlock, $eventType);
- foreach ($keywordsMap as $adBlock => $keywords) {
- foreach ($keywords as $index => $keyword) {
- if (in_array($index, $this->partialIndexList) && $partial) {
- continue;
- }
- foreach ($keywordsParams as $param => $value) {
- if (strpos($keyword, '+' . $param) !== false) {
- $keyword = str_replace('+' . $param, $this->addPlusForEveryWord($value), $keyword);
- } elseif (strpos($keyword, $param) !== false) {
- $keyword = str_replace($param, $value, $keyword);
- }
- }
- $keywordsList[$index] = [
- 'Criterion Type' => $adBlock,
- 'Keyword' => $keyword
- ];
- }
- }
- if ($eventType == self::EVENT_TYPE_SPORT) {
- $keywordsList = $this->prepareKeywordsList($keywordsList, $keywordsParams, $eventCategory);
- }
- $resultKeywordsList = [];
- foreach ($keywordsList as $keywords) {
- $keyword = $keywords['Keyword'];
- $keyword = strtolower(
- str_replace([" - ", ":"], [" ", ""], $keyword)
- );
- $keyword = $this->deduplicateTerms($keyword);
- if (!$this->checkKeywordsByLimits($keyword)) {
- continue;
- }
- $resultKeywordsList[md5($keywords['Criterion Type'].$keyword)] = [
- 'Criterion Type' => $keywords['Criterion Type'],
- 'Keyword' => $keyword
- ];
- }
- //$resultKeywordsList = array_map("unserialize", array_unique(array_map("serialize", $resultKeywordsList)));
- return $resultKeywordsList;
- }
- private function prepareKeywordsList(array $keywordsList, array $keywordsParams, $eventCategory) {
- $sportKeywords = $this->getAdditionalSportKeywords();
- $sportKeywordParams = $this->getSportKeywordParamsByCategory($eventCategory);
- $sportKeywordParams = array_merge($sportKeywordParams, $keywordsParams);
- foreach ($sportKeywordParams as $param => $valuesStr) {
- $values = explode(',', $valuesStr);
- $sportKeywordsQueue = [];
- foreach ($sportKeywords as $sportKeyword) {
- if (strpos($sportKeyword, $param) !== false) {
- if (empty($valuesStr)) {
- continue;
- }
- }
- foreach ($values as $value) {
- $sportKeywordsQueue[] = str_replace($param, $value, $sportKeyword);
- }
- }
- $sportKeywords = $sportKeywordsQueue;
- }
- array_map(function($key)use(&$keywordsList){
- $keywordsList[] = [
- 'Criterion Type' => 'Broad',
- 'Keyword' => $this->addPlusForEveryWord($key)
- ];
- $keywordsList[] = [
- 'Criterion Type' => 'Exact',
- 'Keyword' => $key
- ];
- }, array_unique($sportKeywords));
- return $keywordsList;
- }
- private function getKeywordsMap($adBlock, $eventType) {
- $negativeBroad = [
- self::AD_TYPE_DEFAULT => [
- 'Negative Broad' => [
- 47 => 'tour',
- 48 => 'concert'
- ]
- ],
- self::AD_TYPE_CONCERT => [
- ],
- self::AD_TYPE_TOUR => [
- ]
- ];
- $keywordsMap = [
- self::AD_TYPE_DEFAULT => [
- 'Broad' => [
- 22 => '+{EventName} +{Venue}',
- 23 => '+{EventName} +tickets +{Venue}',
- 24 => '+{EventName} +tickets',
- 25 => '+{EventName} +{City}',
- 26 => '+{EventName} +tickets +{City}',
- 27 => '+{EventName} +{State}',
- 28 => '+{EventName} +tickets +{State}',
- 29 => '+{EventName}',
- 30 => '+{EventName} +{Year}',
- 31 => '+{EventName} +{Year} +tickets'
- ],
- 'Exact' => [
- 32 => '{EventName} {Venue}',
- 33 => '{EventName} tickets {Venue}',
- 34 => '{EventName} tickets',
- 35 => '{EventName} {City}',
- 36 => '{EventName} tickets {City}',
- 37 => '{EventName} {City} {State}',
- 38 => '{EventName} tickets {City} {State}',
- 39 => '{EventName} {City} {StateAbbreviation}',
- 40 => '{EventName} tickets {City} {StateAbbreviation}',
- 41 => 'tickets {EventName}',
- 42 => '{EventName} {State}',
- 43 => '{EventName} tickets {State}',
- 44 => '{EventName}',
- 45 => '{EventName} {Year}',
- 46 => '{EventName} {Year} tickets'
- ],
- ],
- self::AD_TYPE_CONCERT => [
- 'Broad' => [
- 68 => '+{EventName} +concert +{Venue}',
- 69 => '+{EventName} +concert +tickets +{Venue}',
- 70 => '+{EventName} +concert +tickets',
- 71 => '+{EventName} +concert +{City}',
- 72 => '+{EventName} +concert +tickets +{City}',
- 73 => '+{EventName} +concert +{State}',
- 74 => '+{EventName} +concert +tickets +{State}',
- 75 => '+{EventName} +concert',
- 76 => '+{EventName} +{Year} +concert',
- 77 => '+{EventName} +{Year} +concert +tickets'
- ],
- 'Exact' => [
- 78 => '{EventName} concert',
- 79 => '{EventName} concert {Venue}',
- 80 => '{EventName} concert tickets {Venue}',
- 81 => '{EventName} concert tickets',
- 82 => '{EventName} concert {City}',
- 83 => '{EventName} concert tickets {City}',
- 84 => '{EventName} concert {City} {State}',
- 85 => '{EventName} concert tickets {City} {State}',
- 86 => '{EventName} concert {City} {StateAbbreviation}',
- 87 => '{EventName} concert tickets {City} {StateAbbreviation}',
- 88 => 'concert tickets {EventName}',
- 89 => '{EventName} {Year} concert',
- 90 => '{EventName} {Year} concert tickets'
- ],
- ],
- self::AD_TYPE_TOUR => [
- 'Broad' => [
- 110 => '+{EventName} +tour +{Venue}',
- 111 => '+{EventName} +tour +tickets +{Venue}',
- 112 => '+{EventName} +tour +tickets',
- 113 => '+{EventName} +tour +{City}',
- 114 => '+{EventName} +tour +tickets +{City}',
- 115 => '+{EventName} +tour +{State}',
- 116 => '+{EventName} +tour +tickets +{State}',
- 117 => '+{EventName} +tour',
- 118 => '+{EventName} +concert +tour',
- 119 => '+{EventName} +concert +tour +tickets',
- 120 => '+{EventName} +{Year} +tour',
- 121 => '+{EventName} +{Year} +tour +tickets'
- ],
- 'Exact' => [
- 122 => '{EventName} tour',
- 123 => '{EventName} concert tour',
- 124 => '{EventName} concert tour tickets',
- 125 => '{EventName} tour {Venue}',
- 126 => '{EventName} tour tickets {Venue}',
- 127 => '{EventName} tour tickets',
- 128 => '{EventName} tour {City}',
- 129 => '{EventName} tour tickets {City}',
- 130 => '{EventName} tour {City} {State}',
- 131 => '{EventName} tour tickets {City} {State}',
- 132 => '{EventName} tour {City} {StateAbbreviation}',
- 133 => '{EventName} tour tickets {City} {StateAbbreviation}',
- 134 => 'tour tickets {EventName}',
- 135 => '{EventName} {Year} tour',
- 136 => '{EventName} {Year} tour tickets'
- ]
- ]
- ];
- switch ($eventType) {
- case self::EVENT_TYPE_CONCERT:
- $template = array_merge($keywordsMap[$adBlock], $negativeBroad[$adBlock]);
- break;
- case self::EVENT_TYPE_SPORT:
- case self::EVENT_TYPE_THEATER:
- default:
- $template = $keywordsMap[$adBlock];
- }
- return $template;
- }
- private function getAdditionalSportKeywords() {
- $addSportKeywords = [
- '{EventName} {EventTerm} {Venue}',
- '{EventName} {SportTerm} {EventTerm} {Venue}',
- '{EventName} {LeagueTerm} {EventTerm} {Venue}',
- '{EventName} {LeagueTerm} tickets {Venue}',
- '{EventName} {SportTerm} tickets {Venue}',
- '{EventName} {LeagueTerm} tickets',
- '{EventName} {SportTerm} tickets',
- '{EventName} {EventTerm} tickets',
- '{EventName} {LeagueTerm} {SportTerm} tickets',
- '{EventName} {SportTerm} {EventTerm} tickets',
- '{EventName} {LeagueTerm} {EventTerm} tickets',
- '{EventName} {LeagueTerm} {City}',
- '{EventName} {SportTerm} {City}',
- '{EventName} {EventTerm} {City}',
- '{EventName} {LeagueTerm} {SportTerm} {City}',
- '{EventName} {SportTerm} {EventTerm} {City}',
- '{EventName} {LeagueTerm} {EventTerm} {City}',
- '{EventName} {SportTerm} tickets {City}',
- '{EventName} {EventTerm} tickets {City}',
- '{EventName} {SportTerm} {City} {State}',
- '{EventName} {EventTerm} {City} {State}',
- '{EventName} {LeagueTerm} tickets {City} {State}',
- '{EventName} {SportTerm} tickets {City} {State}',
- '{EventName} {EventTerm} tickets {City} {State}',
- '{EventName} {SportTerm} {City} {StateAbbreviation}',
- '{EventName} {EventTerm} {City} {StateAbbreviation}',
- '{EventName} {LeagueTerm} {SportTerm} {City} {StateAbbreviation}',
- '{EventName} {SportTerm} {EventTerm} {City} {StateAbbreviation}',
- '{EventName} {LeagueTerm} tickets {City} {StateAbbreviation}',
- '{EventName} {SportTerm} tickets {City} {StateAbbreviation}',
- '{EventName} {EventTerm} tickets {City} {StateAbbreviation}',
- '{LeagueTerm} {EventName} tickets',
- '{EventName} {SportTerm} tickets',
- '{EventName} {EventTerm} tickets',
- '{EventName} {LeagueTerm} {SportTerm} tickets',
- '{EventName} {LeagueTerm} {SportTerm} {EventTerm} tickets',
- '{EventName} {SportTerm} {EventTerm} tickets',
- '{EventName} {LeagueTerm} {EventTerm} tickets',
- '{EventName} {LeagueTerm}',
- '{EventName} {SportTerm}',
- '{EventName} {EventTerm}',
- '{EventName} {LeagueTerm} {SportTerm}',
- '{EventName} {LeagueTerm} {SportTerm} {EventTerm}',
- '{EventName} {SportTerm} {EventTerm}',
- '{EventName} {LeagueTerm} {EventTerm}',
- '{EventName} {Year} {LeagueTerm}',
- '{EventName} {Year} {SportTerm}',
- '{EventName} {Year} {EventTerm}',
- '{EventName} {Year} {LeagueTerm} {SportTerm}',
- '{EventName} {Year} {LeagueTerm} {SportTerm} {EventTerm}',
- '{EventName} {Year} {SportTerm} {EventTerm}',
- '{EventName} {Year} {LeagueTerm} {EventTerm}',
- '{EventName} {Year} {LeagueTerm} tickets',
- '{EventName} {Year} {SportTerm} tickets',
- '{EventName} {Year} {EventTerm} tickets',
- '{EventName} {Year} {LeagueTerm} {SportTerm} tickets',
- '{EventName} {Year} {LeagueTerm} {SportTerm} {EventTerm} tickets',
- '{EventName} {Year} {SportTerm} {EventTerm} tickets',
- '{EventName} {Year} {LeagueTerm} {EventTerm} tickets'
- ];
- return $addSportKeywords;
- }
- private function getSportKeywordParamsByCategory($category) {
- $sportKeywordVariables = $this->getSportKeywordParamVariables();
- return isset($sportKeywordVariables[$category]) ? $sportKeywordVariables[$category] : [];
- }
- private function getSportKeywordParamVariables() {
- $sportKeywordVariables = [
- 'Arena Football' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => 'Football',
- '{EventTerm}' => 'Game'
- ],
- 'Baseball' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => 'Baseball',
- '{EventTerm}' => 'Game'
- ],
- 'Basketball' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => 'Basketball,Bball',
- '{EventTerm}' => 'Game'
- ],
- 'Boxing and Fighting' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => '',
- '{EventTerm}' => ''
- ],
- 'College' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => '',
- '{EventTerm}' => ''
- ],
- 'College Baseball' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => 'Baseball',
- '{EventTerm}' => 'Game'
- ],
- 'Extreme Sports' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => '',
- '{EventTerm}' => ''
- ],
- 'Football' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => 'Football',
- '{EventTerm}' => 'Game'
- ],
- 'Gymnastics' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => 'Gymnastics',
- '{EventTerm}' => ''
- ],
- 'Hockey' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => 'Hockey',
- '{EventTerm}' => 'Game'
- ],
- 'Horse Racing' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => '',
- '{EventTerm}' => 'Race'
- ],
- 'Lacrosse' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => 'Lacrosse',
- '{EventTerm}' => 'Game,Match'
- ],
- 'Minor League Baseball' => [
- '{LeagueTerm}' => 'Baseball',
- '{SportTerm}' => '',
- '{EventTerm}' => 'Game'
- ],
- 'MLB Baseball' => [
- '{LeagueTerm}' => 'MLB',
- '{SportTerm}' => 'Baseball',
- '{EventTerm}' => 'Game'
- ],
- 'Motorsports' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => '',
- '{EventTerm}' => ''
- ],
- 'NASCAR Racing' => [
- '{LeagueTerm}' => 'NASCAR',
- '{SportTerm}' => '',
- '{EventTerm}' => 'Race'
- ],
- 'NBA Basketball' => [
- '{LeagueTerm}' => 'NBA',
- '{SportTerm}' => 'Basketball,Bball',
- '{EventTerm}' => 'Game'
- ],
- 'NCAA Basketball' => [
- '{LeagueTerm}' => 'NCAAB,NCAA',
- '{SportTerm}' => 'College Basketball,Basketball,Bball',
- '{EventTerm}' => 'Game'
- ],
- 'NCAA Football' => [
- '{LeagueTerm}' => 'NCAAF,NCAA',
- '{SportTerm}' => 'Football,College Football',
- '{EventTerm}' => 'Game'
- ],
- 'NFL Football' => [
- '{LeagueTerm}' => 'NFL',
- '{SportTerm}' => 'Football',
- '{EventTerm}' => 'Game'
- ],
- 'NHL Hockey' => [
- '{LeagueTerm}' => 'NHL',
- '{SportTerm}' => 'Hockey',
- '{EventTerm}' => 'Game'
- ],
- 'Olympics' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => '',
- '{EventTerm}' => ''
- ],
- 'Other Sports' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => '',
- '{EventTerm}' => ''
- ],
- 'PGA Golf' => [
- '{LeagueTerm}' => 'PGA',
- '{SportTerm}' => 'Golf',
- '{EventTerm}' => 'Tournament'
- ],
- 'Racing' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => '',
- '{EventTerm}' => ''
- ],
- 'Rodeo' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => 'Rodeo',
- '{EventTerm}' => ''
- ],
- 'Rugby' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => 'Rugby',
- '{EventTerm}' => 'Match'
- ],
- 'Skating' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => 'Skating',
- '{EventTerm}' => ''
- ],
- 'Soccer' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => 'Soccer',
- '{EventTerm}' => 'Game,Match'
- ],
- 'Softball' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => 'Softball',
- '{EventTerm}' => 'Game'
- ],
- 'Tennis' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => 'Tennis',
- '{EventTerm}' => 'Match,Tournament'
- ],
- 'Volleyball' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => 'Volleyball',
- '{EventTerm}' => 'Game'
- ],
- 'Wrestling' => [
- '{LeagueTerm}' => '',
- '{SportTerm}' => 'Wrestling',
- '{EventTerm}' => 'Match'
- ]
- ];
- return $sportKeywordVariables;
- }
- public function addPlusForEveryWord($text) {
- return '+' . str_replace([' ', ' +-'], [' +', ' -'], $text);
- }
- private function deduplicateTerms($text) {
- $textAr = explode(" ", $text);
- $textAr = array_unique($textAr);
- $text = implode(" ", $textAr);
- return $text;
- }
- private function checkKeywordsByLimits($keywords, $charactersLimit = 80, $wordsLimit = 10) {
- if (!empty($keywords)) {
- if (strlen($keywords) > $charactersLimit || substr_count($keywords, ' ') > $wordsLimit - 1) {
- return false;
- }
- }
- return true;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement