php-science/pagerank

严格的类型 OOP PageRank 实现。

1.0.1 2020-09-20 13:56 UTC

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());

功能示例