Es steht nicht viel Theorie hinter einem Textgenerator wie dem cnet: es gibt
eine Anzahl vorgegebener Template-Sätze, die Variablen enthalten. Diese
Variablen werden durch Satzfragmente (im einfachsten Fall bloße
Substantive) ersetzt, die mehr oder weniger zufällig ausgewählt werden. Was
die Sache interessant macht, ist die Auswahl der Substitutionsregeln, und
die Intelligenz, die "unsinnige" Kombinationen ausschliessen soll. cnet
arbeitet auf einem einfachen semantisches Feld (dem der
Konspirationstheorien), und die Substitutionen sind bisher auf Eigennamen
beschränkt. Diese Namen (oder Actors) sind in einer Actor-Datenbank
gespeichert, die die wichtigsten Kongruenzkriterien enthält: Zeit
und Raum. Jeder Actor kann nur mit anderen Actors in einem Text auftauchen,
die ungefähr zur gleichen Zeit und am gleichen Ort gelebt haben (ein Jahr
mehr oder weniger fällt nicht auf, aber 20 Jahre können bei Actors der
neueren Geschichte schon auffallen -- Kaiser Wilhelm II wird JFK nie
getroffen haben.) Die gleichen Kriterien hängen auch an den Skelett-Texten.
Die Implementierung
Textbasierte cgi-skripte schreien geradezu nach perl. cgen ist ein
perl-skript, das zwei datensätze einliest und eine cgi-konforme
html-ausgabe erzeugt (also ein http-result-code, gefolgt von einem
html-dokument). Die Datensätze befinden sich in einem anderen directory als
dem cgi-bin und sind (noch) nicht parametrierbar.
Bei allen Datensätzen gilt: semikolons trennen felder; Kommata trennen
Elemente in einer Aufzählung, Namen dürfen Leerzeichen enthalten.
Actors
Der eine Datensatz, "actors", enthält actor-definitionen wie die folgende:
actor: Caesar; Caesar, Gaius Julius Caesar; -80,-40; rom; politiker, opfer
Dieser Datensatz hat einen primary key ("Caesar"), der von allen anderen
actor-namen verschieden sein muss. Die folgenden Felder sind:
- Die Alias-Liste (Caesar, Gaius Julius Caesar), die Variationen des
Namens enthält. Wenn dieses Feld leer ist, wird der actor-Name als einziger
Alias benutzt. (Wenn dieses Feld nicht leer ist, wird der actor-Name
nicht automatisch als Alias benutzt.)
- Der Datumsbereich (-80,-40) beschreibt nicht unbedingt Geburts- und
Sterbedatum, sondern den Zeitraum, indem der Actor "aktiv" war. Wenn nur
eine Zahl angegeben wird, beträgt der Zeitraum dieses Jahr. Wenn keine Zahl
angegeben wird, ist der Zeitraum -4000,2000. Mehr als zwei Zahlen werden
nicht unterstützt.
- Der Bereich (rom). Dies ist ein geographisch aufzufassender
schlüsselbegriff, der nur ungefähr richtig sein muss (kleopatra hat
ebenfalls den bereich "rom"). Hier kann eine Liste von Bereichen
auftauchen. Wenn das Feld leer ist, sind "alle" Bereiche gewählt.
- Die Kategorien (politiker, opfer). Dies sind arbiträre "is-a" oder
"belongs-to" Kategorien, die sowohl Eigenschaften wie auch "Themenbereiche"
markieren; jeder Actor kann zu beliebig vielen gehören.
Stories
Der andere Datensatz enthält die eigentlichen Stories, d.h. die
Text-Templates, in die die Actors einsetzt werden. Ein einfacher Datensatz
sieht so aus:
story: Mord 1
time: 1930,1960
cast: opfer = any opfer
cast: taeter= any politiker, any organisation, Gott in seinem Zorn
text:
$taeter tötete $opfer.
Die "story"-Zeile beginnt eine neue Story. Die "time"-Zeile setzt ein
Kongruenzkriterium für die Zeit. Jede "Cast"-Zeile fügt eine neue
Figur hinzu. In diesem Fall gibt es zwei Figuren zu besetzen, taeter und
opfer. Das Opfer kann jeder actor sein, der zur Kategorie "Opfer" gehört;
täter kann jeder politiker oder jede organisation, oder "Gott in seinem
Zorn" (ein temporärer actor, nicht mehr als ein String, der zu allem
kongruent ist). Mit "any one" kann man wirklich jeden Actor auswaehlen.
(c) 1997 mfx @ das buro am draht / last edit: 97-03-31