Mailinglisten-Archive |
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