public function makeCombineRecList($keywords) { $weightArray = array(); if ($this->name == KEY_LINK_JACCARD) { $expand_keywords = KeywordRecommender::fetch_expand_key($keywords); foreach ($expand_keywords as $expand_key) { $expand_weight = KeywordRecommender::fetch_product_weight($expand_key); foreach ($expand_weight as $p_name => $p_weight) { if (isset($weightArray[$p_name])) { $weightArray[$p_name] += $p_weight; } else { $weightArray[$p_name] = $p_weight; } } } if (count($weightArray) < 20) { $weightArray = $weightArray + $this->addHotList(); } arsort($weightArray); return $weightArray; } else { if ($this->name == KEY_COL_SLOPEONE) { if ($this->lock == false) { $this->loadUserItem(); } $this->lock = true; $keywords = array_unique(explode(' ', $keywords)); $openslopeone = new OpenSlopeOne(); foreach ($keywords as $key) { if (key_exists($key, $this->user)) { $weightArrayTemp = $openslopeone->getRecommendedItemsByUser($this->user[$key]); if ($weightArrayTemp != NULL) { foreach ($weightArrayTemp as $p_name => $p_weight) { if (isset($weightArray[$this->item[$p_name]])) { $weightArray[$this->item[$p_name]] += $p_weight; } else { $weightArray[$this->item[$p_name]] = $p_weight; } } } } } arsort($weightArray); return $weightArray; } else { if (!get_magic_quotes_gpc()) { $keywords = addslashes($keywords); $keywords = array_unique(explode(' ', $keywords)); foreach ($keywords as $key) { $product_temp = KeywordRecommender::fetch_product_weight($key); foreach ($product_temp as $p_name => $p_weight) { if (isset($weightArray[$p_name])) { $weightArray[$p_name] += $p_weight; } else { $weightArray[$p_name] = $p_weight; } } } if (count($weightArray) < 20) { $weightArray = $weightArray + $this->addHotList(); } arsort($weightArray); return $weightArray; } } } }
private function __recommend($mode, $keywords, $queryId) { $weightArray = array(); if ($mode == KEY_NO_EXPANSION) { if (!get_magic_quotes_gpc()) { $keywords = addslashes($keywords); $keywords = array_unique(explode(' ', $keywords)); foreach ($keywords as $key) { $product_temp = KeywordRecommender::fetch_product_weight($key); foreach ($product_temp as $p_name => $p_weight) { if (isset($weightArray[$p_name])) { $weightArray[$p_name] += $p_weight; } else { $weightArray[$p_name] = $p_weight; } } } return $weightArray; } } else { if ($mode == KEY_LINK_JACCARD) { $expand_keywords = KeywordRecommender::fetch_expand_key($keywords); foreach ($expand_keywords as $expand_key) { $expand_weight = KeywordRecommender::fetch_product_weight($expand_key); foreach ($expand_weight as $p_name => $p_weight) { if (isset($weightArray[$p_name])) { $weightArray[$p_name] += $p_weight; } else { $weightArray[$p_name] = $p_weight; } } } return $weightArray; } else { if ($mode == KEY_LINK_COSINE) { $keywords = array_unique(explode(' ', $keywords)); $expand_keywords = array(); foreach ($keywords as $key) { $expand_results = $this->dm->query("select keyword_expand from keyword_cosine_link where keyword = '{$key}'"); while ($expand_row = mysql_fetch_array($expand_results)) { if (!in_array($expand_row[0], $keywords)) { $expand_keywords[] = $expand_row[0]; } } } $expand_keywords = array_unique($expand_keywords); foreach ($expand_keywords as $expand_key) { $expand_weight = $this->fetch_product_weight($expand_key); foreach ($expand_weight as $p_name => $p_weight) { if (isset($weightArray[$p_name])) { $weightArray[$p_name] += $p_weight; } else { $weightArray[$p_name] = $p_weight; } } } return $weightArray; } else { if ($mode == KEY_COL_SLOPEONE) { if ($this->lock == false) { $this->loadUserItem(); } $this->lock = true; $keywords = array_unique(explode(' ', $keywords)); $openslopeone = new OpenSlopeOne(); foreach ($keywords as $key) { if (key_exists($key, $this->user)) { $weightArrayTemp = $openslopeone->getRecommendedItemsByUser($this->user[$key]); if ($weightArrayTemp != NULL) { foreach ($weightArrayTemp as $p_name => $p_weight) { if (isset($weightArray[$this->item[$p_name]])) { $weightArray[$this->item[$p_name]] += $p_weight; } else { $weightArray[$this->item[$p_name]] = $p_weight; } } } } } return $weightArray; } } } } }