Text in Dokumenten suchen re oder str-Methoden

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
kstieger
User
Beiträge: 6
Registriert: Freitag 18. Juni 2010, 07:02

Hallo Board!

Mein Problem: Meine Anwendung holt den Text aus PDF-Dateien in einen String und sollte diesen String auf Vorkommnisse bestimmter Begriffe prüfen. Wenn ein solcher Begriff im String vorkommt wird dies geloggt.

Ich habe jetzt eine funktionierende Lösung mit Regular Expressions (modul re) und eine mit der eingebauten Methode str.find().
Da bei diesen System u. U. tausende PDFs in kurzer Zeit untersucht werden müssen, hätte ich gerne die effizienteste Lösung.
Persönlich gefällt mir die str.find() Variante am Besten, stoße ich mit der irgendwann an Grenzen?

Besteht die Möglichkeit nach mehreren Suchbegriffen in einem Durchlauf zu suchen?
Momentan wiederhole ich den Suchvorgang für jeden Suchberiff auf den ganzen Text/String. Das kommt mir auch nicht besonders effizient vor, hab aber noch keine Lösung.

Vielen Dank im Voraus.
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Hallo,

ich habe einfach mal probeweise 100.000 Mal mit str.find() und re.search() suchen lassen - re.search() war ca. 3 Mal schneller. Ich denke aber auch, dass der Flaschenhals ohnehin die I/O sein wird.

Nach mehreren Begriffen kann man mit re ganz einfach: re.search("(?=.*wort1)(?=.*wort2)", TEXT) gibt None zurück, wenn kein Wort gefunden wurde und ein Match-Objekt, wenn ein Wort gefunden wurde. Ich bin aber auch kein RegEx-Fachmann, das geht sicher noch etwas effizienter? Zumindest dauert diese Variante bei 100.000 Durchgängen eines längeren Textes (10.000 Worte, 60.000 Buchstaben) schon ordentlich lange.

Schönen Gruß,

brb
Zuletzt geändert von Barabbas am Freitag 18. Juni 2010, 07:46, insgesamt 1-mal geändert.
kstieger
User
Beiträge: 6
Registriert: Freitag 18. Juni 2010, 07:02

Danke Barabbas!

Tut mir leid, da hätt ich auch selber drauf kommen können. :roll:
In diesem Fall werde ich wohl nicht um 're' herumkommen.

Danke.
karolus
User
Beiträge: 141
Registriert: Samstag 22. August 2009, 22:34

Hallo
Wenn du die Suchwörter loggen willst bietet sich IHMO re.findall an :

Code: Alles auswählen

re.findall("wort1|wort2|wort3", TEXT ) 
das liefert dir dir eine Liste der gefundenen Wörter.

Gruß Karo
Antworten