Seite 1 von 1
Nur bestimmte Wörter aus einem Textfeld erkennen
Verfasst: 12.08.2007 21:21
von UGC
Hi,
ich möchte, dass man in ein TExtfeld z.B. "Ich suche einen guten Forenanbieter" schreibt, und dann so wörter, wie ich, suche, einen und guten weggelassen werden, sodass nur "Forenanbieter" erkannt wird und dafür bestimmte Ergebnisse ausgegeben werden.
Wie kann ich das machen?
Verfasst: 12.08.2007 22:26
von gn#36
Mehrere Möglichkeiten:
1. Whitelist
Du vergleichst die eingegebenen Wörter mit einer Liste von erlaubten Worten. Alles was nicht drin steht wird ignoriert.
2. Blacklist
Du vergleichst die eingegebenen Wörter mit einer Liste von verbotenen Wörtern. Alles was vorkommt wird ignoriert (so läuft das z.b. bei der Foren-Suche im phpBB, hier gibt es eine Sprachbezogene Stopwortliste schau mal bei den Sprachdateien nach search_stopwords.txt)
3. Wenn du Worte gewichten willst eine Kombination aus beiden
4. Ein regulärer Ausdruck der auf die Wörter passen muss/ nicht passen darf (ist aber letztlich nicht viel anderes, außer dass der Ausdruck gleich mehrere Wörter abdeckt).
Verfasst: 13.08.2007 13:14
von UGC
Das ist schon mal gut.
Könntest du mir einen Code programmieren?
Ich bin noch so ziemlich auf dem Anfänger-Level bei PHP...
Und wenn du das machst, am besten den Code mit der Whitelist-Variante.
Schon mal danke für die Tipps und auch danke, wenn du das proggst

.
Verfasst: 13.08.2007 13:29
von gn#36
Wenn man sowas selbst macht ist das meistens besser, dann kann man es auch hinterher.
Vor allem wie man aus einem Textfeld ausliest, dieses im HTML Code definiert oder ein Formular abschickt solltest du selbst erarbeiten, das ist Basiswissen ohne das es nicht geht.
Die Whitelist kann man auf verschiedene Arten aufbauen, je nachdem was dir so zur Verfügung steht bzw. was du verwenden möchtest. Die eleganteste Variante arbeitet mit einer Datenbank. In dieser hättest du eine Tabelle in der die Worte der Whitelist drinstehen und mit der abgeglichen wird. Eine deutlich schneller umzusetzende Variante wäre eine einfache Textdatei in der jedes Wort (oder jeder Satz) das erlaubt ist in einer eigenen Zeile steht. Diese Variante könnte z.b. grob so aussehen:
Code: Alles auswählen
//Datei einlesen:
$file = file('./relativer/pfad/zur/datei.txt');
//Wort vergleichen:
if(in_array($wort, $file))
{
//Das Wort ist enthalten und erlaubt
}
else
{
//Das Wort ist verboten
}
Wie man sieht also nicht sehr aufwändig, die Filterung des Wortes habe ich mir da mal gespart. Wenn du mehrere Wörter auf deren Vorkommen überprüfen möchtest, dann kannst du das in einer Schleife machen (for, foreach, while...). Hierbei solltest du allerdings die Schleife nur um den vergleichenden Teil legen so dass nicht in jedem Durchlauf die Datei neu eingelesen wird, bei vielen Wörtern und einer langen Whitelist wird man das irgendwann merken. Die Blacklist funktioniert übrigens ganz genauso, nur dass im if Zweig das Wort verboten ist und im else Zweig erlaubt.
Verfasst: 15.08.2007 13:08
von UGC
Danke.
Aber ich hab noch eine Frage:
Kann man auch z.B. einen Zeilenumbruch von alleine in "<br>" umwandeln, aber der Schreiber, diesen Tag nicht sieht.
Denn ich habe vor, dass man über ein Textfeld in ein Dokument schreibt, dass hinterher per include auf einer Seite eingefügt wird. Aber die Zeilenumbrüche müssen trotzdem da sein, weil sonst wird der Text in einer Zeile durchgeschrieben, bzw. nur in der nötigsten Anzahl von Reihen angezeigt.
Verfasst: 15.08.2007 22:07
von gn#36
[PHP:nl2br] wäre eine Möglichkeit, einfach vor der Ausgabe auf die gewünschte Variable anwenden.
Verfasst: 16.08.2007 14:47
von UGC
DAnke