Avatar billede ghanic Nybegynder
02. maj 2001 - 23:51 Der er 8 kommentarer og
1 løsning

TitleCase funktion

Med mindre du har beskæftiget dig med engelsk grammatik på et højere plan kan du ikke svare på følgende spørgsmål:

Jeg skal bruge en funktion, der returner korrekt upper/lowercase af en titel og følger engelsk grammatik.

Noget i stil med
\"the man with the golden gUN\"
=>
\"The Man with/With the Golden Gun\"

Problemets natur umuliggør perfekt løsning, så point gives til bedste svar inden 15. maj.
Avatar billede half_d Nybegynder
02. maj 2001 - 23:55 #1
Ja, den er jo lidt tricky...
jeg er faktisk i gang med at lave et script til det selv samme, så jeg vil lige smede det færdigt og smide det op.

Avatar billede barefoot Nybegynder
03. maj 2001 - 00:17 #2
Jeg vil nu mene at det er et ret stort krav som du stiller!
Det kræver jo at scriptet analyserer overskriften og skiller udsagnsord og navneord fra biord osv.

Den kan kun lade sig gøre ved at gemme ALLE mulige ord at forskellige klasser i en database og søge på dem.
Det kan man da ikke sådan lige gøre...

Det er straks noget lettere hvis scriptet bare skal lave det første bogstave i alle ordene i titlen store og alle de andre små...
Avatar billede ghanic Nybegynder
03. maj 2001 - 00:38 #3
Det er helt korrekt at det ikke er verdens nemmeste opgave. Jeg giver som sagt points til bedste løsning. Bedste løsning er den som returnerer flest korrekte svar på en tilfældig mængde titler. Så kravet er at din løsning skal være den bedste...

Den kræver som sagt at man er meget fortrolig med engelsk grammatik. Jeg er ret sikker på at man ikke behøver at søge en database igennem for at adskille ofte-ubetydelige ord fra de ofte-betydelige.
Avatar billede half_d Nybegynder
03. maj 2001 - 00:40 #4
Det er rigtigt.
Der er mange ord på engelsk, men jeg vil sige at ca. 98% af dem skal være med stort i titler.

Det er ikke så svært at se hvilke der skal laves til stort; noget helt andet er scriptet selv, som driller mig lidt nu, men jeg er godt i gang.
Så snart det er lavet, kan man jo bare begynde at poste ord ind i det selv.
Avatar billede half_d Nybegynder
03. maj 2001 - 01:18 #5
Jeg har nu lavet noget jeg er ved at være tilfreds med.
Det er endnu ikke vildt, men jeg poster da koden her så I kan se.

---

<?php
function titleCase($in) {
        $list = array(\"a\",\"an\",\"if\",\"it\",\"is\",\"the\",\"with\",\"of\",\"and\",\"or\",\"to\",\"as\",\"be\",\"are\");

        $tc = 0;
        $in = strtolower($in);
        $word = split(\" \", $in);

        $word[0] = ucfirst($word[0]);

                for ($i = 0;$i < count($word); $i++) {
                        for ($l = 0;$l < count($list); $l++) {
                                if ($word[$i] != $list[$l] && $tc != 1) {
                                        $tc = 0;
                                }
                                else {
                                        $tc = 1;
                                }

                        }
                        if ($tc == 0) {$word[$i] = ucfirst($word[$i]);}
                        $tc = 0;
                        $out .= $word[$i] . \" \";
                }
        chop($out);
        return $out;
}
echo titleCase(\"the hitch hiker\'s guide to the galaxy\") . \"<br>\";
echo titleCase(\"the man who walked the earth\") . \"<br>\";
echo titleCase(\"david hockney, travels with pen, pencil and ink\") . \"<br>\";
?>
Avatar billede half_d Nybegynder
03. maj 2001 - 01:26 #6
Som sagt er det bare lige nogle få ord der er blevet smidt i \'systemet\'
Avatar billede pointer Nybegynder
03. maj 2001 - 09:42 #7
Nedenunder mit bud. half_ds kode har flere problemer.

a. Sidste ord skal altid med stort.
b. Forkortelser, som allerede er med CAPS, skal bibeholdes i CAPS. Eg. SPECTRA.
c. Specielle navne/ord som iTouch og e-mail skal med lille forbogstav. Hvis du har behov for support af sådanne cases, er jeg villig til at udvide.
d. Verber skal altid med stort, da de er betydelige.
d. Ord som with, from og if er problematiske. De kan både være betydelige og ubetydelige (store/små). Jeg har valgt at bruge with, from og If. Hvorvidt det er korrekt må man bedømme empirisk.

function TitleCase($tmp) {
  static $lowercase= array (\'a\', \'an\', \'and\', \'as\', \'at\', \'by\', \'for\', \'from\', \'in\', \'into\', \'of\', \'on\', \'or\', \'the\', \'to\', \'vs.\', \'with\');
  $tmp= explode(\" \", $tmp);
  $sz= sizeof($tmp);
  $i= -1;
  while (++$i < $sz) {
    $uc= !in_array(strtolower($tmp[$i]), $lowercase);
    if ($i==0  ||  $i+1==$sz) // first or last word
      $uc= true;
    if ($uc)
      $tmp[$i][0]= strtoupper($tmp[$i][0]);
    else
      $tmp[$i][0]= strtolower($tmp[$i][0]);
  }
  return implode(\" \", $tmp);
}
Avatar billede half_d Nybegynder
03. maj 2001 - 11:06 #8
Udemærket pointer!
Det ser godt ud, det skal da nok blive til noget det her :)
Avatar billede ghanic Nybegynder
05. maj 2001 - 22:30 #9
pointer: Udmærket løsning og perfekt til mit formål (korrekt visning af titler på mp3 filer). Det lader til at du har tænkt over problemet (eller selv haft problemstillingen før).
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester