Boolesche Textsuche in Python

8

Ich suche nach einem oder mehreren vorhandenen Modulen, die es mir ermöglichen, grundlegende boolesche Abfragen für das Vergleichen und Suchen von Texten zu schreiben, ohne meinen eigenen Parser zu schreiben usw.

zum Beispiel

%Vor%

würde mit TRUE übereinstimmen "der Präsident Ronald Ragen" "Der Präsident Ronald Ragen und Busch" "Max Busch war kein Präsident"

aber falsch auf "George Bush war ein Präsident" "Ich kann Ronald Ragen nicht buchstabieren"

(Bislang habe ich Booleano gefunden, was etwas übertrieben erscheint, aber ich könnte die Aufgabe übernehmen. Ihre Gruppe ist jedoch inaktiv, und ich konnte aus der Dokumentation nicht herausfinden, was zu tun ist.)

Danke

Bearbeiten: Der genaue Stil oder die Grammatik ist nicht kritisch. Mein Ziel ist es, Nicht-Tech-Nutzern die Möglichkeit zu geben, bestimmte Texte über die Stichwortsuche hinaus zu durchsuchen.

    
Berry Tsakala 11.02.2010, 17:53
quelle

3 Antworten

2

Es wäre ziemlich glücklich, eine bereits vorhandene Bibliothek zu finden, die bereit ist, den von Ihnen bereitgestellten Beispielausdruck zu parsen. Ich empfehle Ihnen, Ihr Ausdruckformat ein wenig maschinenlesbarer zu machen und dabei seine Klarheit zu bewahren. Ein Lisp S-Ausdruck (der Präfixnotation verwendet) ist kompakt und klar:

(und "Präsident" (oder "Ronald" "George" "Sally"))

Das Schreiben eines Parsers für dieses Format ist einfacher als für Ihr Format. Oder Sie können einfach zu Lisp wechseln und es analysiert es nativ. :)

Randnotiz: Ich nehme an, Sie wollten Ihren "NOT" Operator nicht binär machen, oder?

    
seanmac7577 11.02.2010 18:05
quelle
1

Sie können sich den simpleBool.py Code auf diese Seite , die das Pypar-Modul verwendet. Ansonsten, hier ist ein einfacher Code, den ich geschrieben habe.

Dies ist kein Modul, aber es könnte Sie in die richtige Richtung bringen.

%Vor%

und du kannst andere testen. Ich habe tmp benutzt, weil die Linie so lang wurde

    
Justin Peel 11.02.2010 18:07
quelle
1

Ich benutze sphinx für die Volltextsuche von Python auf meiner Website. Es hat eine einfache Syntax, die Boolean-Anpassungen unterstützt, aber mit Operatoren, nicht mit Wörtern. Ihre Abfrage wäre beispielsweise president (regan|(bush -george)) .

Lucene hat die gleiche Funktion .

    
Jochen Ritzel 11.02.2010 18:29
quelle