Woorden vergelijken in stuk tekst

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sjaak Faal

Sjaak Faal

10/09/2007 11:18:00
Quote Anchor link
Hoi allemaal,

Ik werk aan een vertaal cursus en in een specifiek stukje moeten mensen een stukje vreemde tekst overtypen (om de vreemde taal te leren, prima).

Een stukje orginele tekst kan er dus zo uitzien:

Quote:
Hallo this is a test.

How are you doing.


Nu komt het lastige verhaal:
De overgetypte tekst moet gecontroleerd worden nav. de orginele tekst. De fouten moeten b.v. rood gekleurd worden.

Quote:
Hallo {rood}thiz{/rood} is a test.

How are {rood}jij{/rood} doing.


Nu heb ik een werkende versie; maar optimaal is hij nog niet. Er zijn zoveel uitzonderingssituaties. Bestaande scripts op internet hebben alleen betrekking op regel niveau en NIET op woord niveau.

Heeft iemand hier ervaring mee; of wellicht dat iemand een werkend script ergens weet te vinden?

Hartelijk dank!
 
PHP hulp

PHP hulp

24/12/2024 17:59:31
 
- wes  -

- wes -

10/09/2007 11:23:00
Quote Anchor link
je zal dan creatief met regexp moeten gaan denk ik, genoeg topics tuts en scripts over
 
Robert Deiman

Robert Deiman

10/09/2007 11:40:00
Quote Anchor link
Je kan het ook eenvoudig doen door de boel op te knippen in een array:
Deze css is nodig om wel alle text achter elkaar weer te geven
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
p{
   display:inline;
   }
.red{
   color:#DF0000;
   }

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
$text
= "How are you doing";
$posted_text = "Hou are joe doing";

$exploded_text = explode(' ',$text);
$exploded_posted = explode(' ',$posted_text);

$reaction = '';
foreach($exploded_text as $key=>$value){
    if($value == $exploded_posted[$key]){
       $reaction .= $value.' ';
       }

     else{
       $reaction .= '<p class="red">'.$value.'</p> ;
       }
    }

?>


Edit:

Niet getest, kan best een foutje in zitten
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
 
Sjaak Faal

Sjaak Faal

10/09/2007 12:57:00
Quote Anchor link
Bedankt voor jullie reacties; maar je script gaat de mist in wanneer een persoon een woord teveel typt of een woord te weinig.

Igv. een woord te weinig zal dit woord in het rood moeten worden tussengevoegd.

Als je er wat langer over gaat nadenken is het best complex!
Gewijzigd op 01/01/1970 01:00:00 door Sjaak Faal
 
Robert Deiman

Robert Deiman

10/09/2007 13:53:00
Quote Anchor link
Aah, maar dat had je er ook nog niet bij gezegd. Toch zou ik het wel op zo'n manier doen, je kan bijvoorbeeld als er een woord teveel is, ook gewoon de melding geven dat er een woord teveel is. Dat is (denk ik) duidelijker dan dat je een woord dat teveel is hetzelfde aanduid als een woord dat niet goed is overgetypt.

Je kan wel bijvoorbeeld kijken of het woord dat er moet staan niet toevallig het volgende woord is. -> Dat is zelfs in bovenstaande voorbeeld prima te realiseren.

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
18
19
20
21
22
23
24
25
26
<?php
$text
= "How are you doing";
$posted_text = "Hou are joe doing";

$exploded_text = explode(' ',$text);
$exploded_posted = explode(' ',$posted_text);

$reaction = '';
foreach($exploded_text as $key=>$value){
    //woord komt overeen
    if($value == $exploded_posted[$key]){
       $reaction .= $value.' ';
       }

     //woord komt niet overeen
     else{
       if($exploded_text[$key] == $exploded_posted[$key+1]){
           //melding dat er een woord te veel staat
       elseif($exploded_text[$key] == $exploded_posted[$key-1]){
          //melding dat er een woord te weinig staat
            }
      else{
            $reaction .= '<p class="red">'.$value.'</p> ;
           }
       }
    }

?>


Zoiets kan je ook aan denken, ik kan me geen regex bedenken die het allemaal zou kunnen. Het gaat al een (stukje) in de richting.
 
Arjan Schuurman

Arjan Schuurman

10/09/2007 14:43:00
Quote Anchor link
Hoe wil je het overigens grammaticaal doen?
 



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.