phpbar.de logo

Mailinglisten-Archive

[php] =?iso-8859-1?Q?AW:_=5Bphp=5D_Suchmaschine_vor_Dummheit_der_Benu tzer____?= =?iso-8859-1?Q?_sch=FCtzen?=

[php] AW: [php] Suchmaschine vor Dummheit der Benu tzer schützen

Andreas Müller php_(at)_phpcenter.de
Mon, 15 Apr 2002 14:02:01 +0200


Hallo,
ich/wir hatten schon öffters das Problem solche intelligenten Volltextsuchen
zu bauen.
Zum einem muss man schlicht damit Leben das es Fehltreffer gibt. Und
trotzdem sage ich: Besser mehr anzeigen als zu wenig.

Suchbegriffe werden bei uns zuerst "normiert". D.h. es werden die Wörter
extrahiert, Stoppwörter entfernt (der die das etc.), in Groß oder
Kleinbuchstaben umgewandelt und Sonderzeichen ersetzt.

Die Suchbegriffe (hier Wörter auf Webseiten oder Produktbeschreibungen etc.)
liegen indiziert vor als Wortindex. Dieser Wortindex besteht aus einem
System von Wörtern und Teilwortverknüpfungen. So liegt das "Schweinefleisch"
als "Schwein", "Scheine", "Fleisch" und "Schweinefleisch" vor. Diese
Teilwörter werden durch Zerlegung der Wortstämme sofern im deutschen machbar
gebildet. Gegen diesen Wortindex wird nun gesucht. Wer also z.B. nach
"Fleisch vom Schein" sucht findet sogar das "Schweinefleisch".

Als Grundlage haben wir ganz zu Beginn eine in Internet gefundene Liste
deutscher und englischer Wörter verwendet. Diese wurde Zug um Zug erweitert
sodas heute recht gute Ergebnisse erziehlt werden.

Eine weitere Möglichkeit ist die s.g. Triplet-Suche: Dazu Suchbegriffe in
Triplets zerlegt und in der DB abgelegt. Das gleiche wird mit der
Sucheingabe gemacht. Die Abfrage sucht dann alle Datensätze heraus bei denen
alle in der Sucheingabe vorhandenen Triplets vorkommen.

Schweinefleisch -> sch,chw,hwe,wei,ein,ine,nef,efl,fle,lei,eis,isc,sch

Fleisch vom Schwein -> fle,lei,eis,isc,sch
                       sch,chw,hwe,wei,ein

Alle triplets kommen vor -> daher wird "Schweinefleisch" gefunden. Man kann
damit auch einen "Abstand" berechnen und somit das Suchergebnis
vorsortieren.

Diese Methode eignet sich ganz besonders bei sich häufig ändernden Daten da
sie leicht updatebar ist. Nachteil ist eindeutig die sehr große(n)
Suchtabelle(n) (d.h. extrem viele Datensäze).

Vielleicht ist bei diesen Ideen hier was sinnvolles dabei für das Problem.

Gruß,
Andreas


php::bar PHP Wiki   -   Listenarchive