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.
Text in Dokumenten suchen re oder str-Methoden
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
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.
Hallo
Wenn du die Suchwörter loggen willst bietet sich IHMO re.findall an :
das liefert dir dir eine Liste der gefundenen Wörter.
Gruß Karo
Wenn du die Suchwörter loggen willst bietet sich IHMO re.findall an :
Code: Alles auswählen
re.findall("wort1|wort2|wort3", TEXT )
Gruß Karo