Zuviel Magie?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@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 :twisted: ist denn 'term'?
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

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 :twisted: ist denn 'term'?
'term' ist wohl wieder ein Begriff, den ich offensichtlich falsch verwende... :oops: 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
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@mutetella: Der Termin weiß doch, dass er Zahnarzt am 12. oder Kieferorthopäde am 13. ist. Die Trefferliste muß das doch nicht wissen!
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@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,

Code: Alles auswählen

[appt for appt in appts if submit(expr, appt)]
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
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
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))``.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

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... :?
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Antworten