Julchen: Sätze trennen

Hallo,

ich habe ein Problem, welches mich fast zur Verzweiflung treibt.

Ich habe einen Text und möchte ihn in Sätze zerlegen. Eigentlich sollte das anhand des Punktes ja leicht möglich sein, aber blöderweise kommen Punkte auch noch an vielen anderen Stellen, außer nur am Satzende vor.

Beispiel:

$text= "George W. Bush und Papst Benedikt XVI. haben sich am 5. Januar zum Tee verabredet. 25.700 Menschen sahen vom Petersplatz aus zu, bzw. beschäftigten sich mit kleinen Spielchen. So sprangen viele z.B. um genau 15.20 Uhr in die Luft.";

Mit

$saetze=explode(".",$text);

komme ich hier natürlich nicht zum Ziel. Kennt jemand eine Lösung?

  1. Hi,

    Ich habe einen Text und möchte ihn in Sätze zerlegen. Eigentlich sollte das anhand des Punktes ja leicht möglich sein, aber blöderweise kommen Punkte auch noch an vielen anderen Stellen, außer nur am Satzende vor.

    Eben, und deshalb lässt sich das Problem gar nicht so leicht algorithmisch erfassen.

    Beispiel:

    "George W. Bush und Papst Benedikt XVI. haben sich am 5. Januar zum Tee verabredet. 25.700 Menschen sahen vom Petersplatz aus zu, bzw. beschäftigten sich mit kleinen Spielchen. So sprangen viele z.B. um genau 15.20 Uhr in die Luft."

    Du könntest zunächst mal verlangen, dass es nach dem Punkt (und Leerzeichen) mit einem gross geschriebenen Wort weitergehen muss.
    Damit hast du aber in deinem Beispiel den zweiten Satz nicht angefangen, der mit einer Ziffer beginnt. Könnte man auch noch als Satzanfang definieren - aber dann bekommst du auch wieder Probleme, wenn nach einem Punkt wie dem vom Papst direkt eine Zahl in Ziffernschreibweise folgen würde ...

    Kurz: Du bräuchtest einen Algorithmus, der (deutsche) Grammatik versteht.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    1. Eben, und deshalb lässt sich das Problem gar nicht so leicht algorithmisch erfassen.

      Um nicht zu sagen, es lässt sich gar nicht erfassen, ohne Inhalt und Grammatik zu "verstehen".

      Das liegt einfach daran, dass einerseits der Punkt in der deutschen Sprache keine eindeutige Funktion als Satzendzeichen einnimmt und andererseits daran, dass es darüber hinaus auch noch andere Satzendzeichen gibt, die ebenfalls nicht eindeutig sind! Oder sollte ich !! oder !?! schreiben? ;-)

      Grüße, Jürgen

    2. Naja, ich könnte mir folgendes vorstellen:

      • Trenne beim Punkt!
      • außer das letzte "Wort" vor dem Punkt besteht nur aus einem Zeichen (W.)
      • außer das letzte "Wort" vor dem Punkt ist eine Zahl
      • außer nach dem Punkt kommt kein Leerzeichen.
      • außer der erste Buchstabe nach dem Leerzeichen nach dem Punkt ist ein kleiner Buchstabe
      • außer das letzte "Wort" vor dem Punkt ist "bzw" (ggf. gibt es später noch andere Wörter, die ich da hinzufüge).

      Mir ist auch klar, dass das nicht 100% fehlerfrei funktionieren würde, aber ich glaube es würde ganz gut klappen.

      Nur... wie übersetze ich diese Regeln in Programmiersprache?

      1. Hi,

        • Trenne beim Punkt!

        schön, dass Du diesen Satz nicht mit einem Punkt beendetest ...

        • außer das letzte "Wort" vor dem Punkt besteht nur aus einem Zeichen (W.)

        "Der vorherige Präsident der USA wird gelegentlich nur mit seinem Middle Initial benannt, also W. Bush lautet übrigens sein Nachname."

        • außer das letzte "Wort" vor dem Punkt ist eine Zahl

        "Präsidenten hatte die USA schon einige, Bush war der 43."

        • außer nach dem Punkt kommt kein Leerzeichen.

        Ich bin gespannt, welche Regel Du hier für dieses Satzende definierst ...

        • außer der erste Buchstabe nach dem Leerzeichen nach dem Punkt ist ein kleiner Buchstabe

        "Dies kann stimmen, muss aber nicht. a) Es könnte eine Auflistung folgen, b) darfst Du Dir selbst ausdenken."

        • außer das letzte "Wort" vor dem Punkt ist "bzw" (ggf. gibt es später noch andere Wörter, die ich da hinzufüge).

        Evtl., bspw. ggf.

        Mir ist auch klar, dass das nicht 100% fehlerfrei funktionieren würde, aber ich glaube es würde ganz gut klappen.

        Siehe Toms Antwort.

        Nur... wie übersetze ich diese Regeln in Programmiersprache?

        Mit sehr, sehr viel Geschick und Können.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Sehr witzig, nur bei diesem Beispiel weiß ich nicht, was du mir damit sagen wolltest... :-)

          "Der vorherige Präsident der USA wird gelegentlich nur mit seinem Middle Initial benannt, also W. Bush lautet übrigens sein Nachname."

          Könnte mir wenigstens jemand verraten, wie man z.B. die Regel, dass wenn das letzte Zeichen ein Großbuchstabe ist, nicht getrennt werden soll, den anderen Kram könnte ich dann sicherlich selbst machen und würde ihn auch hier der Gemeinschaft bereitstellen.

          1. Hi,

            Könnte mir wenigstens jemand verraten, wie man z.B. die Regel, dass wenn das letzte Zeichen ein Großbuchstabe ist, nicht getrennt werden soll

            Auch diese Regel ist für sich genommen nicht sinnvoll.

            „Kinder lernen in der Schule das ABC. Und was Sätze sind, lernen sie da auch - das haben sie dummen Maschinen voraus.“

            MfG ChrisB

            --
            “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
          2. Hello,

            Könnte mir wenigstens jemand verraten, wie man z.B. die Regel, dass wenn das letzte Zeichen ein Großbuchstabe ist, nicht getrennt werden soll, den anderen Kram könnte ich dann sicherlich selbst machen und würde ihn auch hier der Gemeinschaft bereitstellen.

            Das ist aber auch nicht richtg, denn der erste Buchstabe im Alphabet ist ein A.

            Und ich meine, dass der obige Satz vollkommen richtig ist und deshalb auch hinter einem einzelnen Großbuchstaben zuende sein darf.

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
             ☻_
            /▌
            / \ Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
          3. Hi,

            Sehr witzig, nur bei diesem Beispiel weiß ich nicht, was du mir damit sagen wolltest... :-)

            "Der vorherige Präsident der USA wird gelegentlich nur mit seinem Middle Initial benannt, also W. Bush lautet übrigens sein Nachname."

            damit wollte ich Dir sagen, dass ein den von Dir genannten Regeln folgendes Programm diese zwei Sätze als nur einen fehlerkannt hätte.

            Könnte mir wenigstens jemand verraten, wie man z.B. die Regel, dass wenn das letzte Zeichen ein Großbuchstabe ist, nicht getrennt werden soll,

            Nein, das möchte ich nicht. Ich möchte Dir lieber Dinge verraten, die Dir nützen, anstatt solchen, die Dir im Wege stehen.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
  2. Kennt jemand eine Lösung?

    Ohne Beispiele einzugeben die dann als Teil des Satzes behandelt werden und ohne Fehler, die das System teilweise macht?
    Ich glaube nicht.

  3. Hello,

    ich habe ein Problem, welches mich fast zur Verzweiflung treibt.

    Das Problem wurde hier auch schon öfter diskutiert und man kam einhellig zu der Meinung, dass zur Lösung Intelligenz, wenn auch nur künstliche, erforderlich wäre.

    Selbst die Sammlung von Fällen und Nutzung dieser als Ausnahmemuster würde die menschliche Intelligenz dabei noch nicht ersezten. Was da beim Sprachempfinden genau abläuft, ist immer noch nicht genau erforscht. Selbst in einer fremden Sprache wird ein einigermaßen Sparachkundiger noch besser sein, als jedes Programm.

    Also bleib daran an der Aufgabenstellung und kassiere dann eines Tages alle Preise, die es dafür gibt :-))

    Praktische Lösung:

    Vorschlagsliste erstellen lassen und dann per eigener Intelligenz nachbearbeiten lassen.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de