Rolf B: Schlagwort eingeben... wie hier im Forum

Beitrag lesen

Hallo Richard,

Vielleicht kann mich jemand in die richtige Richtung schupsen.

Ich schubse dich unter anderem in Richtung Rechtschreibprüfung...

Aber welche Stichworte kann ich Dir geben? Schwierig.

Das Forum tut mehrere Dinge.

  • den Posting-Text analysieren und Schlagwortvorschläge machen - da habe ich keine Ahnung, wie Christian das gelöst hat.
  • selbst eingegebene Schlagwörter gegen die Liste der zulässigen Schlagwörter prüfen
  • einem Posting die ausgewählten Schlagwörter zuordnen
  • beim Suchen nach Beiträgen eine Suche nach Schlagwörtern ermöglichen

Das wird aber - sofern der Browser JavaScript unterstützt - nicht alles am Server gemacht, sondern es passiert auch eine Menge mit JavaScript im Browser, damit die Schlagwortvorschläge live erscheinen. Tatsächlich scheint das komplett im Browser zu passieren; ich beobachte keinen Netzwerkverkehr, der das am Server erledigt.

Auch das Prüfen selbst eingegebener Schlagwörter erfolgt ohne Serverzugriff, rein mit JavaScript.

Wenn man das mit reinem PHP machen will, verschwindet ein guter Teil der Interaktivität. Du kannst das Formular dann nur zum Server senden und dann Schlagwortvorschläge hinzufügen, die der User ankreuzen kann. Und selbst eingegebene Schlagwörter überprüfen. Unbekannte oder unzulässige Schlagwörter abweisen.

Je nach dem, ob Du Schlagwörter whitelisten (nur Wörter aus der Whitelist, alles andere ist verboten) oder blacklisten (alles außer den Wörtern in der Blacklist ist erlaubt) willst, musst Du dann die vom User gewünschten Schlagwörter gegen die Schlagwortliste abgleichen.

Für Schlagwortvorschläge müsstest Du den Formulartext in Wörter zerlegen (PHP explode). Und dann brauchst Du eine Datenbank, mit der Du Schlagwortvorschläge finden kannst. Es ist vermutlich am einfachsten, zu jedem Schlagwort, das Du vorschlagen können willst, eine Liste von Triggerwörtern zu erstellen. Stimmt ein Wort im Posting mit einem der Triggerwörter überein, bringst Du den Schlagwortvorschlag dazu. Das macht man sinnvollerweise mit einer Datenbanktabelle. Natürlich musst Du auch Varianten der Triggerwörter kennen (Singular/Plural, Deklination, etc).

Wenn Du einen Text mit 400 Worten hast, wären das 400 SQL Abfragen. Viele dieser Worte werden aber keine Triggerwörter sein, sondern Wörter, die Satzstrukturen bilden: Artikel (der, die, das), Pronomen (ich, du, er, sie, es), Konjunktionen (und, oder, aber). Für solche Wörter solltest Du gar nicht erst in die Schlagwortsuche einsteigen, allerdings ist das auch ein Balanceakt. Wenn Du nämlich eine Datenbankabfrage machen musst, um zu wissen, ob ein Wort ein Schlagwort-Trigger sein kann, bringt das nichts. In PHP wäre hier ein Assoziatives Array angesagt, dessen Schlüssel die Stopwörter darstellen. Mit isset($stopwords[$wort]) findest Du dann schnell heraus, ob ein Wort ein Stopwort ist oder nicht.

Hier solltest Du dann, wenn das Ganze in Betrieb geht, auch ein bisschen Statistik machen und die Wörter loggen, mit denen nach Schlagworttriggern gesucht wird. Daraus können sich dann nützliche Stopworte ableiten. Aber es dürfen nicht zu viele Stopworte werden, sonst dauert der Aufbau der Stopwortliste länger als die Zeit, die Du mit dem Stopworten sparst.

Das Zuordnen der Schlagworte zu Dokumenten (Postings, Blogeinträge, Gästebucheinträge, wasauchimmer) ist dann eine Sache für eine M:N Zuordnung. Ein Dokument kann N Schlagworte haben, ein Schlagwort kann M Dokumenten zugehörig sein, das löst man über eine Beziehungstabelle. Komm nicht auf die Idee, Dich auf 3 Schlagworte festzulegen und am Dokument drei Spalten für Schlagwörter vorzusehen. Damit verlässt Du den Bereich sauberen Datenbankdesigns (Stichwort Normalisierung).

Rolf

--
sumpsi - posui - obstruxi