Ausgeben von Regexps-Treffern inklusive Kontext

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
lobog
User
Beiträge: 2
Registriert: Mittwoch 21. März 2018, 14:30

Hallihallo liebes Forum,

ich studier' Geschichte und hab' mit Programmieren leider so gar nichts am Hut; ich arbeite mich grade für meine Diplomarbeit durch mittellateinische Enzyklopädien und suche darin nach Belegen zu Afrika (dem Kontinent). Da diese Enzyklopädien verdammt lang sind (22.000 Seiten bei Vinzenz von Beauvais beispielsweise) ist das analog praktisch nicht zu bewältigen (schon gar nicht mit meinen Lateinkenntnissen); bzw. schon, aber halt nur die Kapitel, die das Inhaltsverzeichnis als einschlägig ausweist, alle anderen Textstellen (z.B. Sprachen Afrikas im Kapitel "Sprachen", das man sich vielleicht nicht unbedingt ansehen würde) gehen dabei durch die Finger.
Da's diese Texte teilweise auch in ocr-kodierter Fassung bzw. als .txt-Dateien gibt, hab' mir gedacht, man könnte das ja auch digital machen, und hab mich daher diese Woche mal versucht, mich in meine Python-Unterlagen zu vertiefen, die ich noch von einer Summerschool hatte. Meine Gedanken:

Im Lateinischen gibt's eine Vielzahl von Flexionsendungen, daher würden mir mit einer einfachen Suche nach dem folgenden Code alle Treffer zu "Africae, Africam,Africe" usw. durch die Finger gehen.

Code: Alles auswählen

with open ('De naturis rerum.txt', encoding='utf-8') as fp:
    for line in fp:
        if 'Africa' in line:
            print(line.rstrip())
Eine Suche mit 'fric' hätte einen Haufen false positives zur Folge.

Ich hab' mir daher gedacht, dass ich das über Regexps angehen könnte - und ich hab' leider wirklich gar keine Ahnung und bis jetzt noch nicht genügend Zeit, mir die Fachliteratur genauer anzusehen (auch, weil ich sie z.T. nicht versteh', mea culpa). Aber das hier is mein vorläufiger Versuch:

Code: Alles auswählen

import re
with open ('De naturis rerum.txt', encoding='utf-8') as fp:
    text = fp.read()
    hit = re.findall('Afric.*', text)
    print(hit)
Is halt natürlich blöd, weil da nur die jeweiligen Wörter (und nicht der Kontext) angezeigt wird. Daher hab' ich folgende Frage: Ist's möglich, einen vermittels Zeilenumbruch schon strukturierten Text so zu durchsuchen, dass ich immer einen Absatz ausgegeben bekomme, wenn in ihm eine Form vorkommt, die ich mit re.findall finden würde? Und ist's überhaupt klug, gäb's vielleicht eine geschicktere Lösung?

Ich danke schon jetzt für Rückmeldungen und möchte um Entschuldigung bitten, wenn meine Frage zu banal sein sollte. Für mich ist sie's momentan nicht.

Liebe Grüße
Lo
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@lobog: vielleicht bist Du mit einem Texteditor besser bedient. Die können auch (fast) alle nach regulären Ausdrücken suchen und Du siehst auch gleich den Context. Der Suchausdruck ist dann am besten `afric[ae]` unter Ignorierung der Groß-/Kleinschreibung, wenn der Text nicht auch noch Akzente enthält.
lobog
User
Beiträge: 2
Registriert: Mittwoch 21. März 2018, 14:30

Sirius3 hat geschrieben:@lobog: vielleicht bist Du mit einem Texteditor besser bedient. Die können auch (fast) alle nach regulären Ausdrücken suchen und Du siehst auch gleich den Context. Der Suchausdruck ist dann am besten `afric[ae]` unter Ignorierung der Groß-/Kleinschreibung, wenn der Text nicht auch noch Akzente enthält.
Ach, echt? Das wusst ich nicht. Ja, das vereinfacht die Sache tatsächlich, vielen herzlichen Dank für den Hinweis!
Rein aus Interesse an der Sache würd' ich den Thread aber trotzdem noch gern offen lassen; ich hab' mich jetzt zwei Tage damit abgemüht und würd' mich über eine Lösung immer noch freuen, auch wenn ich dann schließlich anders arbeiten werde; einfach weil's für mich als Anfänger lustig ist, wenn's dann schließlich doch funktioniert :D
Antworten