Greek Tonos in Oxia konvertieren

21. November 2017

Durch Zufall ist mir heute (wieder) aufgefallen, dass altgriechische, UTF-8-kodierte Texte bei den Vokalen mit Akut die neugriechische Kodierung und nicht die altgriechische Kodierung (»polytonic«) verwenden. Dadurch ist eine Weiterverarbeitung der Daten (z.B. für Konkordanzen o.ä.) nicht automatisch möglich, wenn man gleichzeitig korrekt kodierte Dateien verwendet.

Statt des Akuts (»Oxia«) wird in diesen Texten der »Tonos« gesetzt, die in Unicode an unterschiedlichen Positionen definiert sind (in Greek Extended bzw. in Greek and Coptic):

TonosOxia
U+03AC (940)άU+1F71 (8049)
U+03AD (941)έU+1F73 (8051)
U+03AE (942)ήU+1F75 (8053)
U+03AF (943)ίU+1F77 (8055)
U+03CC (972)όU+1F79 (8057)
U+03CD (973)ύU+1F7B (8059)
U+03CE (974)ώU+1F7D (8061)

Dieses Problem tritt z.B. auf, wenn man Scans von Texten mit Hilfe von Tesseract eingelesen hat. Aber auch der TLG macht diesen Fehler.

Um diese Texte einfach zu korrigieren, habe ich ein kurzes Python-Skript geschrieben, das bei den oben in der Tabelle angeführten Buchstaben die Tonos-Variante durch die Oxia-Variante ersetzt (und das Ergebnis in eine neue Datei schreibt):

#!/usr/bin/env python

import sys
import string

infile : sys.argv[1]
outfile : sys.argv[2]

with open(infile, 'r') as fin:
    contents : fin.read()
     
with open(outfile, 'w') as fout:
    newcontents : contents.translate(str.maketrans("άέήίόύώ", "άέήίόύώ"))
    fout.write(newcontents)

Das Skript nimmt zwei Argumente (Dateinamen) an, den ursprünglichen Text und den konvertierten Text:

python3 convert-tonos-oxia.py infile.txt outfile.txt

Der folgende Screenshot zeigt die Differenzen zwischen dem eingebenen und dem ausgegebenen Text:

Diff

Das Skript steht auf Github zur Verfügung.