3. просмотреть под катом 4. добавить в избранное Нужно решить, что самое важное в этих действия, а что нет. Зачем? Например, если пользователь просматривал, можно ему в след. раз напомнить эту статью. Если он проголосовал, то нету смысла уже её рекомендовать он сделал своё дело. Также эти все рекомендации берутся и у других пользователей, кто делаем максимум похожих действия и находит у пользователя (про которого мы сейчас говорим) самые жирные статьи, например, где на них все голосовали (значит там есть что-то интересное, если голосуют). Максимум действия это 100%, можно их разбить по важности: 1. голосовать 50% 2. просматривать 10% 3. просмотреть под катом 20% 4. добавить в избранное 20% */ //включаем класс с функциями require './OpenSlopeOne.php'; //создаем класс $openslopeone = new OpenSlopeOne(); //инициализируем таблицу `oso_slope_one` $openslopeone->initSlopeOneTable(); $openslopeone->initSlopeOneTable('MySQL'); ?> <html> <head> <title>Test</title> </head> <body> <!-- Пользователь может сделать 4 действия и его вес важности в скобках --> <a href='http://demo.ms.dp.ua/analytics/index.php?action=1'>1 action (50%)</a> <br/> <a href='http://demo.ms.dp.ua/analytics/index.php?action=2'>2 action (20%)</a>
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; } } } } }