Seite 2 von 2
Re: Zuviel Magie?
Verfasst: Donnerstag 17. Oktober 2013, 11:03
von Sirius3
@mutetella:
mutetella hat geschrieben: wenn mir die Abfrage nicht nur das Ergebnis, sondern auch den zugrundeliegenden term zurückliefert.
Ich denkte doch, das Ergebnis ist eine Liste mit Terminen, was sollte die Abfrage sonst liefern. Aber was zum

ist denn 'term'?
Re: Zuviel Magie?
Verfasst: Donnerstag 17. Oktober 2013, 11:45
von mutetella
Sirius3 hat geschrieben:Ich denkte doch, das Ergebnis ist eine Liste mit Terminen, was sollte die Abfrage sonst liefern.
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 Ausdruck
Code: Alles auswählen
(12. Oktober or 13. Oktober) and ('Zahnarzt' or 'Kieferorthopäde')
bilde, dann sehe ich einem Termin aus der Trefferliste ja nicht an, ob das der Zahnarzt- oder Kieferothopäden-Termin zum 12. oder zum 13. ist.
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.
Sirius3 hat geschrieben:Aber was zum

ist denn 'term'?
'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?
mutetella
Re: Zuviel Magie?
Verfasst: Donnerstag 17. Oktober 2013, 11:48
von Sirius3
@mutetella: Der Termin weiß doch, dass er Zahnarzt am 12. oder Kieferorthopäde am 13. ist. Die Trefferliste muß das doch nicht wissen!
Re: Zuviel Magie?
Verfasst: Donnerstag 17. Oktober 2013, 12:56
von mutetella
@Sirius3: Mal konkret: Ich habe folgende Termine:
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])]
Jetzt möchte ich wissen, ob ich am 12. oder am 13. zum Zahnarzt oder zum Kieferorthopäden muss:
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'))
)
)
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
Re: Zuviel Magie?
Verfasst: Donnerstag 17. Oktober 2013, 13:08
von BlackJack
@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))``.
Re: Zuviel Magie?
Verfasst: Donnerstag 17. Oktober 2013, 13:53
von mutetella
BlackJack hat geschrieben:Alternativ könntest Du ... ein „Match”-Objekt zurückgeben lassen ...
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.
mutetella
P.S. Sorry, dass meine Fragestellung offensichtlich dermaßen umständlich war...
