Suchmaschineneingaben splitten
alex
- perl
0 Frank Schönmann0 alex
Hi
Ich bin am Basteln einer Suchmaschine und am Punkt angelangt, wo
ich nur noch die Effizienz erhöhen muß, sprich die Suchgenauigkeit.
Jetzt soll der User z.B. folgendes eingeben:
+begriff1 -begriff2 +"begriff3 begriff4" begriff5 begriff6 "begriff7 begriff8"
Meine Idee war nun Arrays anzulegen:
@arr_plus = (begriff1, begriff3 begriff4)
@arr_minus = (begriff2)
@arr_oder = (begriff5, begriff6, begriff7 begriff8)
mit denen ich dann bequem weiterarbeiten kann.
Hat einer eine Idee, wie ich die Zeile splitte?
Ich kenne mich mit den regulären Ausdrücken noch nicht so aus und
meine Versuche das Plus oder Minus zu erkennen scheiterten immer.
Nach Leerzeichen konnte ich nicht splitten, da die ja evtl. wichtig
sein könnten...
Vielen Dank im voraus.
hi!
Hat einer eine Idee, wie ich die Zeile splitte?
Ich kenne mich mit den regulären Ausdrücken noch nicht so aus und
meine Versuche das Plus oder Minus zu erkennen scheiterten immer.
Nach Leerzeichen konnte ich nicht splitten, da die ja evtl.
wichtig sein könnten...
Der Parser der SELFHTML-Archivsuche, hier auf diesem Server, kann das
wohl:
=== cut ===
sub parser ()
{
# -------------------------------------------------------
# lokale Kopie des Suchausdrucks
my $rest = $suchausdruck;
# -------------------------------------------------------
# Ersetze " durch " und zähle sie dabei ... (gulp, das "perlt"...)
my $anzahl_gf = ($rest =~ tr/"/"/);
# Sicherstellen, daß eine gerade Anzahl von ' darin enthalten ist:
if (($anzahl_gf % 2) == 1) { $rest .= '"'; }
# ... notfalls eben hinten eines dranhängen!
# -------------------------------------------------------
# Leerzeichen innerhalb von Anführungszeichen nach '%20' konvertieren
while ($rest =~ /"[\S][^"]+\s[^"]+[\S]"/)
{ $rest =~ s/"([\S][^"]+)\s([^"]+[\S])"/"$1%20$2"/; }
# (fixed version, Frank Schönmann 14.9.1999)
# -------------------------------------------------------
# Dann alle '"' rauswerfen
$rest =~ s/"//g;
# -------------------------------------------------------
# Es bleiben durch Leerzeichen getrennte Token übrig
@Token = split (/ /, $rest);
# -------------------------------------------------------
# Tokens auf @Must, @Can und @Not verteilen
for (@Token)
{
# fehlt hier noch... ;)
}
}
=== cut ===
In @Token stehen am Ende die einzelnen Suchtokens. Es gibt welche
mit + oder - am Anfang bzw. mit keinem solchen Zeichen. Danach wird
entschieden, in welches Array das letztendlich gehört.
Die obige Routine unterstützt übrigens auch die Zusammenfassung durch
Leerzeichen getrennter Ausdrücke mit Anführungszeichen.
bye, Frank!
Hi
Auf dich ist verlaß .-)
Thank you.