Zu lange regex, alternative gesucht

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.
Antworten
patmaster
User
Beiträge: 106
Registriert: Donnerstag 3. Februar 2011, 17:21

Mittwoch 7. November 2012, 10:53

Hi,

Ich verwende pyparsing um, halbwegs komplizierte Zitate zu finden. Diese Zitate bestehen natürlich aus verscheidenen Teilen die ich mit pyparsing erkenne und dann zusammenstückle um sie zu verarbeiten.
Ein Teil des Zitats ist ein Name. Die Namen gehen von "ABGB" bis "Versicherungsmakler- und -berater-V", sprich das kann ich nicht in einer regex Ausdrücken.
Mein Problem ist jetzt das die Wortkette mittlerweile so lange ist, das die resultieren regex zu lange wird und ich folgenden Fehler bekomme:
OverflowError: regular expression code size limit exceeded
Nachdem pyparsing aber afaik regexes braucht, weis ich nicht was ich machen soll.

Ideen ?

Ich darf den Code wegen Firmenrichtlinien nicht posten, hoffe aber das ihr mein problem auch so versteht und mir evtl. Tipps geben könnt.

Danke schon mal !
Benutzeravatar
snafu
User
Beiträge: 5990
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Mittwoch 7. November 2012, 11:24

Dann gib doch wenigstens Pseudobeispiele zur Struktur der Daten. Denke nicht, dass mit den bisherigen Infos jemand was sinnvolles zu der Frage beitragen kann. Außer vielleicht, dass man bei der Verwendung von PyParsing eher *nicht* zu regulären Ausdrücken greift. Oder meinst du das, was PyParsing am Ende generiert?
lunar

Mittwoch 7. November 2012, 11:42

@patmaster Zur Verarbeitung natürlicher Sprachen ist pyparsing (oder allgemein jede formale Parser-Bibliothek) denkbar ungeeignet. Weiß Gott, wie Du überhaupt darauf gekommen bist, sie dafür einzusetzen… und bei allem Respekt, wenn Du versuchst, Zitate in natürlicher Sprache mit PyParsing zu finden, kann es mit dem Code nicht so weit her sein, als dass er ein wesentliches Firmengeheimnis sein könnte.

Verzichte auf PyParsing, oder jede andere Parser-Bibliothek. Nutze entweder jeweils einen regulären Ausdruck pro gesuchter Phrase, und iteriere über alle regulären Ausdrücke, um Treffer im Text zu finden, oder nutze NLTK.
patmaster
User
Beiträge: 106
Registriert: Donnerstag 3. Februar 2011, 17:21

Mittwoch 7. November 2012, 12:25

lunar hat geschrieben:@patmaster Zur Verarbeitung natürlicher Sprachen ist pyparsing (oder allgemein jede formale Parser-Bibliothek) denkbar ungeeignet. Weiß Gott, wie Du überhaupt darauf gekommen bist, sie dafür einzusetzen… und bei allem Respekt, wenn Du versuchst, Zitate in natürlicher Sprache mit PyParsing zu finden, kann es mit dem Code nicht so weit her sein, als dass er ein wesentliches Firmengeheimnis sein könnte.

Verzichte auf PyParsing, oder jede andere Parser-Bibliothek. Nutze entweder jeweils einen regulären Ausdruck pro gesuchter Phrase, und iteriere über alle regulären Ausdrücke, um Treffer im Text zu finden, oder nutze NLTK.
Ich warte das Teil nur, aber bisher hat das Prima geklappt.
Natürlich ist der Code nicht ultra geheim usw, aber ich halt mich lieber an diese Regel, egal wie unnötig sie erscheint.
Zitate war vlt. etwas unverständlich, bzw unvollständig ausgedrückt. Es handelt sich um Zitate von Gesetzesstellen, also zum Beispiel
"§1 BGB Abs. 4" oder "§§1, 2 und 4 BGB "

Es gibt also schon Muster, die sich wiederholen und die man mit pyparsing sehr schön zusammenstückeln kann.
Ich würde also nicht sagen das es wirklich ungeignet ist. Diese Wörter um die es geht, sind auch eigentlich nur die Namen der Normen, also in diesem Beispiel BGB. Der Rest ist im Prinzip Patternmatching in den verschiedensten Reihenfolgen und da ist doch pyparsing nicht so verkehrt oder ?

NLTK schaut aber trotzdem interessant aus, danke für den Tipp.
Antworten