-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
60 changed files
with
12,525 additions
and
973 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,42 +1,44 @@ | ||
<?php | ||
|
||
require_once(dirname(__FILE__) . '/../interfaces/DataSet.interface.php'); | ||
require_once(dirname(__FILE__) . '/GenericDataSet.class.php'); | ||
|
||
class FileDataSet implements DataSet { | ||
private $_dataSet; | ||
|
||
public function __construct($file) { | ||
$fh = fopen($file, 'rb'); | ||
if (!$fh) throw new RuntimeException('Could not open file'); | ||
|
||
$builder = new GenericDataSetBuilder(); | ||
|
||
// add each line at a time to builder | ||
// (using a builder as GenericDataSet is immutable) | ||
while (!feof($fh) && $line = fgets($fh)) { | ||
list($userId, $itemId, $rating) = explode("\t", $line); | ||
|
||
$builder->loadLine($userId, $itemId, $rating); | ||
} | ||
|
||
fclose($fh); | ||
|
||
$this->_dataSet = $builder->build(); | ||
} | ||
|
||
public function getUserIds() { return $this->_dataSet->getUserIds(); } | ||
public function getItemIds() { return $this->_dataSet->getItemIds(); } | ||
|
||
public function getNumUsers() { return $this->_dataSet->getNumUsers(); } | ||
public function getNumItems() { return $this->_dataSet->getNumItems(); } | ||
|
||
public function isUser($userId) { return $this->_dataSet->isUser($userId); } | ||
public function isItem($itemId) { return $this->_dataSet->isItem($itemId); } | ||
|
||
public function getUser($userId) { return $this->_dataSet->getUser($userId); } | ||
public function getItem($itemId) { return $this->_dataSet->getItem($itemId); } | ||
|
||
public function getUserRatingsArray($user) { return $this->_dataSet->getUserRatingsArray($user); } | ||
public function getItemRatingsArray($item) { return $this->_dataSet->getItemRatingsArray($item); } | ||
<?php | ||
|
||
require_once(dirname(__FILE__) . '/../Interfaces/DataSet.interface.php'); | ||
require_once(dirname(__FILE__) . '/GenericDataSet.class.php'); | ||
|
||
class FileDataSet implements DataSet { | ||
protected $_dataSet; | ||
|
||
public function __construct($file, $ratingRange) { | ||
$fh = fopen($file, 'rb'); | ||
if (!$fh) throw new RuntimeException('Could not open file'); | ||
|
||
$builder = new GenericDataSetBuilder($ratingRange); | ||
|
||
// add each line at a time to builder | ||
// (using a builder as GenericDataSet is immutable) | ||
while (!feof($fh) && $line = fgets($fh)) { | ||
list($userId, $itemId, $rating) = explode("\t", $line); | ||
|
||
$builder->loadLine($userId, $itemId, $rating); | ||
} | ||
|
||
fclose($fh); | ||
$this->_dataSet = $builder->build(); | ||
} | ||
|
||
public function getUserIds() { return $this->_dataSet->getUserIds(); } | ||
public function getItemIds() { return $this->_dataSet->getItemIds(); } | ||
|
||
public function getNumUsers() { return $this->_dataSet->getNumUsers(); } | ||
public function getNumItems() { return $this->_dataSet->getNumItems(); } | ||
|
||
public function isUser($userId) { return $this->_dataSet->isUser($userId); } | ||
public function isItem($itemId) { return $this->_dataSet->isItem($itemId); } | ||
|
||
public function getUser($userId) { return $this->_dataSet->getUser($userId); } | ||
public function getItem($itemId) { return $this->_dataSet->getItem($itemId); } | ||
|
||
public function getUserRatingsArray($user) { return $this->_dataSet->getUserRatingsArray($user); } | ||
public function getItemRatingsArray($item) { return $this->_dataSet->getItemRatingsArray($item); } | ||
|
||
public function getRatingMin() { return $this->_dataSet->getRatingMin(); } | ||
public function getRatingMax() { return $this->_dataSet->getRatingMax(); } | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,121 +1,150 @@ | ||
<?php | ||
|
||
require_once(dirname(__FILE__) . '/../interfaces/DataSet.interface.php'); | ||
require_once(dirname(__FILE__) . '/../Model/User.class.php'); | ||
require_once(dirname(__FILE__) . '/../Model/Item.class.php'); | ||
|
||
final class GenericDataSet implements DataSet { | ||
// $_users['userId']['itemId'] = rating (integer) | ||
// $_items['itemId']['userId'] = rating (integer) | ||
private $_users; | ||
private $_items; | ||
|
||
private $_userNum; | ||
private $_itemNum; | ||
|
||
public function __construct($users, $items) { | ||
if (!is_array($users) || !is_array($items)) | ||
throw new InvalidArgumentException(); | ||
|
||
$this->_users = &$users; | ||
$this->_items = &$items; | ||
|
||
$this->_userNum = count($users); | ||
$this->_itemNum = count($items); | ||
} | ||
|
||
public function getUserIds() { return array_keys($this->_users); } | ||
public function getItemIds() { return array_keys($this->_items); } | ||
|
||
public function getNumUsers() { return $this->_userNum; } | ||
public function getNumItems() { return $this->_itemNum; } | ||
|
||
public function isUser($userId) { return isset($this->_users[$userId]); } | ||
public function isItem($itemId) { return isset($this->_items[$itemId]); } | ||
|
||
public function getUser($userId) { | ||
if (!isset($this->_users[$userId])) | ||
throw new InvalidArgumentException(); | ||
|
||
return new User($userId, $this->_users[$userId]); | ||
} | ||
|
||
public function getItem($itemId) { | ||
if (!isset($this->_items[$itemId])) | ||
throw new InvalidArgumentException(); | ||
|
||
return new Item($itemId, $this->_items[$itemId]); | ||
} | ||
|
||
public function getUserRatingsArray($user) { | ||
if (is_object($user)) { | ||
if (!($user instanceof User)) | ||
throw new InvalidArgumentException('Not instance of User'); | ||
|
||
$user = $user->getId(); | ||
} | ||
|
||
if (!isset($this->_users[$user])) | ||
throw new InvalidArgumentException('Invalid user ID'); | ||
|
||
return $this->_users[$user]; | ||
} | ||
|
||
public function getItemRatingsArray($item) { | ||
if (is_object($item)) { | ||
if (!($user instanceof Item)) | ||
throw new InvalidArgumentException('Not instance of Item'); | ||
|
||
$item = $item->getId(); | ||
} | ||
|
||
if (!isset($this->_items[$item])) | ||
throw new InvalidArgumentException('Invalid item ID'); | ||
|
||
return $this->_items[$item]; | ||
} | ||
} | ||
|
||
class GenericDataSetBuilder { | ||
// $_users['userId']['itemId'] = rating (integer) | ||
// $_items['itemId']['userId'] = rating (integer) | ||
private $_users; | ||
private $_items; | ||
|
||
private $_built; | ||
|
||
public function __construct() { | ||
$this->_users = array(); | ||
$this->_items = array(); | ||
|
||
$this->_built = false; | ||
} | ||
|
||
public function build() { | ||
if ($this->_built) return; | ||
|
||
$dataSet = new GenericDataSet($this->_users, $this->_items); | ||
|
||
unset($this->_users); | ||
unset($this->_items); | ||
|
||
$this->_built = true; | ||
return $dataSet; | ||
} | ||
|
||
public function loadLine($userId, $itemId, $rating) { | ||
if ($this->_built) return; | ||
|
||
// user array | ||
if (isset($this->_users[$userId])) | ||
$this->_users[$userId][$itemId] = $rating; | ||
else | ||
$this->_users[$userId] = array($itemId => $rating); | ||
|
||
// item array | ||
if (isset($this->_items[$itemId])) | ||
$this->_items[$itemId][$userId] = $rating; | ||
else | ||
$this->_items[$itemId] = array($userId => $rating); | ||
} | ||
<?php | ||
|
||
require_once(dirname(__FILE__) . '/../Interfaces/DataSet.interface.php'); | ||
require_once(dirname(__FILE__) . '/../Model/User.class.php'); | ||
require_once(dirname(__FILE__) . '/../Model/Item.class.php'); | ||
|
||
class GenericDataSet implements DataSet { | ||
// $_users['userId']['itemId'] = rating (integer) | ||
// $_items['itemId']['userId'] = rating (integer) | ||
private $_users; | ||
private $_items; | ||
|
||
private $_userNum; | ||
private $_itemNum; | ||
|
||
private $_ratingMin; | ||
private $_ratingMax; | ||
|
||
// $rating_range = array(start_value, end_value) e.g array(1,5) | ||
public function __construct($users, $items, $rating_range) { | ||
if (!is_array($users) || !is_array($items)) | ||
throw new InvalidArgumentException(); | ||
|
||
if (!is_array($rating_range) || count($rating_range) != 2 | ||
|| !is_numeric($rating_range[0]) || !is_numeric($rating_range[1]) | ||
|| $rating_range[0] > $rating_range[1]) | ||
throw new InvalidArgumentException(); | ||
|
||
$this->_users = &$users; | ||
$this->_items = &$items; | ||
|
||
$this->_userNum = count($users); | ||
$this->_itemNum = count($items); | ||
|
||
$this->_ratingMin = $rating_range[0]; | ||
$this->_ratingMax = $rating_range[1]; | ||
} | ||
|
||
public function getUserIds() { return array_keys($this->_users); } | ||
public function getItemIds() { return array_keys($this->_items); } | ||
|
||
public function getNumUsers() { return $this->_userNum; } | ||
public function getNumItems() { return $this->_itemNum; } | ||
|
||
public function isUser($userId) { return isset($this->_users[$userId]); } | ||
public function isItem($itemId) { return isset($this->_items[$itemId]); } | ||
|
||
public function getUser($userId) { | ||
if (!isset($this->_users[$userId])) | ||
throw new InvalidArgumentException(); | ||
|
||
return new User($userId, $this->_users[$userId]); | ||
} | ||
|
||
public function getItem($itemId) { | ||
if (!isset($this->_items[$itemId])) | ||
throw new InvalidArgumentException(); | ||
|
||
return new Item($itemId, $this->_items[$itemId]); | ||
} | ||
|
||
public function getUserRatingsArray($user) { | ||
if (is_object($user)) { | ||
if (!($user instanceof User)) | ||
throw new InvalidArgumentException('Not instance of User'); | ||
|
||
$user = $user->getId(); | ||
} | ||
|
||
if (!isset($this->_users[$user])) | ||
throw new InvalidArgumentException('Invalid user ID'); | ||
|
||
return $this->_users[$user]; | ||
} | ||
|
||
public function getItemRatingsArray($item) { | ||
if (is_object($item)) { | ||
if (!($item instanceof Item)) | ||
throw new InvalidArgumentException('Not instance of Item'); | ||
|
||
$item = $item->getId(); | ||
} | ||
|
||
if (!isset($this->_items[$item])) | ||
throw new InvalidArgumentException('Invalid item ID'); | ||
|
||
return $this->_items[$item]; | ||
} | ||
|
||
public function getRatingMin() { return $this->_ratingMin; } | ||
public function getRatingMax() { return $this->_ratingMax; } | ||
} | ||
|
||
class GenericDataSetBuilder { | ||
// $_users['userId']['itemId'] = rating (integer) | ||
// $_items['itemId']['userId'] = rating (integer) | ||
private $_users; | ||
private $_items; | ||
|
||
private $_range; | ||
private $_built; | ||
|
||
public function __construct($range) { | ||
$this->_users = array(); | ||
$this->_items = array(); | ||
|
||
$this->_range = $range; | ||
$this->_built = false; | ||
} | ||
|
||
public function build() { | ||
if ($this->_built) return; | ||
|
||
$dataSet = new GenericDataSet($this->_users, $this->_items, $this->_range); | ||
|
||
unset($this->_users); | ||
unset($this->_items); | ||
|
||
$this->_built = true; | ||
return $dataSet; | ||
} | ||
|
||
public function getParams() { | ||
return array($this->_users, $this->_items, $this->_range); | ||
} | ||
|
||
public function loadLine($userId, $itemId, $rating) { | ||
if ($this->_built) return; | ||
|
||
// user array | ||
if ($userId != null) { | ||
if (isset($this->_users[$userId])) | ||
$this->_users[$userId][$itemId] = $rating; | ||
elseif ($itemId == null) | ||
$this->_users[$userId] = array(); | ||
else | ||
$this->_users[$userId] = array($itemId => $rating); | ||
} | ||
|
||
// item array | ||
if ($itemId != null) { | ||
if (isset($this->_items[$itemId])) | ||
$this->_items[$itemId][$userId] = $rating; | ||
elseif ($userId == null) | ||
$this->_items[$itemId] = array(); | ||
else | ||
$this->_items[$itemId] = array($userId => $rating); | ||
} | ||
} | ||
} |
Oops, something went wrong.