php-science / pagerank
严格的类型 OOP PageRank 实现。
1.0.1
2020-09-20 13:56 UTC
Requires
- php: 7.4.*
Requires (Dev)
- phpunit/phpunit: ^9
This package is auto-updated.
Last update: 2024-08-25 03:42:09 UTC
README
PageRank
此源代码是 PageRank 算法的 OOP 实现。
关于
此实现基于 Larry Page 的 PageRank 算法。它为图中的节点之间的连接赋予权重。在理论上,节点可以是网站、单词、人等。随着节点数量的增加,算法会变慢。为了扩展规模并处理数百万个节点,计算精度可能会有限,并且可以通过实现中的 OOP 策略模式分批调度长时间的计算。
工作流程
- 它计算初始排名值。在第一次迭代中,所有节点具有相同的排名。
- 使用幂方法/迭代技术反复迭代节点,直到达到最大迭代次数。
- 然而,即使最大迭代次数没有达到限制,一旦排名足够准确,迭代就会停止。
- 准确性是通过 float epsilon 常数来衡量的。
- 最后,算法将排名标准化在 0 到 1 之间,然后将其缩放到 1 到 10 之间。缩放范围是可以配置的。
- 从资源获取、设置和更新节点是 NodeDataSourceStrategyInterface 的责任。
- 该包提供了一个简单的 NodeDataSourceStrategyInterface 实现,它只在内存中保留节点。另一种实现 NodeDataSourceStrategyInterface 的方法可以是使用 ORM 处理节点集合的简单类。
安装
composer require php-science/pagerank
示例
$dataSource = $this->getYourDataSource(); $nodeBuilder = new NodeBuilder(); $nodeCollectionBuilder = new NodeCollectionBuilder(); $strategy = new MemorySourceStrategy( $nodeBuilder, $nodeCollectionBuilder, $dataSource ); $rankComparator = new RankComparator(); $ranking = new Ranking( $rankComparator, $strategy ); $normalizer = new Normalizer(); $pageRankAlgorithm = new PageRankAlgorithm( $ranking, $strategy, $normalizer ); $maxIteration = 100; $nodeCollection = $pageRankAlgorithm->run($maxIteration); var_dump($nodeCollection->getNodes());
功能示例
- 测试: 功能测试用例
- 运行测试:
composer test