klaus: die ersten 2 wörter in einem text

hallo,

ich habe in einer DB mehrere längere Texte (max. 800 Zeichen) die ich alle auf einer Seite ausgebe...

Nun würde ich einer extra Zeile über dem kompletten Text gern jeweils die ersten 2 Wörter ausgeben.

folgendes konstrukt funzt auch schon:

$begin=explode(" ",$row['text']);
   echo $begin[0]." ".$begin[1].".. ";

ABER: jeden text so durchzugehen, ist sicher recht rechenintensiv und geht wohl ganz gut auf die performance... gibt es da noch eine bessere methode? eine funktion vielleicht, die einen text gleich in komplette wörter zerlegt?

wie würdet ihr sowas angehen? gibt es eine bessere möglichkeit?
oder paßt das so?

grüße,
daniel

  1. Hallo Daniel,

    welches Datenbanksystem benutzt Du denn?

    Der Text steht sicher jeweils in _einem_ Feld. Bei SQL-Systemen kann man ggf. nue einen  Teil des Feldes holen. Ist natürlich alles nur Statistik. Aber Du könntest davon ausgehen, dass die ersten zwei Wörter sicher innerhalb der ersten hundert Zeichen liegen.

    Unter C oder einer anderen Hochsprache könnte men eine eigene Funktion für die Separation der Elemente schreiben, die nach dem zweiten Element dann automatisch abbricht. Das würde sicher Zeit sparen. In einer Interpretersprache eine fertige Funktion (compiliert) durch eine eigene (interpretiert) zu ersetzen, halte ich für Blödsinn. Die interpretierte wird je nach Rechenoperation 10 bis 400mal solange dauern. Da es hier nur um den simplen Vergleich (Suchen des Leerzeichnens) und einige Kopieroperationen geht, wird sich das wohl eher bei 10 mal solange einpendeln.

    Mit MySQL würd eich die MID(string,start,count)-Funktion einsetzen.

    Select mid(<feldname>,0,60) as ANFANG from <tabellenname> ...

    $begin=explode(" ",$row['text']);
       echo $begin[0]." ".$begin[1].".. ";

    und dann den Rest so lassen.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
  2. n'Abend.

    Nun würde ich einer extra Zeile über dem kompletten Text gern jeweils die ersten 2 Wörter ausgeben.

    wie würdet ihr sowas angehen?

    Na ja, eigentlich mit Regulären Ausdrücken.
    Das könnte z.B. so aussehen:
    <?php
     $text = "Ein Wort ist ein Wort.";
     preg_match('/([^\s]+)\s+([^\s]+).*/',$text,$RegExp);
     echo $RegExp[1]." ".$RegExp[2];
    ?>
    Das würde "Ein Wort" ausgeben. Das funktioniert beim String "Ein Wort ist ein Wort.", und auch bei Strings wie "   Ein   Wort  ist ein Wort." greift das Ganze noch.

    gibt es eine bessere möglichkeit? oder paßt das so?

    Ob Reguläre Ausdrücke in Bezug auf die Performance besser sind, kann ich nicht sagen, aber mächtiger als explode sind sie sicherlich.

    Gruß
    Norbert