Ich denkte doch, das Ergebnis ist eine Liste mit Terminen, was sollte die Abfrage sonst liefern. Aber was zum ist denn 'term'?mutetella hat geschrieben: wenn mir die Abfrage nicht nur das Ergebnis, sondern auch den zugrundeliegenden term zurückliefert.
Zuviel Magie?
@mutetella:
Das Ergebnis ist eine Trefferliste mit Terminen, ja. Was aber den oder die jeweiligen Treffer erzeugt hat, weiß ich da (nicht) mehr. Wenn ich also einen AusdruckSirius3 hat geschrieben:Ich denkte doch, das Ergebnis ist eine Liste mit Terminen, was sollte die Abfrage sonst liefern.
Code: Alles auswählen
(12. Oktober or 13. Oktober) and ('Zahnarzt' or 'Kieferorthopäde')
Wenn ich eine solche Information dann in der Anzeige wie auch immer hervorheben möchte, muss ich das nochmals abfragen. Außer meine Ergebnisliste wird etwas gesprächiger.
'term' ist wohl wieder ein Begriff, den ich offensichtlich falsch verwende... Ich meine damit eben den Suchbegriff, also '12. Oktober' oder 'Zahnarzt'. Wobei ein Datum natürlich keinen Begriff darstellt, aber wie sollte ich das denn dann nennen?Sirius3 hat geschrieben:Aber was zum ist denn 'term'?
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
@Sirius3: Mal konkret: Ich habe folgende Termine:Jetzt möchte ich wissen, ob ich am 12. oder am 13. zum Zahnarzt oder zum Kieferorthopäden muss:Wenn ich nun meine `appts` mit `expr` vergleiche, erhalte ich eine Ergebnisliste, die meinen Zahnarzt-Termin enthält. Wenn ich nun in der Anzeige den Treffer 'Zahnarzt' und '13.10.' hervorheben möchte, habe ich diese Informationen nicht, weil diese sich ja in `expr` befanden. Jetzt müsste ich also vor der Anzeige nochmals den Termin fragen, ob er auf `Zahnarzt` oder `Kieferorthopäde` oder auf 12.10. oder 13.10. reagiert hat.
mutetella
Code: Alles auswählen
class Appointment(object):
def __init__(self, title, scope):
self.title = title
self.scope = scope
appts = [Appointment('Zahnarzt', [13]), Appointment('Nervenarzt', [13])]
Code: Alles auswählen
expr = And(
Or(
Contains(Constant('Zahnarzt'), Attribute('title')),
Contains(Constant('Kieferorthopäde'), Attribute('title'))
),
Or(
Contains(Constant(12), Attribute('scope')),
Contains(Constant(13), Attribute('scope'))
)
)
Code: Alles auswählen
[appt for appt in appts if submit(expr, appt)]
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
@mutetella: Ja genau, das müsstest Du tun. Alternativ könntest Du Deine Ausdrücke statt `True` oder `False` zum Beispiel `None` und ein „Match”-Objekt zurückgeben lassen welches den Termin und Informationen darüber enthält welche Teile des Ausdrucks zum Treffer geführt haben. So ähnlich wie das `re`-Modul. Der Code könnte dann beispielsweise so aussehen: ``matches = filter(None, (submit(expr, appointment) for appointment in appointments))``.
Ja, so werde ich das wohl machen. Ursprünglich wollte ich das nicht, weil ich nur die Datumsschleife vor Augen hatte und mir die Suchroutine zu speziell geworden wäre, hätte ich dort eine Rückgabe nur der Datumstreffer implementiert. Inzwischen wurde mir klar, dass ich die Trefferrückgabe aber auch für alle anderen möglichen Typen haben möchte, da ja z. B. ein gefundener Text auch irgendwie hervorgehoben werden will.BlackJack hat geschrieben:Alternativ könntest Du ... ein „Match”-Objekt zurückgeben lassen ...
mutetella
P.S. Sorry, dass meine Fragestellung offensichtlich dermaßen umständlich war...
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )