Toon posts:

woord replacer

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo

Ik heb een soort van biblioteek met allemaal woordjes.
Ik heb ook een tekst die ik scan en kijk of er woorden in voorkomen die ook in de bibliotheek staan (deze zet ik dan om in een link)

VB: "Hallo ik heb een vraag over diabetes. Zijn er al goede behandelingen ?"

diabetes wordt mooi omgetoverd tot een link naar de uitleg. Alleen de laatste 3 woorden van behandelingen (gen) worden ook een link. Aangezien gen ook in mijn bibliotheek staan.

Een ander probleem is dat als een woord ook een deelwoord heeft wat iets betekent hij alleen dat deelwoord een link maakt. Voorbeeld: hypothyreoïdie. Hypo betekent ook iet aparts en maakt dus alleen van die hypo een link terwijl ik dat hele woord een link wil hebben.

Wie weet hoe dit te doen?

Ik gebruik de volgend ecode:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function replaceWords($textR) 
    { 
        $words = array(); 
        $links = array(); 
        
        $query = mysql_query("SELECT 
                                        id,naam,uitleg 
                              FROM 
                                          lib1 
                              
                              ")or die(mysql_error()); 
        while($items = mysql_fetch_assoc($query)) 
        { 
            $words[] = strtolower($items['naam']);; 
            $links[] = 
            '<a href="">'.$items['naam'].'</a>'; 
            
        } 
        
        $text = strtolower($textR); 
        $newText = str_replace($words,$links, $text); 
        return nl2br(strtolower($newText)); 
    }

Verwijderd

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function replaceWords($textR) 
    { 
        $words = array(); 
        $links = array(); 
        
        $query = mysql_query("SELECT 
                                        id,naam,uitleg 
                              FROM 
                                          lib1 
                              
                              ")or die(mysql_error()); 
        while($items = mysql_fetch_assoc($query)) 
        { 
            $words[] = " " . strtolower($items['naam']). " "; 
            $links[] = 
            ' <a href="">'.$items['naam'].'</a> '; 
            
        } 
        
        $text = strtolower($textR); 

        $newText = str_replace($words,$links, $text); 
        return nl2br(strtolower($newText)); 
    }



spaties gebruiken dan " hopothenusa" zit heen " hypo " in.

je hele text ff spatie voor zetten en spatie achter zetten en dan voor het afdrukken die spaties weer weghalen

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:39

gorgi_19

Kruimeltjes zijn weer op :9

dan ga je de mist in met iets als:

"welke behandeling is het beste tegen diabetes?"

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Zsub
  • Registratie: Juli 2006
  • Laatst online: 20:46
Je kan ook checken of de karakters voor en na een match (in je bieb gevonden woord uit de tekst) spaties of leestekens zijn toch? Dan weet je zeker dat het altijd goed gaat. Hoe het uitgevoerd zou moeten worden weet ik overigens niet, maar qua concept lijkt me dit wel redelijk. =)

[ Voor 37% gewijzigd door Zsub op 24-06-2007 17:30 ]


Verwijderd

gorgi_19 schreef op zondag 24 juni 2007 @ 17:28:
dan ga je de mist in met iets als:

"welke behandeling is het beste tegen diabetes?"
owjah.. denk wel dat je het in die richting moet zoeken. dus kijken of er geen letters aan vast zitten

Verwijderd

Topicstarter
hmm..ja maar hoe doe je zoiets? :)

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 28-11 20:43

chem

Reist de wereld rond

Met regular expressions, je bent op zoek naar word-boundary matches.

Klaar voor een nieuwe uitdaging.


Verwijderd

anders misschien eerst met een find zoeken naar je woordjes, dan kijken of er iets voor of achter zit. zoja, zelf replacen (dus het gevonden woord verwijderen en op die plek (mbv de teruggegeven iterator) een nieuwe text invoeren

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 28-11 20:43

chem

Reist de wereld rond

Verwijderd schreef op maandag 25 juni 2007 @ 15:08:
anders misschien eerst met een find zoeken naar je woordjes, dan kijken of er iets voor of achter zit. zoja, zelf replacen (dus het gevonden woord verwijderen en op die plek (mbv de teruggegeven iterator) een nieuwe text invoeren
klinkt als een ingewikkelde methode om een regular expression te emuleren :+

Klaar voor een nieuwe uitdaging.


Verwijderd

chem schreef op maandag 25 juni 2007 @ 15:16:
[...]

klinkt als een ingewikkelde methode om een regular expression te emuleren :+
jah het is me niet voor niets eens gelukt om een hello world te maken die tot meer dan 1 MB compileerde :P

Verwijderd

Topicstarter
hmm..zou iemand een opzetje kunnen maken? ik zou niet weten hoe te beginnen :'(

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 28-11 20:43

chem

Reist de wereld rond

Da's eigenlijk niet de bedoeling, maar goed:
PHP:
1
2
$string = "ik ben ikben ben ik?"; 
echo preg_replace('/(\b)ik(\b)/', '\1jij\2', $string);

output:
jij ben ikben ben jij?

[ Voor 4% gewijzigd door chem op 25-06-2007 20:17 . Reden: code opgeruimd ]

Klaar voor een nieuwe uitdaging.

Pagina: 1