Skip to content

Instantly share code, notes, and snippets.

@edwinheij
Created December 1, 2014 15:06
Show Gist options
  • Save edwinheij/1b0bcd91b62d8a66730f to your computer and use it in GitHub Desktop.
Save edwinheij/1b0bcd91b62d8a66730f to your computer and use it in GitHub Desktop.
Levenshtein
<?php
Route::get('lev', function()
{
$a = [ 'Rotterdam', 'Capelle a/d IJssel', 'Nieuwerkerk a/d IJssel', 'Maassluis', 'Schiedam', '\'s Gravenhage', 'Vlaardingen'];
// $b = 'niewekek IJssel'; // match
// $b = 'niewkek IJssel'; // geen match
// $b = 'Capelle a/d IJssel'; // match
// $b = 'capelle ijssel'; // match
// $b = 'gravenh'; // geen match
// $b = 'gravenhe'; // match
// $b = 'gravenha'; // match
// $b = 'vlrdinen'; // match
// $b = 'vqrdinen'; // geen match
$b = 'vardinen'; // match
// $b = 'nieuwker aan den ijssel'; // match
// $b = 'nieuwke aan den ijssel'; // geen match
$maximaalAantalAfwijkingen = 3;
if ($plaats = bedoeldeJeDit($a, $b, $maximaalAantalAfwijkingen)) {
echo $plaats;
} else {
echo 'Geen matches gevonden voor: '. $b;
}
});
function bedoeldeJeDit(array $mogelijkheden, $string = '', $maxAantalAfwijkingen = 3)
{
foreach ($mogelijkheden as $mogelijkheid)
{
// "oefenweb/damerau-levenshtein": "dev-master"
$lev = new DamerauLevenshtein(bedoeldeJeDitString($string), bedoeldeJeDitString($mogelijkheid));
if ($lev->getSimilarity() <= $maxAantalAfwijkingen) return $mogelijkheid;
}
return false;
}
function bedoeldeJeDitString($string)
{
return str_replace(
array(
'a/d ',
'aan den ',
'\'s'
),
'',
strtolower(trim($string))
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment