php-extended / php-merge-object
php-merge-interface 库的实现
7.0.6
2024-07-31 13:38 UTC
Requires
- php: >=8.0
- php-extended/php-information-object: ^18
- php-extended/php-merge-interface: ^7
Requires (Dev)
- dev-master
- 7.0.6
- 7.0.5
- 7.0.4
- 7.0.3
- 7.0.2
- 7.0.1
- 7.0.0
- 6.1.4
- 6.1.3
- 6.1.2
- 6.1.1
- 6.1.0
- 6.0.3
- 6.0.2
- 6.0.1
- 6.0.0
- 5.0.1
- 5.0.0
- 4.0.1
- 4.0.0
- 3.2.20
- 3.2.19
- 3.2.18
- 3.2.17
- 3.2.16
- 3.2.15
- 3.2.14
- 3.2.13
- 3.2.12
- 3.2.11
- 3.2.10
- 3.2.9
- 3.2.8
- 3.2.7
- 3.2.6
- 3.2.5
- 3.2.4
- 3.2.3
- 3.2.2
- 3.2.1
- 3.2.0
- 3.1.3
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 2.0.0
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
This package is auto-updated.
Last update: 2024-08-31 11:51:48 UTC
README
php-merge-interface 库的实现。
安装
此库的安装是通过 composer 进行的,所有类的自动加载都是通过它们的自动加载器完成的。
- 从他们的网站下载
composer.phar
。 - 然后运行以下命令将此库作为依赖项安装:
php composer.phar php-extended/php-merge-object ^7
基本用法
此库可以按以下方式使用
- 第一步:计算任何数据提供者的分数(此分数可以解释为该数据提供者针对给定类型数据的准确度)
use PhpExtended\Merge\Scorer;
use PhpExtended\Merge\ScoreCalculationDefinitionList;
/* @var $source \PhpExtended\Record\RecordProviderInterface */
/* @var $srcNamespace string */
/* @var $srcClassname string */
/* @var $challenger \PhpExtended\Record\AssignableRecordProviderInterface */
/* @var $chlNamespace string */
/* @var $chlClassname string */
/* @var $scoreCollectionFactory \PhpExtended\Score\ScoreCollectionFactoryInterface */
/* @var $scoreFactory \PhpExtended\Score\ScoreFactory */
/* @var $scorePolicyFactory \PhpExtended\Score\ScorePolicyFactoryInterface */
$scoreCalculationDefinitionList = new ScoreCalculationDefinitionList();
foreach(['srcAttr1' => 'dstAttr1', 'srcAttr2' => 'dstAttr2'] as $srcAttr => $dstAttr)
{
$scoreCalculationDefinition = new ScoreCalculationDefinition(
$srcAttr,
$dstAttr,
$scoreCollectionFactory,
$scoreFactory, /* the score factory may differ for each field name, but not needed every time */
$scorePolicyFactory
);
$scoreCalculationDefinitionList->append($scoreCalculationDefinition);
}
$scorer = new Scorer();
$results = $scorer->calculateScore($source, $srcNamespace, $srcClassname, $challenger, $chlNamespace, $chlClassname, $scoreCaculationDefinitionList);
foreach($results as $result)
{
/* @var $result \PhpExtended\Merge\ScoreResultInterface */
// get namespace, classname, fieldname and score
// for each $chlNamespace, $chlClassname and $dstAttr
}
- 第二步:将给定数据提供者的记录(逐条记录)分配给另一个源记录提供者。最佳匹配由比较器提供,该比较器应通过测量两个记录之间的距离来给出记录的完美排序。
use PhpExtended\Merge\Assigner;
/* @var $source \PhpExtended\Record\RecordProviderInterface */
/* @var $srcNamespace string */
/* @var $srcClassname string */
/* @var $challenger \PhpExtended\Record\AssignableRecordProviderInterface */
/* @var $chlNamespace string */
/* @var $chlClassname string */
/* @var $comparator \PhpExtended\Record\CompatorInterface */
$assigner = new Assigner();
$assignments = $assigner->doAssignments($source, $srcNamespace, $srcClassname, $challenger, $chlNamespace, $chlClassname, $comparator);
// returns the number of records that were effectively assigned
- 第三步:通过向主记录提供个别信息来更改主记录,将分配的记录值合并到主记录中。请注意,此方法不会仅从挑战者源创建不存在的记录,它必须通过另一个程序创建。
use PhpExtended\Merge\Merger;
/* @var $source \PhpExtended\Record\RecordProviderInterface */
/* @var $srcNamespace string */
/* @var $srcClassname string */
/* @var $challengerList \PhpExtended\Record\AssignableRecordProviderListInterface */
// note that the challenger list must be created with all the available challengers
// to avoid at most the unsolvable elections
/* @var $chlNamespace string */
/* @var $chlClassname string */
// warning : the challengers should be normalized (via an interface if possible)
/* @var $votingMethodFactory \PhpExtended\Vote\VotingMethodFactoryInterface */
/* @var $citizenFactory \PhpExtended\Vote\CitizenFactoryInterface */
/* @var $candidateFactory \PhpExtended\Vote\CandidateFactoryInterface */
/* @var $argumentFactory \PhpExtended\Vote\ArgumentFactoryInterface */
/* @var $biasFactory \PhpExtended\Vote\BiasFactoryInterface */
/* @var $electionRunnerFactory \PhpExtended\Vote\ElectionRunnerFactoryInterface */
$mergeCalculationDefintitionList = new MergeCalculationDefinitionList();
foreach(['srcAttr1' => 'dstAttr1', 'srcAttr2' => 'dstAttr2'] as $srcAttr => $dstAttr)
{
$mergeCalculationDefinition = new MergeCalculationDefinition(
$srcAttr,
$dstAttr, // warning, should be the same for each challenger in the list
$votingMethodFactory,
$citizenFactory, // warning, should be the same for each challenger in the list
$candidateFactory,
$argumentFactory,
$biasFactory, // warning, should be the same for each challenger in the list
$electionRunnerFactory
);
$mergeCalculationDefinitionList->append($mergeCalculationDefinition);
}
$merger = new Merger();
$informations = $merger->doMerge($source, $srcNamespace, $srcClassname, $challengerList, $chlNamespace, $chlClassname, $mergeCalculationDefinitionList);
foreach($informations as $information)
{
/* @var $information \PhpExtended\Information\InformationInterface */
// get the $srcNamespace, $srcClassname, $sourceId and $srcFieldName
// alongside with the $value
}
许可
MIT (见 许可文件).