Ik denk dat je beter woord voor woord een percentage kunt ontwikkelen en deze te vergelijken met een quotum (75% o.i.d.). Groter als 75% -> vervangen. Nadeel is echter dat woorden als 'is' en 'ik' 50% verschillen, terwijl 'test' en 'tast' maar voor 75% scheelt. Een quotum aan de hand van het aantal letters is dus beter te doen.
Voorbeeldje van wat je ongeveer zou kunnen doen:
<?php
$tekst = 'Dit is een tekst, met een tets woord test erin!';
function fuzzy_replace($search, $replacement, $text, $threshold)
{
$words = explode(" ", $text); // zou iets intelligenters moeten zijn met bijv preg_split, dat ook leestekens loshaalt
foreach ($words as &$word)
if (levenshtein($word, $search) / strlen($word) < $threshold)
$word = $replacement;
Helaas is de levenshteinafstand tussen test en tekst kleiner dan die tussen test en tets. Dus wat dat betreft werkt het niet echt handig. Misschien dat [php]similar_text[/php] of [php]soundex[/php] beter werken, zoals je zelf al aangaf.
@Jens erd
Ik ben bezig met een ticket service. Hierin worden vrij standaard berichten gemaakt en wil daaruit een samenvatting draaien met de relevante informatie.
Ik filter (met str_replace) daar wat tekst uitweg, maar mij valt op dat sommige deze standaard tekst net even wat anders neerzetten en of tikfouten maken.
Als ik dan met similar_text() die stukken tekst vergelijk, kom ik vaak op een overeenkomst van meer dan 95%, maar moet dus een combinatie hebben met zoeken opbasis van similar_text() en dan bij meer dan (bijv.) 95% een str_replace uitvoeren.
Begrijp je hem?
@Jelmer rrrr
Bedankt voor je reactie, ik ga er eens mee aan de slag.