php-extended/php-merge-object

php-merge-interface 库的实现

7.0.6 2024-07-31 13:38 UTC

README

php-merge-interface 库的实现。

coverage build status

安装

此库的安装是通过 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 (见 许可文件).