Text Spinner programmieren

Ich versuche ja gerade einen Spinner für Texte zu programmieren. In der einzigen Programmiersprache, die ich wirklich kann (PHP) und auf meinem hausinternen Xampp System. Ich will mit dem Spinner jetzt keine Internetseiten bestücken oder ein Netzwerk aus Freeblogs aufbauen aber für Social Bookmarks oder Webkataloge wäre das ja schon ganz praktisch. Und auch wenn der Spinner eher für kürzere Texte gedacht ist, sollte er natürlich auch mit langen Texten funktionieren.

Den Text Spinner für die kürzeren Texte hatte ich recht schnell fertig. Läuft auch. Mit speichern, Berechnung wie ähnlich etc.

Gestern wollte ich dann aber zum ersten Mal einen längeren Text durchlaufen lassen. Mit 26 Stellen, an dem das Teil gespinnt werden sollte. So eine Art Belastungstest. Den hat meine erste Programmierung nicht bestanden. Das Teil rödelte und rechnete und irgendwann kam eine Fehlermeldung, Speicher zu knapp. Ich geguckt, da hat das Teil im ersten Schritt berechnet, dann bei 26 möglichen Stellen, an denen der Spinner variieren soll, mehr als 150 Millionen Varianten rauskommen können (ich habe nicht nur Stellen mit zwei angebotenen Varianten gehabt). Erst habe ich gedacht, das kann nicht sein, dann erinnerte ich mich an die Jahrzehnte zurückliegende Schulzeit und der Sache mit den Reiskörnern und dem Schachbrett (exponentielles Wachstum).
Jetzt programmiere ich um. Aber mit bis zu zehn Stellen klappt der Spinner schon wunderbar. Vielleicht werde ich die kleine Version demnächst hier auch mal online stellen. Für kurze Beschreibungstexte ist der super und auch sinnvoll zu gebrauchen. Ob man wirklch mit gespinnten Texten ein Blognetzwerk aufbauen sollte, dass muss schon jeder für sich selbst entscheiden.

Schachbrett und Reis

Die Geschichte gibt es auch mit einem Weizenkorn oder Getreidekorn. Der Kern der Geschichte ist, dass sich jemand etwas von seinem König wünschen darf. Ganz bescheiden bittet dieser jemand um Reis bzw. Weizenkörner. Auf das erste Feld eines Schachbretts wollte er ein Korn, auf das zweite Feld die doppelte Menge, also zwei, auf das dritte wiederum doppelt so viele, also vier und so weiter.
Das klingt erstmal wenig.

Anzahl der Reiskörner auf dem Schachbrett

Auf dem ersten Feld liegt ein Korn, dann zwei Körner und auf dem achten Feld, wenn die Reihe voll ist, dann sind es gerade mal 128 Reiskörner respektive Weizenkörner.
Am Ende der zweiten Reihe auf dem Schachbrett sind es bereits 32768 Weizenkörner.
Am Ende der dritten Reihe sind es dann 8.388.608 Reiskörner.
Und ein Schachbrett hat insgesamt acht Reihen 🙂

Bei diesem Problem, ein Reiskorn auf Feld 1 und dann immer verdoppeln kommt man am Ende, bei 64 Schachfeldern, übrigens auf 2hoch64-1 Reiskörner. Das wären dann insgesamt: 18.446.744.073.709.551.615

Soviel Reis oder Weizen kann man sich kaum vorstellen. Wenn es übrigens Getreidekörner wären, dann braucht man wohl 104 Milliarden Transporter. Wenn man diese Transporter aneinander reiht, dann würden diese eine Strecke von 793 Millionen Kilometern bilden (die Erde hat nur einen Umfang von 40.000 Kilometern). Schließlich wären es 922 Milliarden Tonnen Weizen auf dem Schachbrett (… naja, das wäre ein sehr gigantisches Schachbrett).

Hier kann man die Geschichte und alle Berechnungen dazu auch nachlesen.
Sissa ibn Dahir und das Schachbrettproblem

Und hier gibt es mehr Infos rund um Text spinning, ARtikel Spinner und wie die Programme arbeiten: Text Sppinner

6 Kommentare

  1. Vielleicht könntest du zunächst erläutern, was ein Spinner ist bzw. macht?

    • arbeitsmaus

      12. Dezember 2011 at 02:07

      oh, ich setze wohl schon wieder zu viel voraus?
      Ein Textspinner macht aus einem Text, in dem per einer speziellen Syntax verschiedene Varianten vorgegeben werden, viele verschiedene Texte.
      Aus diesem Text:
      {Online|Zu Hause|Im Internet} arbeiten macht {Spaß|ist interessant|ist manchmal etwas einsam}.
      würde der Textspinner automatisch neun Varianten erstellen.
      Wie gut der Text wird hängt stark vom Basistext aber auch vom Spinner selbst ab. Hochgeistige Literatur wird man aber wohl damit nicht erzeugen sondern viel Müll. Aber für kurze Beschreibungen ist so ein kleiner Spinner doch sehr nützlich.

      Danke für Deinen Hinweis.

  2. „Aber für kurze Beschreibungen ist so ein kleiner Spinner doch sehr nützlich“

    Wenn man kein eigenes Hirn hat – dann ja!

    • arbeitsmaus

      18. Dezember 2011 at 03:43

      soso, es zeugt also von Hirn, wenn man 100 Beschreibungen per Hand schreibt und dafür zehn Mal so lange braucht als wenn man einen Spinner einsetzt?
      Diese Logik erschließt sich mir nicht wirklich.
      Aber ruf Du noch mal bei mir an …

  3. Hi!
    Mich würde mal interessieren, wie du die Uniqueness der einzelnen Texte berechnet hast, denn das ist echt eine Wissenschaft. So muss man analysieren, wie oft Wörter vorkommen, wie nahe diese beieinander stehen, nach Mustern suchen, etc. Gibt´s da vielleicht irgendeine frei verfügbare PHP-Klasse, die man dafür missbrauchen kann? Das einzige, was mir einfallen würde, ist das PEAR-Package „Text_Diff“.

    Und gegen das „Nur für kurze Texte“ verwahre ich mich. Wenn man Ahnung von Spinning hat, und bereit ist, etwas Zeit zu investieren (ca. 1h/200 Wörter) kann man locker 100 Texte produzieren, die sich super lesen lassen.

  4. arbeitsmaus

    27. Februar 2012 at 19:34

    Hallo Jan,
    ich will ja keine Promotions-Kommission reinlegen 🙂
    Daher habe ich den Text erst mal um die Satzzeichen und Umbrüche bereinigt und in kleinere Teile zerlegt und die dann verglichen. Zu Gucken wie oft das, oder, und vorkommt wäre ja etwas albern. Also hab ich die Tokens und ihre Häufigkiet verglichen. Aber mit was selbst geschriebenen.

    Und gegen Deine Verwahrung: 200 Wörter ist ein kurzer Text 🙂

    Wobei sich meine Einschränkung im Übrigen nicht auf die Sinnvolligkeit eines Spinners bezog sondern darauf, dass ich beim Umsetzen der Programmierung einen Fehler gemacht habe, der an das erwähnte Reis-Schachkorn-Problem erinnert. Mein neuer Spinner kann auch mit langen Texten umgehen. Bzw. mit Texten, die viele Spinn-Stellen enthalten. Bei der ersten Version hat sich das Teil bereits nach 10 Möglichkeiten totgestrickt.
    Winke

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

*