Ich habe hier schon einmal über die Zählung der Masoreten berichtet, deren Zahlenangabe mir zu hoch erschient. Hier daher mein Versuch, das Problem mit Emacs und dem im Internet erhältlichen digitalen masoretischen Text zu lösen. Wer nach einem Motiv für dieses Vorgehen sucht, findet es in Mt 5,16 und Lk 16,17.
Zunächst einmal hole ich mir von dieser Seite mit wget die Textdateien mit dem masoretischen Text der fünf Bücher der Torah (der Vorgang wird hier beschrieben).
Genesis
Exodus
Levitikus
Numeri
Deuteronomium
Jede Datei mit Emacs einzeln öffnen und:
C-x RET r
und dann mit Hilfe des Tabulators auf utf-8 umstellen.
Danach entferne ich alle
- Zeilen, die ein xxxx enthalten
- alle Akzentzeichen
- alle Zahlen
- alle Nobreak-Spaces
- alle mehrfachen Leerzeichen
- komplett leere Zeilen
Dazu gehe ich in den Scratch-Buffer und gebe dort folgenden Code
ein:
(defun my/clean-hebrew-text (start end)
"Bereinigt hebräischen Text komplett inkl. no-break spaces."
(interactive "r")
(save-excursion
(save-restriction
(unless (use-region-p)
(setq start (point-min) end (point-max)))
(narrow-to-region start end)
(goto-char (point-min))
;; 1. Zeilen mit XXXX löschen
(flush-lines "XXXX")
(goto-char (point-min))
;; 2. Hebräische Vokale und Akzente entfernen
(while (re-search-forward "[\u0591-\u05C7]+" nil t)
(replace-match ""))
(goto-char (point-min))
;; 3. Alle Zahlen entfernen
(while (re-search-forward "[0-9\u0660-\u0669\u06F0-\u06F9]+" nil t)
(replace-match ""))
(goto-char (point-min))
;; 4. No-Break Spaces durch normale Leerzeichen ersetzen
(while (re-search-forward "\u00A0" nil t)
(replace-match " "))
(goto-char (point-min))
;; 5. Mehrfache Leerzeichen zu einem einzigen reduzieren
(while (re-search-forward " +" nil t)
(replace-match " "))
(goto-char (point-min))
;; 6. Komplett leere Zeilen löschen
(flush-lines "^ +$")
(goto-char (point-min))
(flush-lines "^$")))
(message "Bereinigung inkl. No-Break Spaces abgeschlossen!"))
Dann erfolgt dort ein
M-x eval-buffer
Jetzt kann ich wieder in den Buffer mit dem Bibeltext wechseln und dort eingeben:
M-x /my/clean-hebrew-text
Jetzt fehlen noch die abschließenden Abschnitt-Hinweise mit einem am Vers-Ende allein stehenden Samech oder Peh:
C-x h M-x replace-string ס C-x h M-x replace-string פ
Wichtig: Vor und nach diesen beiden hebräischen Buchstaben muss ein Leerzeichen stehen!
Ich habe bei der Durchsicht der Dateien dann noch diese störenden Elemente gefunden:
- [c]
- [t]
- [q]
- [y]
Die habe ich auch mit replace-string entfernt.
Jetzt fehlen noch die qetib und qere Varianten:
Dazu gebe ich diesen Code in (den zuvor geleerten) Scratch ein:
(defun my/clean-qere-ketiv (start end)
"Behält das Wort mit einem * und löscht das folgende Wort mit **."
(interactive "r")
(save-excursion
(save-restriction
(unless (use-region-p) (setq start (point-min) end (point-max)))
(narrow-to-region start end)
(goto-char (point-min))
;; Sucht nach: *Wort1 gefolgt von Leerzeichen und **Wort2
;; Ersetzt es durch: Wort1
(while (re-search-forward "\\*\\([\u05D0-\u05EA]+\\)[[:space:]]+\\*\\*[\u05D0-\u05EA]+" nil t)
(replace-match "\\1"))
;; Falls die Sterne hinter den Wörtern stehen (Wort1* **Wort2):
(goto-char (point-min))
(while (re-search-forward "\\([\u05D0-\u05EA]+\\)\\*[[:space:]]+\\*\\*\\([\u05D0-\u05EA]+\\)" nil t)
(replace-match "\\1")))))
Dann wieder ein
M-x eval-buffer
und in dem Buffer mit der Datei
M-x my/clean-qere-ketiv
Jetzt habe ich 5 bereinigte Dateien vorliegen, die nur noch aus dem hebräischen Konsonantenkontinuum bestehen sollten. Die kann ich jetzt
auswerten, indem ich folgendes Script mit dem richtigen Pfad-Namen im
Emacs laufen lasse. In den neuerlich geleerten Scratch-Ordner gebe ich
ein:
(let* ((directory "/home/oliverachilles/Schreibtisch/Export/Zahl/") ;; Pfad anpassen!
(files (directory-files directory t "\\.org$"))
(total-hebrew-chars 0))
(with-output-to-temp-buffer "*Hebrew Letter Count*"
(princ (format "%-30s | %s\n" "Datei" "Hebr. Buchstaben"))
(princ (concat (make-string 48 ?-) "\n"))
(dolist (file files)
(with-temp-buffer
(insert-file-contents file)
(goto-char (point-min))
;; Zählt nur Zeichen im Bereich Aleph bis Tav
(let ((char-count (count-matches "[\u05D0-\u05EA]")))
(setq total-hebrew-chars (+ total-hebrew-chars char-count))
(princ (format "%-30s | %d\n"
(file-name-nondirectory file)
char-count)))))
(princ (concat (make-string 48 ?-) "\n"))
(princ (format "%-30s | %d\n" "GESAMT (nur Konsonanten)" total-hebrew-chars))))
Hinter die letzten 4 Klammern wird der Cursor gesetzt und dann
C-x C-e
In einem neuen Fenster öffnet sich das Ergebnis:
| Datei | Hebräische Buchstaben |
| Bereschit.org | 78165 |
| Schemot.org | 63531 |
| Wajikra.org | 44795 |
| Bemidbar.org | 63547 |
| Devarim.org | 54913 |
| Gesamt (nur Konsonanten) | 304951 |
Das wäre also mein Ergebnis. Bin gespannt, ob jemand mit einem
nachvollziehbaren Weg zu einem ähnlichen oder anderen Ergebnis gekommen ist. Falls das jemand liest, der sich mit Emacs auskennt: Anregungen und Verbesserungen sind willkommen! Und: Mit anderen Editoren sollte es natürlich auch gehen 😉
Disclaimer: Der im Artikel verwendete Code wurde mithilfe von Google-Gemini erstellt.
