similar_text (of levenshtein) en str_ireplace

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dennis van Dijk

Dennis van Dijk

24/02/2012 22:18:24
Quote Anchor link
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
 
PHP hulp

PHP hulp

22/12/2024 07:40:46
 
Jens erd

Jens erd

24/02/2012 23:29:11
Quote Anchor link
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?
 
Jelmer -

Jelmer -

25/02/2012 10:10:55
Quote Anchor link
Voorbeeldje van wat je ongeveer zou kunnen doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
?>


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 -
 
Dennis van Dijk

Dennis van Dijk

25/02/2012 18:02:47
Quote Anchor link
@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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.