<?php
namespace Fuse\Search\Bitap;
use function Fuse\Core\config;
function computeScore(string $pattern, array $options = [])
{
$errors = $options['errors'] ?? 0;
$currentLocation = $options['currentLocation'] ?? 0;
$expectedLocation = $options['expectedLocation'] ?? 0;
$distance = $options['distance'] ?? config('distance');
$ignoreLocation = $options['ignoreLocation'] ?? config('ignoreLocation');
$accuracy = $errors / mb_strlen($pattern);
if ($ignoreLocation) {
return $accuracy;
}
$proximity = abs($expectedLocation - $currentLocation);
if (!$distance) {
// Dodge divide by zero error.
return $proximity ? 1.0 : $accuracy;
}
return $accuracy + $proximity / $distance;
}
|