Alex: Erste 3 Sätze aus MySQL-Eintrag auslesen

Hi,

mit welcher Funktion kann ich realisieren, dass mein PHP-Script die ersten 3 Sätze aus einem Text ausliest, der z.B. in MySQL auch in einer .txt-Datei gespeichert ist?

Beispiel dessen, was ich geplant hatte:

ÜBERSICHT-SEITE:
PHP ist eine schöne Programmiersprache. Sie ist zwar für Leute wie mich zu kompliziert, aber wozu gibt das Selfforum. Hier sind ne Menge intelligente Köpfe, die einem helfen. (Mehr...)

TEXT-SEITE:
PHP ist eine schöne Programmiersprache. Sie ist zwar für Leute wie mich zu kompliziert, aber wozu gibt das Selfforum. Hier sind ne Menge intelligente Köpfe, die einem helfen. Das möchte ich jedenfalls hoffen. Hmm, was soll ich noch schreiben? Ich denke, es müsste mittlerweile klar sein. Also in der Übersicht sind drei Sätze. In diesem Text sogar schon acht.

MfG
Alex

PS: Also es dreht sich nur um das rausfiltern der besagten 3 Sätze, nicht etwa um irgendwelche Grundlagen von MySQL oder so.

  1. aus einem Text ausliest, der z.B. in MySQL auch in einer .txt-Datei gespeichert ist?

    Sollte eigentlich heißen:
    aus einem Text ausliest, der z.B. in MySQL _oder_ auch in einer .txt-Datei gespeichert ist?

    MfG
    Alex

  2. Hallo,

    PS: Also es dreht sich nur um das rausfiltern der besagten 3 Sätze, nicht etwa um irgendwelche Grundlagen von MySQL oder so.

    Hier ein allgemeiner Ansatz:
    Überlege, woran man einen Satz (bzw. dessen Ende) erkennt. Suche drei mal danach und stelle all das dar, was bis zu dieser Stelle im Text vorhanden ist.

    Grüße
      Klaus

  3. Hi,

    mit welcher Funktion kann ich realisieren, dass mein PHP-Script die ersten 3 Sätze aus einem Text ausliest, der z.B. in MySQL auch in einer .txt-Datei gespeichert ist?

    Das Problem habe ich schon mal gelöst.
    Achte auf den Bugfix am Ende habe keine Lust es neu zu schreiben.

    <?php

    $text = 'PHP ist eine schöne Programmiersprache. Sie ist zwar für Leute wie mich zu kompliziert, aber wozu gibt das Selfforum. Hier sind ne Menge intelligente Köpfe, die einem helfen. Das möchte ich jedenfalls hoffen. Hmm, was soll ich noch schreiben? Ich denke, es müsste mittlerweile klar sein. Also in der Übersicht sind drei Sätze. In diesem Text sogar schon acht.';

    preg_match_all ('=.+\b[.?!] =Us', $text, $saetze);

    // print_r($saetze); // Zum testen

    print $saetze[0][0];
    print $saetze[0][1];
    print $saetze[0][2];

    ?>

    Erklärung zu dem regulären Ausdruck:

    '=.+\b[.?!] =Us'

    was haben wir da?

    Am Anfang ein ' und am Ende auch. Die sind für PHP (String-Begrenzungszeichen)
    Das dazwischen ist für die "PCRE library"

    = als Begrenzung für PCRE
    Der Punkt . paßt auf genau ein beliebiges Zeichen außer dem Zeilenendezeichen \n.
    Das Pluszeichen + steht für {1,}, also für mindestens eine Wiederholung des vorhergehenden Ausdrucks)

    \b ist eine Wortgrenze, also das Ende oder der Anfang eines Wortes
      (Achtung es kann Probleme mit äöüß geben)

    Dann kommt eine Zeichenmenge begrenzt durch [ und ]. In denn eckigen Klammern sind die Zeichen die hier vorkommen dürfen. Bei dir die Satzzeichen .?!

    Noch ein Leerzeichen. (Ist halt so üblich nach einem Satzzeichen)

    Und noch mal ein = als Begrenzung

    Das U und das s sind 'Pattern Modifiers' sie verändern das verhalten des Suchmusters.
    U sorgt dafür, daß Ungreedy gematched wird, normaler weise ist .+ sehr hungrig und würde alles nehmen was es bekommt :-)
    S verändert das verhalten des Punktes . so das er auch auf \n (Zeilenendezeichen) past.

    Also:
    "Suche 'beliebige Zeichen' gefolgt von einer Wortgrenze auf die ein . oder ? oder ! folgt, mit einem Leerzeichen danach"

    Achtung: Wenn der Text nur 3 Sätze hat werden nur 2 gefunden bei 2 = 1.

    ---------------
    Bugfix für wenig Sätze:

    preg_match_all ('=.+(\b[.?!] |$)=Us', $text, $saetze);
    ---------------

    Der Linker

    1. Hi,

      Da Deine Antwort auf mein Posting verschwunden ist, während ich die Antwort schrieb, eben hier:

      Hast du dir mal die mühe gemacht vor deiner Antwort die Antworten zu lesen die schon da sind?

      Ja.

      Oder bist du mit meiner Definition nicht einverstanden?

      s.u.

      "Suche 'beliebige Zeichen' gefolgt von einer Wortgrenze auf die ein . oder ? oder ! folgt mit einem Leerzeichen danach"

      Schau Dir mal einen Beispielsatz an:

      Es gibt verschiedene HTML-Elemente, z.B. a, address, acronym usw. usf., und es gibt HTML-Attribute.

      Beliebige Zeichen gefolgt von einer Wortgrenze:

      Folgt auf die beliebigen Zeichen 'z.B' eine Wortgrenze?
      Folgt auf die beliebigen Zeichen 'usw' eine Wortgrenze?
      Folgt auf die beliebigen Zeichen 'usf' eine Wortgrenze?

      Wie erkennst Du die Wortgrenze? Hilft das in irgendeinerweise?

      cu,
      Andreas

      --
      Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
      http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
      1. Hallo Andreas,

        Da Deine Antwort auf mein Posting verschwunden ist, während ich die Antwort schrieb, eben hier:

        So sind wir wenigstens im richtigen Zweig gelandet ;-)

        Hast du dir mal die mühe gemacht vor deiner Antwort die Antworten zu lesen die schon da sind?

        Ja.

        Es kam mir halt so vor als ob nicht. Da dein Beitrag inhaltlich dem von Klaus doch sehr nah kam.

        Oder bist du mit meiner Definition nicht einverstanden?
        "Suche 'beliebige Zeichen' gefolgt von einer Wortgrenze auf die ein . oder ? oder ! folgt mit einem Leerzeichen danach"

        Schau Dir mal einen Beispielsatz an:

        Es gibt verschiedene HTML-Elemente, z.B. a, address, acronym usw. usf., und es gibt HTML-Attribute.

        Hmm da hast du recht Abkürzungen sind in der Definition wirklich nicht bedacht.

        [schnipp]
        Wie erkennst Du die Wortgrenze? Hilft das in irgendeinerweise?

        Es hilft in soweit das ich jetzt einen neu BUG habe den es zu beseitigen gilt. Hast du eine Idee? Man könnte eine Liste gebräuchlicher Abkürzungen mit einbauen. Wie erkennt ein Mensch eigentlich ob es sich um ein Satzende oder um eine Abkürzung handelt?

        Wo bei ich sagen muß das meine Lösung schon im Praktischem Einsatz bewährt hat. Ich muß mal nachfragen wahrscheinlich verwenden die Autoren so wenige Abkürzungen das es noch nicht aufgefallen ist.

        Gruß
          Christian

        1. Hi,

          Es hilft in soweit das ich jetzt einen neu BUG habe den es zu beseitigen gilt.

          Es handelt sich m.E. nicht um einen Bug, sondern um ein prinzipielles Problem.

          Man könnte eine Liste gebräuchlicher Abkürzungen mit einbauen.

          Das verringert das Problem, behebt es aber nicht.

          Wie erkennt ein Mensch eigentlich ob es sich um ein Satzende oder um eine Abkürzung handelt?

          Der Mensch ist in der Lage, den Zusammenhang der Buchstaben zu erkennen.
          Diesen "Mechanismus" einer Maschine beizubringen, ist nicht ganz einfach - ansonsten gäbe es bereits gute Übersetzungsprogramme...

          cu,
          Andreas

          --
          Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
          http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
          1. Hallo Andreas,

            und ich dachte du hättest noch was konstruktives beizutragen. Na ja dann eben nicht.

            Damit erkläre ich meine Lösung für bestmögliche die mit vertretbaren Aufwand zu realisieren ist.

            Gruß
              Christian

    2. Moin Linker,

      [...]

      Danke für die ausführliche Info. Werde es mal gleich ausprobieren...

      MfG
      Alex

  4. Hi,

    mit welcher Funktion kann ich realisieren, dass mein PHP-Script die ersten 3 Sätze aus einem Text ausliest, der z.B. in MySQL auch in einer .txt-Datei gespeichert ist?

    Das Problem dürfte sein, die Satzgrenzen zu erkennen.
    Klar, ein Punkt kann einen Satz beenden.
    Er kann aber z.B. auch eine Abkürzung anzeigen, oder aber in einer Zahl (3.14159) als Trennzeichen vorkommen.

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/