PHP code example of zbmowrey / weighted-levenshtein
1. Go to this page and download the library: Download zbmowrey/weighted-levenshtein library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
zbmowrey / weighted-levenshtein example snippets
use Zbmowrey\WeightedLevenshtein\Distance;
// Default (uniform) costs of 1.0 per operation.
echo Distance::levenshtein('kitten', 'sitting'); // 3
echo Distance::optimalStringAlignment('ca', 'ac'); // 1 (one transposition)
echo Distance::damerauLevenshtein('ab', 'bca'); // 2
use Zbmowrey\WeightedLevenshtein\CharCostMap;
use Zbmowrey\WeightedLevenshtein\Distance;
$insertCosts = CharCostMap::uniform()->withCost('D', 1.5);
echo Distance::levenshtein('BANANAS', 'BANDANAS', $insertCosts); // 1.5
use Zbmowrey\WeightedLevenshtein\CharCostMap;
use Zbmowrey\WeightedLevenshtein\CharPairCostMap;
use Zbmowrey\WeightedLevenshtein\Distance;
// --- Insertion cost ---
$insertCosts = CharCostMap::uniform()->withCost('D', 1.5);
echo Distance::levenshtein('BANANAS', 'BANDANAS', $insertCosts);
// 1.5
// --- Deletion cost ---
$deleteCosts = CharCostMap::uniform()->withCost('S', 0.5);
echo Distance::levenshtein('BANANAS', 'BANANA', $insertCosts, $deleteCosts);
// 0.5
// --- Substitution cost (asymmetric!) ---
$subs = CharPairCostMap::uniform()->withCost('H', 'B', 1.25);
echo Distance::levenshtein('HANANA', 'BANANA', null, null, $subs);
// 1.25
// The reverse direction is unweighted because we never set ('B','H').
echo Distance::levenshtein('BANANA', 'HANANA', null, null, $subs);
// 1.0
// Make the reverse direction match by setting the other ordered pair.
$subs = $subs->withCost('B', 'H', 1.25);
echo Distance::levenshtein('BANANA', 'HANANA', null, null, $subs);
// 1.25
// --- Transposition cost (Damerau-Levenshtein) ---
$transposes = CharPairCostMap::uniform()->withCost('A', 'B', 0.75);
echo Distance::damerauLevenshtein('ABNANA', 'BANANA', null, null, null, $transposes);
// 0.75
// Like substitution, transposition is also asymmetric.
echo Distance::damerauLevenshtein('BANANA', 'ABNANA', null, null, null, $transposes);
// 1.0
// Set the other direction to make it symmetric.
$transposes = $transposes->withCost('B', 'A', 0.75);
echo Distance::damerauLevenshtein('BANANA', 'ABNANA', null, null, null, $transposes);
// 0.75
use function Zbmowrey\WeightedLevenshtein\{lev, osa, dam_lev};
echo lev('kitten', 'sitting'); // 3
echo osa('ca', 'ac'); // 1
echo dam_lev('ab', 'ba'); // 1
$substitute = OcrConfusions::common()
->withCost('I', '1', 0.05) // your OCR confuses I and 1 more strongly
->withCost('1', 'I', 0.05);
use Zbmowrey\WeightedLevenshtein\Distance;
use Zbmowrey\WeightedLevenshtein\Presets\QwertyKeyboard;
$substitute = QwertyKeyboard::substituteCosts();
$transpose = QwertyKeyboard::transposeCosts();
echo Distance::damerauLevenshtein(
'helo',
'hwlo',
null,
null,
$substitute, // w is adjacent to e on the keyboard
$transpose,
);
// 0.5