Was ist eine gute python-parser für eine google-ähnliche Suche-Abfrage?
Für einige search-based code (in Python), ich muss eine Abfrage schreiben, syntax-parser, der würde parse eine einfache google-like query-syntax. Zum Beispiel:
alle diese Worte "mit diesem Satz"
ODER diese Seite:innerhalb.Website
filetype:ps von:lastweek
Als Suche wird mehr und mehr beliebt, ich erwartet, dass in der Lage, leicht zu finden, eine python-Bibliothek, dies zu tun, und so vermeiden, das Rad neu zu erfinden. Leider Suche auf google nicht viel ergeben.
Was würden Sie empfehlen als ein python parsing-Bibliothek für diese einfache Aufgabe?
- Möchten Sie vielleicht einen Blick auf Apache Lucene. Zu meinem Verständnis, es bedeutet etwas ganz ähnliches, obwohl es in Java, Python nicht (obwohl Sie könnte-Schnittstelle mit Hilfe von Jython).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Während
ply
ist ein klassischer Ansatz (a Pythonic Variante von lexx + yacc) und kann somit leichter für den Einstieg, wenn Sie bereits vertraut sind mit traditionellen Werkzeugen, pyparsing ist sehr pythonic und wäre meine top-Empfehlung, vor allem für solch einfache Aufgaben (die wirklich mehr wie sind das sogenannte Lexing als "full-blown" parsing... zumindest bis Sie zulassen möchten, dass das womöglich verschachtelte Klammern, aber pyparsing nicht wirklich gestört werden, indem Sie diese entweder;-).SORRY - Lepl wird nicht mehr weiterentwickelt.
Gibt es auch LEPL - http://www.acooke.org/lepl
Hier ist eine schnelle Lösung, die ich schrieb während dem Frühstück:
Ich würde behaupten, dass LEPL ist kein "Spielzeug" - obwohl es rekursiver Abstieg, es enthält memoisation und Trampolinspringen, die helfen, vermeiden einige der Einschränkungen dieses Ansatzes.
Jedoch, es ist reines Python, so dass es nicht super-schnell, und es ist in der aktiven Entwicklung (eine neue release 4.0, mit ganz wenigen Korrekturen und Verbesserungen, kommt relativ bald).
Ein paar gute Möglichkeiten:
Schwups: das problem ist nur, dass Sie paar-parsing-Beispiele, da der parser möglicherweise nicht seine main-Funktion/Fokus, aber es ist definitiv eine gute option
modgrammar: ich habe nicht versucht es, aber es scheint ziemlich flexibel und einfach
ply
pyparsing: sehr zu empfehlen. es gibt einige gute parsing-Beispiele, online -
Wenn du fertig bist mit dem Projekt, was hast du am Ende die Wahl?
PLY ist groß. Es ist auf der Grundlage der Lex/Yacc idiom und damit möglicherweise bereits vertraut sein. Es ermöglicht Ihnen die Erstellung beliebig komplexer lexers und Parser für jede Aufgabe, einschließlich die, die Sie brauchen.
Mit einem leistungsstarken Werkzeug wie PLY, anstatt ein einfaches Spielzeug ist eine gute Idee, denn die können Ihre Bedürfnisse komplexer geworden mit der Zeit und Sie möchten, um zu bleiben mit dem gleichen tool.
PyParsing wäre die richtige Wahl, obwohl es Recht mühsam, deshalb habe ich entwickelt ein query parser inspiriert, auf lucene und gmail-syntax. Es ist nur Abhängigkeit ist PyParsing, und wir haben es an mehreren Projekten. Es ist vollständig anpassbar und erweiterbar, plus es abstrahiert Sie von der pyparsing Probleme. Sie können check it out hier:
http://www.github.com/sebastiandev/plyse
Ziemlich gut dokumentiert, so finden Sie docs, wie das Abfragen, configs, etc.
Schwups hat eine umfassende Suche-Abfrage-parser-Modul schwups.qparser und Klasse QueryParser, dass sollte relativ einfach zu Anpassung an Ihren Anwendungsfall.
Sehen http://pythonhosted.org/Whoosh/parsing.html und https://bitbucket.org/mchaput/whoosh/src/55f9c484047a8306101c8eaa59e9a110f960a1c2/src/whoosh/qparser
Ich weiß, das ist eine alte Frage, aber für zukünftige Referenz, die ich gerade hochgeladen, mein Paket searchstringparser zu PyPi. Die setzt eine anständige query-parsing-Maschinen basiert auf ply. Es gibt eine Zeichenfolge geeignet für die PostgreSQL-Funktion tsquery. Sie können sich an der lexer-und parser-Klassen ein, um zu sehen, ob Sie passen Ihren Bedarf oder ändern Sie Sie entsprechend.
Feedback willkommen!