Woorden vergelijken in stuk tekst
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.
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.
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!
je zal dan creatief met regexp moeten gaan denk ik, genoeg topics tuts en scripts over
Deze css is nodig om wel alle text achter elkaar weer te geven
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
$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> ;
}
}
?>
$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
Niet getest, kan best een foutje in zitten
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
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
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)
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
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> ;
}
}
}
?>
$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.
Hoe wil je het overigens grammaticaal doen?