Hallo,

Wat ik wil combineren is een replace met een aantal procent dat de gezochte tekst overeen moet komen.
Is dat mogelijk met PHP?

Voorbeeld

$text = 'Dit is een test tekst, waar zomaar wat in staat!';
$textnew = str_ireplace('test' '', $text);

resultaat zal zijn:
Dit is een tekst, waar zomaar wat in staat!


Maar het moet dan ook werken als het woord niet geheel overkomt.

$text = 'Dit is een tets tekst, waar zomaar wat in staat!';
$textnew = str_ireplace('test' '', $text);

Je kan met similar_text de gelijkheid meten in %, maar krijg dat niet gecombineerd met str_replace

Groet,
Dennis
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.

Waar wil je dit voor gebruiken?
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;

return implode(' ', $words);
}

echo fuzzy_replace('test', 'xxxx', $tekst, 0.4);
?>

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.

Reageren