コード例 #1
0
ファイル: index.php プロジェクト: ateliee/php_lib
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>
コード例 #2
0
 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;
             }
         }
     }
 }
コード例 #3
0
 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;
                 }
             }
         }
     }
 }