Automatische Textausgaben in Perl gendern

Für alle die an allen Arten von Simulatoren (auch an kleineren) rumbauen, ergibt sich das Problem, dass man Fließtext, Prosa also, ausgeben muss. Dann will man in der Regel auf einen bestimmten Fall angepasste Inhalte ausgeben. Je nach Zahlenausgabe des Modells, müssen dann Textblöcke konfiguriert und für den User ausgegeben werden. Während man in allgemeinen Texten immer noch z.B. von der/dem SchülerIn sprechen kann (auch wenn’s nach wie vor blöd zu lesen ist und häßlich aussieht), wirkt eine solche Beschreibung in fallspezifischen Texten richtig blöd. Die zunächst einfachere Methode wäre, jeden Textblock doppelt und mit entsprechendem Geschlecht abzulegen. Spätestens wenn dann Veränderungen anstehen, hat man so jedoch doppelt soviel Editieraufwand. Und Spaß macht das gleich dreimal keinen.

Hier kann ich mir mit Link regulären Ausdrücken weiterhelfen, wobei ich dafür Sorgen muss, dass noch innerhalb eines solchen Ausdrucks wieder ein Funktionsaufruf stattfinden kann. Meine Beispiele habe ich in Perl angefügt. Sie lassen sich ziemlich sicher problemlos auch überall anderswohin übertragen, wo reguläre Ausdrücke uneingeschränkt möglich sind.

Sagen wir mal, wir haben einen entsprechenden Fließtextblock und haben die geschlechtsspezifischen Ausdrücke entsprechend geklammert. Zum Beispiel so (bitte jetzt nicht zu sehr auf die literarische Qualität des Textes achten):

$thetext=”{Das Mädchen/Der Junge} ging spazieren. {Sie/Er} hatte gute Laune, weil {ihr/ihm} in der Schule ein großer Erfolg gelungen war.”;

Um Texte zu “gendern” kann man sich die folgenden beiden Funktionen vorstellen:
sub gender_klammer($$) {
 my $klammer=shift;
 my $gender=shift;
 my $term;
 my @ab;
    $klammer=~ s/{//; <em>#Er&#246;ffnende Klammer rauswerfen</em>
    $klammer=~ s/}//; <em>#Abschlie&#223;ende Klammer rauswerfen</em>
    @ab=split ///,$klammer; <em>#Beide Varianten auf eine Liste aufteilen.</em>
    $term=$ab[$gender]; <em>#Den auszugebenden Term nach Gender auswaehlen</em>
 return $term;
}

sub gender($$) {
 my $t=shift;
 my $g=shift;
 my $sT;
    <em>#Die Klammern finden und durch den Funktionsinhalt ersetzen:</em>
    $t=~ s /{.*?}/&gender_klammer($&,$g)/ge;
 return $t;
}
Jetzt muss ich meiner Funktion nur noch den Textblock und das Geschlecht als Zahl übergeben (weiblich=0; männlich=1).
print gender($thetext,0);
ergibt dann in der Ausgabe:

Das Mädchen ging spazieren. Sie hatte gute Laune, weil ihr in der Schule ein großer Erfolg gelungen war.

Während
print gender($thetext,1);
den folgenden Satz ergibt:

Der Junge ging spazieren. Er hatte gute Laune, weil ihm in der Schule ein großer Erfolg gelungen war.

Selbstverständlich lässt sich das auch in anderen Listenkontexten verwenden, da ich auch der oben beschriebenen Funktion beliebig lange Listen übergeben kann, z.B. {sehr gut/gut/befriedigend/ausreichend/mangelhaft/ungenügend}. Im Beispiel muss ich die einzelnen Positionen dann durch Note-1 ansteuern (also mit 0-5).

Tags »

Autor:
Datum: Freitag, 13. März 2009 12:24
Trackback: Trackback-URL Themengebiet: Technik

Feed zum Beitrag: RSS 2.0 Diesen Artikel kommentieren

Kommentar abgeben

Login erforderlich