Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
80.00% |
4 / 5 |
CRAP | |
94.74% |
18 / 19 |
| Classifier | |
0.00% |
0 / 1 |
|
83.33% |
5 / 6 |
9.01 | |
94.74% |
18 / 19 |
| is($category, $document) | |
100.00% |
1 / 1 |
2 | |
100.00% |
7 / 7 |
|||
| prepareModel() | |
100.00% |
1 / 1 |
1 | ||||||
| preparedModel() | |
100.00% |
1 / 1 |
2 | |
100.00% |
4 / 4 |
|||
| applyTransform($transform) | |
0.00% |
0 / 1 |
2.06 | |
75.00% |
3 / 4 |
|||
| setModel(ModelInterface $model) | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| setDataSource(DataSourceInterface $dataSource) | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| <?php | |
| /** | |
| * This file is part of the Statistical Classifier package. | |
| * | |
| * (c) Cam Spiers <camspiers@gmail.com> | |
| * | |
| * For the full copyright and license information, please view the LICENSE | |
| * file that was distributed with this source code. | |
| */ | |
| namespace Camspiers\StatisticalClassifier\Classifier; | |
| use Camspiers\StatisticalClassifier\DataSource\DataSourceInterface; | |
| use Camspiers\StatisticalClassifier\Model\ModelInterface; | |
| use RuntimeException; | |
| /** | |
| * A generic classifier which can be used to built a classifier given a number of injected components | |
| * @author Cam Spiers <camspiers@gmail.com> | |
| * @package Statistical Classifier | |
| */ | |
| abstract class Classifier implements ClassifierInterface | |
| { | |
| /** | |
| * @var \Camspiers\StatisticalClassifier\DataSource\DataSourceInterface | |
| */ | |
| protected $dataSource; | |
| /** | |
| * The model to apply the transforms to | |
| * @var \Camspiers\StatisticalClassifier\Model\ModelInterface | |
| */ | |
| protected $model; | |
| /** | |
| * @inheritdoc | |
| */ | |
| public function is($category, $document) | |
| { | |
| if ($this->dataSource->hasCategory($category)) { | |
| return $this->classify($document) === $category; | |
| } else { | |
| throw new RuntimeException( | |
| sprintf( | |
| "The category '%s' doesn't exist", | |
| $category | |
| ) | |
| ); | |
| } | |
| } | |
| /** | |
| * Builds the model from the data source by applying transforms to the data source | |
| * @return null | |
| */ | |
| abstract public function prepareModel(); | |
| /** | |
| * Return an model which has been prepared for classification | |
| * @return \Camspiers\StatisticalClassifier\Model\ModelInterface | |
| */ | |
| protected function preparedModel() | |
| { | |
| if (!$this->model->isPrepared()) { | |
| $this->prepareModel(); | |
| } | |
| return $this->model; | |
| } | |
| /** | |
| * Take a callable and run it passing in any additionally specified arguments | |
| * @param callable $transform | |
| * @throws \RuntimeException | |
| * @return mixed | |
| */ | |
| protected function applyTransform($transform) | |
| { | |
| if (is_callable($transform)) { | |
| return call_user_func_array($transform, array_slice(func_get_args(), 1)); | |
| } else { | |
| throw new RuntimeException("Argument to applyTransform must be callable"); | |
| } | |
| } | |
| /** | |
| * @param \Camspiers\StatisticalClassifier\Model\ModelInterface $model | |
| */ | |
| public function setModel(ModelInterface $model) | |
| { | |
| $this->model = $model; | |
| } | |
| /** | |
| * @param \Camspiers\StatisticalClassifier\DataSource\DataSourceInterface $dataSource | |
| */ | |
| public function setDataSource(DataSourceInterface $dataSource) | |
| { | |
| $this->dataSource = $dataSource; | |
| } | |
| } |