Hallo,
ich möchte in einem searchpattern Markierungen setzen, die angeben, ob ein Wort 'oder', 'und' bzw. 'nicht' vorkommen soll.
Jetzt habe ich mir überlegt, dass die Funktion, die searchpatterns zurückgibt, die Wörter unter anderem mit einem vorangestellten '|' und '&' markiert.
Allerdings ist mir der Unterschied der bitweisen Zeichen '~' und '!' nicht wirklich klar. Das Tilde wird für das bitweise NICHT, das Ausrufezeichen für das logische NICHT verwendet.
Wo liegt da der Unterschied und welches der beiden Zeichen wäre denn für meinen Einsatz das korrekte?
mutetella
Tilde oder Ausrufezeichen für not?
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit
)
-
deets
Das kannst du doch einfach im interpreter ausprobieren:
Fuer deinen Fall ist es also das logische nicht, denn du willst ja nicht das Wort, das aus den Buchstaben besteht, die durch flippen der einzelnen Bits entstehen, sondern das das Wort als ganzes nicht mehr vorkommt.
Code: Alles auswählen
>>> not 10
False
>>> ~10
-11
-
BlackJack
Wobei das hier eigentlich irrelevant ist, denn weder '!' noch '~' hat eine logische oder bitweise Bedeutung wenn man das nicht definiert. In Python gibt es '!' ja nicht einmal als logisches nicht. Wenn man also nicht daran gebunden ist, eine bestimmte Programmiersprache zu ”simulieren”, kann man jedes Zeichen nehmen und muss es dem Benutzer halt in der Dokumentation erklären. Wenn es um Suchen geht, könnte man genau so gut '-' nehmen, wie das bei vielen Suchmaschinen üblich ist um Worte auszuschliessen.
Falls es nicht unbedingt um die Eingabe von Benutzern geht und Unicode erlaubt ist, würde ich ja '¬' für ”nicht” verwenden. Und '∧' für ”und” und '∨' für ”oder”.
Falls es nicht unbedingt um die Eingabe von Benutzern geht und Unicode erlaubt ist, würde ich ja '¬' für ”nicht” verwenden. Und '∧' für ”und” und '∨' für ”oder”.
-
deets
Klar, du kannst das natuerlich voellig frei definieren. Aber ich wuerde schon versuchen, nah an einer allgemein bekannten & aktezptierten Semantik bestimmter Symbole zu bleiben. Die Tilde ist ein als logischer Operator so selten gebrauchtes Ding - wer fiddelt schon mit Bits im Zeitalter von Sets und anderen collections ..
- das es den Leuten wenig bekannt ist. Das ! als not aber schon.
Strenggenommen muesste man dann auch bei && und || landen - aber das ist dann wieder ein bisschen uebertrieben finde ich.
Strenggenommen muesste man dann auch bei && und || landen - aber das ist dann wieder ein bisschen uebertrieben finde ich.
@lunar:
Einzelne Zeichen finde ich einfacher zu extrahieren als Wörter, zudem 'not' und 'or' noch nicht einmal dieselbe Länge haben.
mutetella
Wie lässt sich das kaufmännische '&' innerhalb eines code-tags anzeigen?
Einzelne Zeichen finde ich einfacher zu extrahieren als Wörter, zudem 'not' und 'or' noch nicht einmal dieselbe Länge haben.
Code: Alles auswählen
if '!foo'[0] == '!':
#'foo' not in
pass
if '&foo'[0] == '&':
#and 'foo' in
pass
if '|foo'[0] == '|':
#or 'foo' inWie lässt sich das kaufmännische '&' innerhalb eines code-tags anzeigen?
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit
)
-
lunar
@mutetella: Ist nicht Dein Ernst, oder? Immerhin gibt es ".startswith()":
Code: Alles auswählen
if foo.startswith('not '):
# …
elif foo.startswith('and '):
# ...
elif foo.startswith('or '):
# …@lunar Die meisten User sind sich über die Existenz von Operatoren bei Suchmaschinen nicht bewusst, du musst also bei einer Suchfunktion davon ausgehen, dass ein "and", "or" oder "not" wahrscheinlich kein Operator sein soll. Desweiteren ist das Parsen einfacher wenn man Whitespace ignorieren kann.
@lunar:
Ok, würde so auch funktionieren, gefällt mir aber nicht wirklich...
@DasIch:
Die Markierung wird in meinem Fall nicht vom User sondern einer Funktion, die searchpatterns erstellt, an den Suchbegriff vorangestellt.
Ob das nun ein '!' oder ein 'not ' oder sonstwas ist, spielt eigentlich keine Rolle. Aus einem auszuschließenden Suchbegriff 'not a trick' wird demnach ein 'not not a trick' bzw. ein '!not a trick'.
mutetella
Ok, würde so auch funktionieren, gefällt mir aber nicht wirklich...
@DasIch:
Die Markierung wird in meinem Fall nicht vom User sondern einer Funktion, die searchpatterns erstellt, an den Suchbegriff vorangestellt.
Ob das nun ein '!' oder ein 'not ' oder sonstwas ist, spielt eigentlich keine Rolle. Aus einem auszuschließenden Suchbegriff 'not a trick' wird demnach ein 'not not a trick' bzw. ein '!not a trick'.
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit
)
-
lunar
@DasIch: Ja und? Die Bedeutung der Wörter bleibt dieselbe. Wer nach „elephants and mice“ sucht, meint Mäuse und Elefanten, also die Konjunktion beider Suchbegriffe. Man kann diese Wörter also getrost als Operatoren betrachten, denn auch in natürlicher Sprache stehen sie für Konjunktion, Disjunktion und Negation.
Leerzeichen kann man so oder so nicht ignorieren, denn "elephantsandmice" ist ganz offensichtlich nicht das, was der Nutzer sucht, wenn er obiges eingibt.
@mutetella: Die Suchterme werden automatisch generiert?! Also dann ist es doch wirklich vollkommen egal, welches Symbol Du für die Negation verwendest.
Leerzeichen kann man so oder so nicht ignorieren, denn "elephantsandmice" ist ganz offensichtlich nicht das, was der Nutzer sucht, wenn er obiges eingibt.
@mutetella: Die Suchterme werden automatisch generiert?! Also dann ist es doch wirklich vollkommen egal, welches Symbol Du für die Negation verwendest.
-
deets
@lunar
Das ist ja ein bisschen zu kurz gegriffen. Wer nach "elephant or mice" sucht, der sucht wohl eher einen Text, in dem genau diese Phrase (gewichtet uU mit einem Abstandsmass) vorkommt, und nicht alle texte, in dene Elephanten oder Maeuse oder beide vorkommen.
Genau darum wuerde ich Operator-Bezeichnungen, die nicht in derselben Domaene wie die Worte leben bevorzugen.
Und wenn ich zb nach "not not" suchen moechte, und nicht danach, das "not" nicht im text vorkommt, was mache ich dann? Dann kommt man gleich zu escape-mechanismen ala Anfuehrungsstrichen usw... macht das Problem nur komplizierter. Solange natuerlich die Operatoren selbst nicht ebenfalls indiziert werden...
Das ist ja ein bisschen zu kurz gegriffen. Wer nach "elephant or mice" sucht, der sucht wohl eher einen Text, in dem genau diese Phrase (gewichtet uU mit einem Abstandsmass) vorkommt, und nicht alle texte, in dene Elephanten oder Maeuse oder beide vorkommen.
Genau darum wuerde ich Operator-Bezeichnungen, die nicht in derselben Domaene wie die Worte leben bevorzugen.
Und wenn ich zb nach "not not" suchen moechte, und nicht danach, das "not" nicht im text vorkommt, was mache ich dann? Dann kommt man gleich zu escape-mechanismen ala Anfuehrungsstrichen usw... macht das Problem nur komplizierter. Solange natuerlich die Operatoren selbst nicht ebenfalls indiziert werden...
@lunar:
Ja, ist vollkommen egal. Ich möchte dafür allerdings Zeichen verwenden, die allgemein gebräuchlich sind, so wie z. B. '|' für 'or'.
Bei 'not' war ich mir eben nicht sicher.
Ja, ist vollkommen egal. Ich möchte dafür allerdings Zeichen verwenden, die allgemein gebräuchlich sind, so wie z. B. '|' für 'or'.
Bei 'not' war ich mir eben nicht sicher.
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit
)
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Bei solchen Fragen solltest du immer an deine Zielgruppe denken, ist z.B für deine Mutter erkennbar, dass `|' ein `oder' ist? Wenn du es nicht nur mit Programmierern von C-Sprachen zu tun hast, solltest du lieber bei lunar's Vorschlag bleiben.mutetella hat geschrieben:@lunar:
Ja, ist vollkommen egal. Ich möchte dafür allerdings Zeichen verwenden, die allgemein gebräuchlich sind, so wie z. B. '|' für 'or'.
Wenn es noch um dein Kalender-Projekt geht, dann sind die ja auch nicht in der Such-Domäne und erfüllen damit deets (sinnvolle) Anforderung.
@deets: Bleiben wir bei allgemeinen Suchmaschinen-Mustern, dann sind Sonderzeichen für mich durchaus in der Domäne, so sonderbar sie auch sind. Ich Ärger mich jedenfalls immer wenn Google meine Sonderzeichen klangheimlich unterschlägt.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Dann müsste aber eine intern gesetzte Markierung 'not ' als solche gekennzeichnet werden (z. B. '*not*'), andernfalls würde eine Suche nach 'not a trick' jeden Eintrag, der 'a trick' enthält, ausschließen.cofi hat geschrieben:... dann sind die ja auch nicht in der Such-Domäne ...
Das spricht doch eher für den Einsatz von Sonderzeichen, oder?
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit
)
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Wie schön, dass du die Bedingung abschneidest 
Aber ich hatte auch einen Denkfehler, selbst wenn es noch um den Kalender geht, will man ja in Beschreibungen o.ä. suchen.
Gegen Sonderzeichen noch ein paar Beispiele:
- Nutzer A will einen Termin/... als wichtig markieren und setzt `!!' an Anfang und Ende, und will sich jetzt alle wichtigen Sachen anzeigen lassen
- Nutzer B will Schätzungen in seinen Texten verwenden und benutzt dafür eine Tilde
- Nutzer C hat einen Termin mit der Firma Müller & Söhne
- Nutzer D baut eine ASCII Tabelle in seine Notizen und benutzt Pipes
- ...
Das Problem hast du bei In-Band-Signaling immer. Nur, wenn du tatsächlich die Begriffe ausschliessen kannst, lässt sich das realisieren. Modifier funktionieren da besser, oder sonstiges was eben nicht Teil des Suchbegriffs ist.
Aber ich hatte auch einen Denkfehler, selbst wenn es noch um den Kalender geht, will man ja in Beschreibungen o.ä. suchen.
Gegen Sonderzeichen noch ein paar Beispiele:
- Nutzer A will einen Termin/... als wichtig markieren und setzt `!!' an Anfang und Ende, und will sich jetzt alle wichtigen Sachen anzeigen lassen
- Nutzer B will Schätzungen in seinen Texten verwenden und benutzt dafür eine Tilde
- Nutzer C hat einen Termin mit der Firma Müller & Söhne
- Nutzer D baut eine ASCII Tabelle in seine Notizen und benutzt Pipes
- ...
Das Problem hast du bei In-Band-Signaling immer. Nur, wenn du tatsächlich die Begriffe ausschliessen kannst, lässt sich das realisieren. Modifier funktionieren da besser, oder sonstiges was eben nicht Teil des Suchbegriffs ist.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
-
BlackJack
@mutetella: Hm, 'not a trick' schliesst alles mit 'a trick' aus? So spontan hätte ich vermutet, dass die Negation nur das 'a' betrifft. Was die meisten (Volltext)Suchmaschinen als Stoppwort ignorieren würden. Ausser vielleicht wenn man es explizit ausschliesst. Alles nicht so einfach. 
@cofi: Nutzer B soll gefälligst '≈' schreiben und D die entsprechenden Rahmenzeichen. ASCII ist sooo altmodisch. ☺
@cofi: Nutzer B soll gefälligst '≈' schreiben und D die entsprechenden Rahmenzeichen. ASCII ist sooo altmodisch. ☺
@BlackJack:
Momentan geht es nur darum, aus einer Reihe von Kategorien ('Schule', 'Privat', 'Kids' ...) eine Auswahl zu treffen. Und mit dieser Auswahl samt 'or'- 'not'- 'and'-Markierungen suche ich dann im category-Attribut, das eine Liste ist.
Eine Volltextsuche ist dafür also nicht notwendig.
Wie eine 'ordentliche' Suche über die Textfelder eines Termins/einer Notiz zu machen ist, das wirft bei mir noch viele Fragezeichen auf.
Ok, mein Beispiel 'not a trick' war doof, weil es mit dem, was ich momentan versuche zu implementieren nichts zu tun hat...
mutetella
Momentan geht es nur darum, aus einer Reihe von Kategorien ('Schule', 'Privat', 'Kids' ...) eine Auswahl zu treffen. Und mit dieser Auswahl samt 'or'- 'not'- 'and'-Markierungen suche ich dann im category-Attribut, das eine Liste ist.
Eine Volltextsuche ist dafür also nicht notwendig.
Wie eine 'ordentliche' Suche über die Textfelder eines Termins/einer Notiz zu machen ist, das wirft bei mir noch viele Fragezeichen auf.
Ok, mein Beispiel 'not a trick' war doof, weil es mit dem, was ich momentan versuche zu implementieren nichts zu tun hat...
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit
)
