13. august 2009 - 12:08Der er
4 kommentarer og 1 løsning
Tjekke en tekst efter punktum PHP
Hey eksperter
Jeg sidder med en lille opgave hvor jeg har nogle elever som skal sætte punktummer i en tekst hvor efter jeg så skal tjekke om de har sat dem de rigtig steder… har ledt efter noget som kan hjælpe mig i php til at tjekke om punktummerne er sat de rigtig steder men kan ikke finde noget… så håber der er en der ud der kan hjælpe.
Teksten som elever ser:
Manden så ud til at være omkring de halvtreds og drengen et sted mellem fire og fem de havde sat sig på en ledig bænk på perron 2 var alle seks bænke i øvrigt ledige der var meget stille på den lille station lige nu drengen stod stille og betragtede et par duer der spankulerede rundt om hinanden og sig selv havde han bare haft sin slangebøsse med tænkte drengen manden fortsatte med begge ben satte drengen pludselig af han havde fået øje på en tokrone manden kiggede på sit ur der var ti minutter til det næste tog vi mon de rigtige billetter med tænkte manden i det samme lød det over højttaleren: gå ikke over sporet
Den rigtig tekst hvor / er et punktum:
Manden så ud til at være omkring de halvtreds og drengen et sted mellem fire og fem / de havde sat sig på en ledig bænk / på perron 2 var alle seks bænke i øvrigt ledige / der var meget stille på den lille station lige nu / drengen stod stille og betragtede et par duer der spankulerede rundt om hinanden og sig selv / havde han bare haft sin slangebøsse med tænkte drengen / manden fortsatte / med begge ben satte drengen pludselig af / han havde fået øje på en tokrone / manden kiggede på sit ur / der var ti minutter til det næste / tog vi mon de rigtige billetter med tænkte manden / i det samme lød det over højttaleren: gå ikke over sporet /
$test = <<< EOT Manden så ud til at være omkring de halvtreds og drengen et sted mellem fire og fem de havde sat sig på en ledig bænk på perron 2 var alle seks bænke i øvrigt ledige der var meget stille på den lille station lige nu drengen stod stille og betragtede et par duer der spankulerede rundt om hinanden og sig selv havde han bare haft sin slangebøsse med tænkte drengen manden fortsatte med begge ben satte drengen pludselig af han havde fået øje på en tokrone manden kiggede på sit ur der var ti minutter til det næste tog vi mon de rigtige billetter med tænkte manden i det samme lød det over højttaleren: gå ikke over sporet EOT;
$kontrol = <<< EOT Manden så ud til at være omkring de halvtreds og drengen et sted mellem fire og fem / de havde sat sig på en ledig bænk / på perron 2 var alle seks bænke i øvrigt ledige / der var meget stille på den lille station lige nu / drengen stod stille og betragtede et par duer der spankulerede rundt om hinanden og sig selv / havde han bare haft sin slangebøsse med tænkte drengen / manden fortsatte / med begge ben satte drengen pludselig af / han havde fået øje på en tokrone / manden kiggede på sit ur / der var ti minutter til det næste / tog vi mon de rigtige billetter med tænkte manden / i det samme lød det over højttaleren: gå ikke over sporet / EOT;
Her er et udkast. Det tager ikke højde for hvis brugeren tilføjer mere end et punktum i træk. F.eks.: "abc .. def". Eller hvis der tilføjes et punktum midt i et ord, eller hvis der tilføjes, rettes eller slettes i teksten.
<?php function strposa($haystack ,$needles=array(),$offset=0){ $chr = array(); foreach($needles as $needle){ $chr[] = strpos($haystack,$needle,$offset); } if(empty($chr)) return false; return min($chr); }
$correctText = "Manden så ud til at være omkring de halvtreds og drengen et sted mellem fire og fem. de havde sat sig på en ledig bænk. på perron 2 var alle seks bænke i øvrigt ledige. der var meget stille på den lille station lige nu. drengen stod stille og betragtede et par duer der spankulerede rundt om hinanden og sig selv. havde han bare haft sin slangebøsse med tænkte drengen. manden fortsatte. med begge ben satte drengen pludselig af. han havde fået øje på en tokrone. manden kiggede på sit ur. der var ti minutter til det næste. tog vi mon de rigtige billetter med tænkte manden. i det samme lød det over højttaleren: gå ikke over sporet.";
$enteredText = "Manden så ud til at være omkring de halvtreds. og drengen et sted mellem fire og fem. de havde sat sig på en ledig bænk på perron 2. var alle seks bænke i øvrigt ledige . der var meget stille på den lille station lige nu . drengen stod stille og betragtede et par duer. der spankulerede rundt om hinanden og sig selv havde han bare haft sin slangebøsse. med tænkte drengen . manden fortsatte med begge ben. satte drengen pludselig af . han havde fået øje på en tokrone . manden kiggede på sit ur der var ti minutter til det næste tog. vi mon de rigtige billetter med tænkte manden . i det samme lød det over højttaleren: gå ikke over sporet.";
// Fjern forekomster af mellemrum i træk. $correctText = ereg_replace("[[:space:]]+", " ", $correctText); // Fjern mellemrum omkring punktum. $correctText = ereg_replace("[[:space:]]*\.[[:space:]]*", ".", $correctText); // Fjern alt der ikke er punktum og mellemrum. $correctPunctation = ereg_replace("[^. ]+", "", $correctText);
// $correctPunctation er nu en unik tekst streng som angiver den korrekte måde punktummer skal stå på.
// Løkke over punkt sætningen. for ($i = 0, $j = 0, $k = 0; $i < strlen($enteredPunctation); $i++, $offsetCount++) { // Find positionen af næste punktum eller mellemrum. $offset = strposa($correctText, array(".", " "), ($offset == 0 ? 0 : $offset+1)); if ($offset === false) $offset = strlen($correctText)-1;
// Hvis de to tegn ikke er ens er der fejl! if ($enteredPunctation[$i] != $correctPunctation[$i]) { // Insæt "\ /" (manglende punktum) eller "\./" (forkert punktum) omkring fejlen. $correctedText = substr_replace($correctedText, " \\".$enteredPunctation[$i]."/ ", $offset+4*$j+$k, 1); $j++; } else if ($enteredPunctation[$i] == ".") { // Tilføj korrekt satte punktummer til den rettede tekst. $correctedText = substr_replace($correctedText, ". ", $offset+4*$j+$k, 1); $k++; } }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.