OpenXE/classes/Modules/HocrParser/Finder/BoundingBoxFinder.php
2021-05-21 08:49:41 +02:00

64 lines
1.9 KiB
PHP

<?php
namespace Xentral\Modules\HocrParser\Finder;
use Xentral\Modules\HocrParser\Data\BoundingBox;
use Xentral\Modules\HocrParser\Data\BoundingBoxCollection;
class BoundingBoxFinder
{
/** @var BoundingBoxCollection $boxes */
private $boxes;
/** @var array|RelativePositionFinderFacet[] $criteria */
private $criteria;
/** @var array $currencies */
private $currencies;
/**
* @param BoundingBoxCollection $boxes
* @param array|RelativePositionFinderFacet[] $criteria
* @param array $validCurrencies
*/
public function __construct(BoundingBoxCollection $boxes, array $criteria, array $validCurrencies = [])
{
$this->boxes = $boxes;
$this->criteria = $criteria;
$this->currencies = $validCurrencies;
}
/**
* @return array
*/
public function Find()
{
$search = [];
$result = [];
// Alle Boxen finden die den jeweiligen Suchbegriff enthalten
/** @var BoundingBox $box */
foreach ($this->boxes->GetBoxes() as $box) {
foreach ($this->criteria as $searchKey => $criteria) {
$result[$searchKey] = null;
// Alle Boxen sammeln die den Vorbedingungen entsprechen
if ($criteria->MatchPreCondition($box->GetData('text'))) {
$search[$searchKey]['boxes'][] = $box;
$search[$searchKey]['criteria'] = $criteria;
}
}
}
// Schauen welche der Kandidaten die genauen Vorgaben erfüllt; der erste Treffer gewinnt
foreach ($search as $searchKey => $searchInfo) {
$criteria = $searchInfo['criteria'];
$candidates = $searchInfo['boxes'];
$result[$searchKey] = $criteria->Select($candidates, $this->boxes);
}
return $result;
}
}