similar_text (of levenshtein) en str_ireplace
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
Waar wil je dit voor gebruiken?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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);
?>
$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 similar_text of soundex beter werken, zoals je zelf al aangaf.
Gewijzigd op 25/02/2012 11:52:46 door Jelmer -
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.