Wissensbasierte Textverarbeitung: Schriftsatz und Typographie

Home -> Wissensbasierte Textverarbeitung -> 6. Anhang
 
Chapters
Einführung
Schriftsatz
Typographie
Schlußbemerkungen
Literaturhinweise
 

6 Anhang

6.1 Erklärung drucktechnischer Begriffe

Die wichtigsten Begriffe, die von Typographen verwendet werden, bedürfen einer eingehenderen Erklärung:

Aufmachung: Beschreibung der Drucksache durch Format, Größe, Art, Ränder, Satzanweisung, etc.
Blocksatz: Links- und rechtsbündiger Satz, d.h.: alle Zeilen sind aufgefüllt mit einer entsprechenden Anzahl von Leerzeichen.
Bund: Innerer Rand einer Seite im Buch oder einer Broschüre.
Divis: Bindestrich.
Durchschuß: Abstand in Punkten zwischen Kegelunterkante und Kegeloberkante der folgenden Zeile (Differenz zwischen Zeilenabstand und Schriftgröße)
Einzug, hängender: Die zweite und weitere Zeilen werden um ein Geviert eingezogen (eingerückt).
Flattersatz: Die einzelnen Zeilen werden nicht zum Blocksatz aufgefüllt und sind deshalb unterschiedlich lang; kann sowohl links- als auch rechtsbündig gesetzt werden.
Font: Schriftträger bei Fotosatzgeräten; bedeutet Schrift in einer Größe und einer Schriftart.
Formsatz: Der Text wird um ein Bild oder eine Grafik herum gesetzt.
Fußnote: Erläuterung des Textes am Fuße der Seite bzw. am Ende des Kapitels.
Geviert: Rechteck, Quadrat; beim Einzug ist damit der Zeilenabstand gemeint.
"Goldener Schnitt": Altes, modern gebliebenes Schönheitsgesetz:
"Der Goldene Schnitt baut auf folgendem Kernsatz auf:
Wird eine ganze Strecke so in zwei ungleich große Abschnitte geteilt, daß die kleinere Strecke sich zur größeren so verhält, wie die größere zur ganzen, ungeteilten Strecke, dann ist die ganze Strecke in einem wohlproportionierten Verhältnis aufgeteilt." (/Baumann 78/, S. 83)
Grad: siehe Schriftgrad.
Grafik: Bilder oder Zeichnungen, die in Punkte umgesetzt wurden und als elektronische Information auf Diskette vorliegen.
Hurenkind (orphan): Ende eines Absatzes (weniger als eine Zeile!) am Anfang einer Spalte.
Initial: großer, meist durch Verzierung und Farbe ausgezeichneter Buchstabe zu Beginn eines neuen Kapitels.
Kapitälchen: Die Kleinbuchstaben werden als Großbuchstaben in der Größe eines Kleinbuchstabens gesetzt, d.h. in ca. 60% der Originalgröße.
Kegelhöhe: Gesamthöhe des Buchstabens.
Kegeloberkante: Die größte Höhe eines Buchstabens.
Kegelunterkante: Die größte Tiefe eines Buchstabens.
Kerning: siehe Unterschneidung.
Kolumne: siehe Satzspiegel.
Kolumnentitel: Titel des Kapitels am Kopf oder Fuß einer Seite.
Kolumnenziffer: Seitenzahl.
Leitliniensystem: Die Konstruktion der Buchstaben wird in einem System paralleler waagrechter Linien vorgenommen, so daß die einzelnen Buchstaben leichter aufgebaut werden können.
Ligaturen: Bestimmte Buchstabenkombinationen werden als eine Einheit behandelt, z.B. "ff", "fl", "fi" und "gt".
Marginalie: Anmerkung auf dem Rand einer Handschrift bzw. eines Buches.
OCR-Schriften: genormte Schriften, die im Rahmen der Datenverarbeitung von Zeichenlesern "gelesen", d.h. identifiziert werden können (optical character recognition).
Orphan: siehe Hurenkind.
Paginierung: Mit Seitenzahlen versehen.
Register: Alphabetisches Namens-, Orts- oder Sachverzeichnis.
Satzfahne: Abzug bzw. Erstbelichtung vom Satz, um Korrektur zu lesen.
Satzspiegel: Format und Position des auf dem Papierformat in immer gleichbleibendem Ausmaß sichtbaren Textes.
Schriftgrad: Größe der Schrifttypen (Angaben meistens in Punkt, 36 Punkte = 1,27 cm = 1/2 Zoll).
Schusterjunge (widow): Anfang eines Absatzes am Ende einer Spalte.
Serife: Querstrich am Ende der Buchstabenteile. Bei der Schriftenklassifikation unterscheidet man serifenbetonte und serifenlose Schriftarten.
Typographie: Buchdruckerkunst bzw. Gestaltung eines Druckerzeugnisses.
Umbruch: Seiten werden umgebrochen, das heißt, die Texte und Bilder werden an die vorgesehenen Stellen montiert (geklebt).
überschließen: Unterbringung eines kleinen Restteils einer gefüllten Zeile am rechten Rand der vorangehenden Zeile (nur bei Registererstellung).
unterschließen: Unterbringung eines kleinen Restteils einer gefüllten Zeile am rechten Rand der nachfolgenden Zeile (nur bei Registererstellung).
Unterschneidung zweier Buchstaben: Aus ästhetischen Gründen werden Kombinationen nebeneinanderstehender Buchstaben, wie z.B. "Ta", näher zusammengerückt.
Versalien: Alle Buchstaben werden als Großbuchstaben dargestellt.
Widow: siehe Schusterjunge.

6.2 Abbildungen und Tabellen

Folgende Abbildungen und Tabellen finden Verwendung:

Abb. 1.1: strukturelle Aufteilung der Programme 8

Abb. 1.2: Klassifizierung menschlichen Wissens nach Hall 13

Abb. 2.1: ATN-Grammatik 22

Abb. 2.2: Case-Grammatik 23

Abb. 2.3: Phrasen-Struktur-Grammatik 26

Abb. 2.4: semantische Grammatik 27

Abb. 2.5: übergeordnetes Syntaxdiagramm 34

Abb. 2.6: Reihenfolgerelation 37

Abb. 3.1: Struktur eines Expertensystems /Puppe 86/ 50

Abb. 3.2: Das Frame-Konzept /Aikins 83/ 53

Abb. 3.3: semantisches Netz (Beispiel 1) 55

Abb. 3.4: semantisches Netz (Beispiel 2) 57

Abb. 3.5: Inferenznetz (aus einer Systembeschreibung zu CASNET) 57

Tab. 3.6: Kontrollstrategien 58

Tab. 3.7: Suchalgorithmen 60

Tab. 3.8: Arten von Inferenzen 61

Tab. 3.9: spezielle Mechanismen 62

Tab. 3.10: Problemklassen 63

Abb. 3.11: Regelabhängigkeiten 68

Abb. 3.12: Ermittlung der Ränder nach dem Goldenen Schnitt 75

Abb. 3.13: exakte Berechnung der Wortlänge 76

Abb. 3.14: fast exakte Berechnung der Wortlänge 77

Abb. 3.15: platzsparende, halbwegs exakte Berechnung der Wortlänge 77

Abb. 3.16: leicht realisierbare Berechnung der Wortlänge 78

Abb. 3.17: Beispiel des Kernings zweier Buchstaben 79

Abb. 3.18: Kasten (box) für einen einzelnen Buchstaben 81

Abb. 3.19: Struktur des Textspeichers 89

Abb. 3.20: Inferenzmaschine 103

Abb. 3.21: Auswertung der aktuellen Regelliste 104

Abb. 3.22: Auswertung der Liste von Änderungsvorschlägen 105

6.3 Syntaxdiagramme

Nachfolgend sind die Syntaxdiagramme für die einzelnen Konstrukte - teilweise sogar mit entsprechenden Anmerkungen - angegeben. Der dabei benutzte Formalismus ist bereits in Kapitel 2.4 erläutert worden:

6.3.1 Datumsangaben

(deutsch)

<datum> ::= <TT> "." <MM> "." [<trenner>] [<JJJJ>]
--> <TT> ". " <MM'> [<JJJJ>]
{ <MM'> <= fDatum(<MM>, BEN) }

| <TT> "." [<trenner>] <Monat D> [<JJJJ>]
--> <TT> ". " <MM'> [<JJJJ>]
{ <MM'> <= fDatum(<Monat D>, BEN) }

(amerik.)

| <TT> "/" <MM> "/" [<trenner>] [<JJJJ>]
--> <TT> "/" <MM> "/" [<JJJJ>]

| <TT GB> <Monat US> [<JJJJ>]
--> <TT GB> <Monat US> [<JJJJ>]

(engl.)

| <Monat GB> <TT GB> ["," [<trenner>] <JJJJ>]
--> <Monat GB> <TT GB> ["," <JJJJ>]

| <TT GB> <Monat GB> [<JJJJ>]
--> <TT GB> <Monat GB> [<JJJJ>]

(franz.)

| <TT F> <Monat F> <JJJJ>
--> <TT F> <Monat F> [<JJJJ>]

| <TT> "-" [<trenner>] <MM F>
"-" [<trenner>] <JJJJ>
--> <TT> "-" <MM F> "-" <JJJJ>

<TT> ::= <tt> [<trenner>]
--> <tt>

<tt> ::= 1 | 2 | .. | 31

<TT GB> ::= <tt GB> <trenner>
--> <tt GB>
| <TT>

<tt GB> ::= 1st | 2nd | 3rd | 4th | .. | 31th

<TT F> ::= <tt F> <trenner>
--> <tt F>
| <TT>

<tt F> ::= 1er | 2eme | .. | 31eme

<MM> ::= [<trenner>] <mm a> [<trenner>]
--> <mm a>

<MM F> ::= <mm r> [<trenner>]
--> <mm r> " "
| <mm a> [<trenner>]
--> <mm a>

<mm a> ::= 1 | 2 | .. |12

<mm r> ::= I | II | III | .. | XII

<Monat D> ::= <Mon lang D> <trenner>
--> <Mon lang D> " "
| <Mon kurz D> [<trenner>] "." [<trenner>]
--> <Mon kurz D> ". "

<Monat US> ::= <Mon lang US> <trenner>
--> <Mon lang US> " "
| <Mon kurz US> [<trenner>] "." [<trenner>]
--> <Mon kurz US> ". "

<Monat GB> ::= <Monat US>

<Monat F> ::= <Mon lang F> <trenner>
--> <Mon lang F> " "

<Mon kurz D> ::= Jan | Feb | .. | Dez

<Mon lang D> ::= Januar | Februar | .. | Dezember

<Mon kurz US> ::= Jan | Feb | .. | Dec

<Mon lang US> ::= January | February | .. | Decembre

<Mon lang F> ::= janvier | .. | decembre

<JJJJ> ::= <zahl>

<zahl> ::= <ziffer> [<zahl>]

<ziffer> ::= "0" | .. | "9"

Als besondere Schwierigkeit tritt das Problem auf, daß Punkte (".") von den umgebenden Zahlen durch eine Leerstelle (" ") isoliert werden müssen, damit das Datum<$IDatumsangabe> korrekt durch den PROLOG-Interpreter eingelesen werden kann.

Sobald ein Datum als ein solches erkannt worden ist, besteht die Möglichkeit, sowohl einen Test auf Gültigkeit als auch eine Abfrage durchzuführen, ob eine bestimmte Darstellungsart, z.B. ob die Monatsangaben in Zahl- oder Textform erscheinen sollen, gewünscht wird.

Neuere Textverarbeitungsprogramme bieten sogar die Möglichkeit, die Datumsangaben in ein internes Format zu konvertieren. Zusammen mit der Fähigkeit, über die Konfiguration des Programmes die Darstellung von Datumsangaben zu bestimmen, werden dann automatisch alle Datumsangaben entsprechend dargestellt.

Die gleiche Vorgehensweise bietet sich auch teilweise für die nachfolgend aufgeführten Konstrukte an:

6.3.2 Satzenden

Das Wissen um das Vorkommen von Satzenden<$ISatzende> innerhalb eines Absatzes wird u.a. dazu verwendet, nicht durchnumerierte Absätze als Titel zu erkennen:

<satzende> ::= <satzzeichen> [" "] <satzanfang>
--> <satzzeichen> " " <satzanfang>

<satzzeichen> ::= "." | ":" | ";" | "!" | "?"

<satzanfang> ::= <großgeschriebenes Wort>
| """
| "("
| ")"
| EOF

<großgeschriebenes Wort> ::= <Großbuchstabe> <Buchstaben>

<Großbuchstabe> ::= "A" | .. | "Z"

<Kleinbuchstabe> ::= "a" | .. | "z"

<Buchstaben> ::= <Buchstabe> [<Buchstaben>]

<Buchstabe> ::= <Kleinbuchstabe>
 | <Großbuchstabe>

EOF bezeichnet den Code, der das Ende der Datei kennzeichnet.

6.3.3 Titel

Dieses Syntaxdiagramm dient nur dazu, einen Titel<$ITitel> zu erkennen. Eine weitere textuelle Aufbereitung erfolgt nicht:

<titel> ::= <CR/LF> <kapitelnummer> <text>

<CR/LF> : bezeichnet den Anfang einer Zeile.

<kapitelnummer> ::= s. Kap. 6.3.19.2: Zahlen (Kapitelnummern)

<text> ::= <wort> <trenner> [<text>]

6.3.4 Abkürzungen

"Unter dem Sammelbegriff 'Abkürzungen'<$IAbkürzungen> können drei große Klassen unterschieden werden, die sich durch Schreibweise bzw. Interpunktion gegeneinander abgrenzen lassen:" (/Duden DT21/, S. 129f)

1. Allgemeine Abkürzungen,

2. Abkürzungen, die als Zeichen oder Symbole behandelt werden und

3. Kurzformen und Abkürzungswörter.

Durch dieses Syntaxdiagramm werden nur die einfachen Abkürzungen als eine Ausprägung der allgemeinen Abkürzungen behandelt. Diese Form der Abkürzungen ist durch einen Schlußpunkt gekennzeichnet, unabhängig davon, auf welche Art<$FAbkürzungen entstehen durch Weglassen aller weiteren Buchstaben nach dem ersten oder durch andere Buchstabenkombinationen. Im allgemeinen steht eine Abkürzung für die Singular- und Pluralform, jedoch hat sich eine veraltete Form der Pluralformbildung, die evtl. durch ein entsprechendes Syntaxdiagramm normiert werden kann, durch Verdoppelung des letzten Buchstabens eingebürgert. (/Duden DT21/, S. 130)> diese Abkürzung gebildet wird.

<abkürzung> ::= <abkürzungsliste>
| <artikel> <trenner> <abk-sing> <trenner> <zahl>
[<folgend-sing>]
--> <artikel> " " <abk-sing> " " <zahl>
[<folgend-sing>]

| <artikel> <trenner> <abk-pl> <trenner> <zahl>
[<folgend-pl>]
--> <artikel> " " <abk-pl> " " <zahl>
[<folgend-pl>]

| <artikel> <trenner> <abk-pl> <trenner> <zahl>
<trenner> <verknüpfung> <trenner> <zahl>

--> <artikel> " " <abk-pl> " " <zahl>
" " <verknüpfung> " " <zahl>

<abk-liste> ::= <Wort> [<trenner>]
"." [[<trenner>] <abk-liste>]
--> <Wort> ". " [<abk-liste>]

<Wort> ::= <Buchstaben>

<abk-sing> ::= "S" [<trenner>] "." --> "Seite"
| "Bd" [<trenner>] "." --> "Band"
| "Nr" [<trenner>] "." --> "Nummer"
| "Anm" [<trenner>] "." --> "Anmerkung"

<abk-pl> ::= "S" [<trenner>] "." --> "Seiten"
| "Bd" [<trenner>] "." --> "Bände"
| "Nr" [<trenner>] "." --> "Nummern"
| "Anm" [<trenner>] "." --> "Anmerkungen"

Die Abkürzung <abk> muß durch die entsprechende Langform ersetzt werden.

<artikel> ::= der | die | das | Der | Die | ..

<folgend-sing> ::= [<trenner>] "f" [<trenner>] "."
--> "f." (singular)

<folgend-pl> ::= [<trenner>] "ff" [<trenner>] "."
--> "ff." (plural)

<verknüpfung> ::= <bis>
| "und"
| "u" [<trenner>] "."
--> "u."

<bis> ::= "-" | "bis"

Als Abkürzungen<$IAbkürzungen> werden dabei nur diejenigen Zeichenfolgen erkannt, die in einer entsprechenden Tabelle eingetragen sind. Neben einer Liste der Wörter, die als zusammenhängende Abkürzung bekannt sind, z.B. ["z" "." "B" "."] oder ["z" "." "Zt" "."], wird die endgültige Form und ein Vermerk, wann eine Umsetzung erfolgen soll, mitgeführt.

6.3.5 Gedankenstriche

<gedankenstrich> ::= <trenner> "-" <trenner>
--> " " "-" "."

Bei professionellen Satzmaschinen wird ein Gedankenstrich<$IGedankenstrich> durch einen doppeltlangen Bindestrich dargestellt.

6.3.6 "-" - Zeichen

Für ein "-"-Zeichen existieren mehrere Möglichkeiten:

<trennstrich> : siehe Trennungen (Kap. 6.3.7)

<bindestrich> ::= <wort> "-" <wort>

<gedankenstrich> : siehe Gedankenstrich (Kap. 6.3.5)

<bis-strich> : siehe Abkürzungen (Kap. 6.3.4), Währungen (Kap. 6.3.8) und Paragraphzeichen (Kap. 6.3.12)

<minus-strich> : siehe Rechenzeichen (Kap. 6.3.10) und Gradangaben (Kap. 6.3.13)

6.3.7 Trennungen

<trennstrich> ::= <wort> "-" [<trenner1>] CR/LF <wortliste>
--> <wort> "-" " " <wortliste>
| <wort1> "-" [<trenner1>] CR/LF <wort2>
--> <wort1> <wort2>

<wortliste> ::= als auch
| genauso wie
| und
| oder
| ..

Die Trennungen, die ein Zeilenendesymbol (CR/LF-Paar) einschließen, müssen rückgängig gemacht werden, damit getrennt vorkommende Kennworte, wie z.B. "Pro-zent", wieder vereinigt und dann auch erkannt werden. Bei der Wiedervereinigung getrennter Wörter muß auf linguistisches Wissen zurückgegriffen werden, damit der Trennstrich als Fortführungszeichen nicht mit dem folgenden Bindewort vereinigt wird. Desweiteren muß dieser Formalismus vor allen anderen angewendet werden, damit (fast) alle anderen Formalismen korrekt funktionieren.

6.3.8 Währungen

<währung> ::= [<grundwährung1> <bis-zeichen>] <grundwährung2>

<grundwährung1> ::= <betrag>
[<dezimalpunkt> <teilbetrag>]
[<trenner>] [<einheit>]
--> <betrag>
[<dezimalpunkt> <teilbetrag>]
[<einheit>]

<grundwährung2>::= <betrag>
[<dezimalpunkt> <teilbetrag>]
[<trenner>] <einheit>
--> <betrag>
[<dezimalpunkt> <teilbetrag>]
<einheit>

<bis-zeichen> ::= <trenner> <bis> <trenner>
--> " " <bis'> " "
{<bis'> <= fbis-zeichen(<bis>, BEN)}

<bis> ::= "-" | "bis"

<betrag> ::= [<1/2/3st-zahl>] <tsd-betrag>
--> [<1/2/3st-zahl>] <tsd-betrag>

<tsd-betrag> ::= <tausenderabtrenng> <3stzahl> [<tsd-betrag>]

<teilbetrag> ::= <zahl>
--> <zahl'>
{ <zahl'> <= fGeld-teil(<zahl>, WÄHRUNG, BEN) }

| "-"
--> <zahl'>
{ <zahl'> <= fGeld-teil("-", WÄHRUNG, BEN) }

| "--"
--> <zahl'>
{ <zahl'> <= fGeld-teil("--", WÄHRUNG, BEN) }

<einheit> ::= DM
--> <dm>
{ <dm> <= fGeld-einheit("DM",BEN),
 WÄHRUNG <= deutsch }

 | Mark
--> <dm>
{ <dm> <= fGeld-einheit("Mark",BEN),
WÄHRUNG <= deutsch }

| Deutsche [<trenner>] Mark
--> <dm>
{ <dm> <= fGeld-einheit("Deutsche Mark",BEN),
WÄHRUNG <= deutsch }

| £
--> <pound>
{ <pound> <= fGeld-einheit("£",BEN),
WÄHRUNG <= englisch }

| Pfund
--> <pound>
{ <pound> <= fGeld-einheit("Pfund",BEN),
WÄHRUNG <= englisch }

| pound
--> <pound>
{ <pound> <= fGeld-einheit("pound",BEN),
WÄHRUNG <= englisch }

| $
--> <dollar>
{ <dollar> <= fGeld-einheit("$",BEN),
WÄHRUNG <= amerikanisch }

| Dollar
--> <dollar>
{ <dollar> <= fGeld-einheit("Dollar",BEN),
WÄHRUNG <= amerikanisch }

| US [<trenner>] Dollar
--> <dollar>
{ <dollar> <= fGeld-einheit("US Dollar",BEN),
WÄHRUNG <= amerikanisch }

<zahl> ::= <ziffern>

<ziffern> ::= <ziffer> [<ziffern>]

<ziffer> ::= "0" | "1" | .. | "9"

<1/2/3st-zahl> ::= <ziffer>
| <2st-zahl>
| <3st-zahl>

<2st-zahl> ::= <ziffer> <ziffer>

<3st-zahl> ::= <ziffer> <ziffer> <ziffer>

<tausenderabtrennung> ::= [<trenner>] <abtr> [<trenner>]
--> <abtr'>
{ <abtr'> <= fGeld-tsd(<abtr>,WÄHRUNG)}

<abtr> ::= "." | "," | " " | ""

<dezimalpunkt> ::= [<trenner>] <dez-pkt> [<trenner>]
--> <dez-pkt'>
{ <dez-pkt'> <= fdez-pkt(<dez-pkt>,WÄHRUNG)}

<dez-pkt> ::= "." | ","

Genau wie bei den Datumsangaben besteht bei den Währungsangaben die Möglichkeit, die Darstellung auf Korrektheit zu überprüfen und ggf. den Benutzer nach der gewünschten Darstellungsart zu fragen. Folgende Möglichkeiten bestehen:<$FGemäß den Satz- und Korrekturanweisungen (/Duden DT5/) sind nach Festlegung einer Angabe innerhalb einer der vier folgenden Punkte u.U. die restlichen Wahlmöglichkeiten stark eingeschränkt.>

1. Eine Einheitenangabe kann entweder vor oder hinter der Zahlangabe erfolgen.

2. Ein nicht vorhandener Dezimalbruch kann in Form eines Währungsstrichs ("-"), in Form von Nullen oder ohne Dezimalbruchangaben dargestellt werden.

3. Die Darstellung des Bisstrichs kann als "-" oder ausgeschrieben als "bis" erfolgen.

4. Sollte es sich bei der Währungsangabe um einen Bereich handeln, besteht eine Wahlmöglichkeit zwischen der Einheitenangabe nach jeder Zahl oder nur nach der zweiten Angabe.

5. Bei den Einheiten könnte zwischen der Kurz- und einer Langform gewählt werden.

Bei folgender Situation ("sechshundert DM") gibt es zwei Möglichkeiten, die Darstellung zu variieren: 1. "600,- DM" oder 2. "sechshundert Deutsche Mark". Welche davon Anwendung findet, könnte dann z.B. der Benutzer entscheiden (welche ihm besser gefällt) oder das System (welche von der Textmenge innerhalb der betroffenen Zeile besser paßt (siehe Kap. 3.3.7.6)).

6.3.9 Besonderheiten bei Briefen

Damit der konzeptuelle Aufbau eines Briefes eingehalten werden kann, müssen die jeweiligen charakteristischen Teile herausgesucht, aufbereitet und positioniert werden. Zu diesen charakteristischen Teilen gehören u.a. die Anreden und die Grußformeln:

6.3.9.1 Anreden

<anrede> ::= Sehr <trenner> geehrte <bezeichnung>
--> Sehr " " geehrte <bezeichnung>

<bezeichnung> ::= "r" <trenner> Herr
--> "r" " " Herr
| <trenner> Dame
--> " " Dame
| "s" <trenner> Fräulein
--> "s" " " Fräulein
| <trenner> Damen <trenner> und <trenner> Herren
--> " " Damen " " und " " Herren
| <trenner> Damen
--> " " Damen
| <trenner> Herren
--> " " Herren

Das Heraussuchen von Anreden kann, genau wie bei den Grußformeln, auf Briefe beschränkt bleiben. Dort ist es aber wichtig, da Briefe einen bestimmten Aufbau einhalten müssen.

6.3.9.2 Grußformeln

<grußformel>::= Mit <trenner>
freundlichen <trenner> Grüßen
--> Mit " " freundlichen " " Grüßen
| Mit <trenner> freundlichem <trenner> Gruß
--> Mit " " freundlichem " " Gruß
| Freundliche <trenner> Grüße
--> Freundliche " " Grüße
| Mit <trenner> herzlichem <trenner> Gruß
--> Mit " " herzlichem " " Gruß
| Mit <trenner> herzlichen <trenner> Grüßen
--> Mit " " herzlichen " " Grüßen

Siehe auch die Anmerkung bei den Anreden (Kap. 6.3.9.1).

6.3.9.3 Nicht berücksichtigte Briefteile

Die Leistungsfähigkeit des Systems kann durch Ausdehnung des Parsing-Prozesses auf andere charakteristische Briefteile erhöht werden. Zu diesen Briefteilen gehören u.a.:

* Briefköpfe

* Adressaten

* Betreffs

* Unterschriften im Anschluß an die Grußformeln

Diese Briefteile werden zur Zeit nicht berücksichtigt, da sie zu komplex und nicht ohne weiteres einheitlich darstellbar sind.

6.3.10 Rechenzeichen

Die Rechenzeichen werden als Zahlen ausgehend von einem Gleichheitszeichen interpretiert, dabei ist nach den allgemein üblichen Rechenregeln vorzugehen.

6.3.11 Prozent- und Promillezeichen

<prozent> ::= <zahl> [<trenner>] "%"
--> <zahl> " %"
(keine Ableitung oder Zusammensetzung)

 | <zahl> [<trenner>] "%" [<trenner>] [<nachwort>]
--> <zahl> "%" <nachwort>
(bei Ableitungen oder Zusammensetzungen)

<nachwort> ::= "ig" ["e" | "er" | "es"]
--> "tig" ["e" | "er" | "es"]
| "tig" ["e" | "er" | "es"]
--> "tig" ["e" | "er" | "es"]
| "-" <Wort> (Wortzusammensetzungen)

6.3.12 Paragraph

<paragraph> ::= [<artikel>] [<trenner>]
<paragraphzeichen> [<trenner>]
[<zahl>] [<folgend-sing>]
(singular)
--> [<artikel>] "" <zahl> [<folgend-sing>]

| [<artikel>] [<trenner>] <paragraphzeichen>
[<trenner>] [<zahl>] [<folgend-pl>]
(plural)
--> [<artikel>] "" <zahl> [<folgend-pl>]

| [<artikel>] [<trenner>]
<paragraphzeichen> [<trenner>]
[<zahl>] [<bis-zeichen> <zahl>]
(plural)
--> [<artikel>] "" <zahl> <bis-zeichen> <zahl>

| [<artikel>] [<trenner>] <paragraphzeichen>
--> <artikel> <paragraphzeichen>

<paragraphzeichen> ::= "" | Paragraph
(singular)

| "" | Paragraphen
(plural)

<bis-zeichen> ::= <trenner> <bis> <trenner>
--> " " <bis'> " "
{ <bis'> <= fbis-zeichen(<bis>, BEN) }

<bis> ::= "-" | bis

<folgend-sing> ::= [<trenner>] "f" [<trenner>] "."
(singular)
--> "f."

<folgend-pl> ::= [<trenner>] "ff" [<trenner>] "."
(plural)
--> "ff."

6.3.13 Gradzeichen

<grad> ::= [<vorzeichen> [<trenner>]] <zahl>
[<trenner>] ""
[<trenner>] <gradeinheit>
--> [<vorzeichen>] <zahl> " " <grad-einheit>
| [<vorzeichen>] [<trenner>] <zahl> [<trenner>] ""
--> [<vorzeichen>] <zahl> ""

<vorzeichen> ::= "+" | "-"

<gradeinheit> ::= "C" | Celsius | "F" | Fahrenheit

6.3.14 Et-Zeichen und Firmennamen

<et-zeichen> ::= <name1> "&" <name2>

<name1> ::= <Wort>

<name2> ::= <Wort>

Das Et-Zeichen ("&") darf nur verwendet werden, wenn es sich bei <name1> "&" <name2> um einen Firmennamen handelt. In allen anderen Fällen darf nur "u." als Abkürzung für "und" gesetzt werden. (/Duden DT5/, S. 46)

<firma> ::= <name1> [<trenner>] "&" [<trenner>] <name2>
--> <name1>  <und>  <name2>
{ <und> <= fFirma(<name1>, <name2>) }

Bsp.: fFirma(AT, T) = " & "
fFirma(An-, Verkauf) = " u. "

Da "&" als einziger Identifikator nicht ausreicht, muß der Anwender gefragt werden, ob es sich bei dieser Konstruktion tatsächlich um einen Firmennamen handelt oder nicht. Möglich wäre es, zusätzlich zu einer "Ja"/"Nein"-Antwort ein "Vielleicht" anzubieten, um damit die Konstruktion nachträglich auf

<firma> ::= <name1> [<trenner>] "&" [<trenner>] <name2>
--> .....
| <name1> [<trenner>] "," [<trenner>] <name2>
[<trenner>] "&" [<trenner>] <name3>
--> .....

zu erweitern. Eine andere Möglichkeit ist das Nachsehen in einer separaten Tabelle, die häufig benutzte Firmennamen zusammen mit dem Ersatztext enthält.

6.3.15 Unterführungszeichen

<unterführung> ::= <leerstellen> "~" <leerstellen>
| <leerstellen> ">" <leerstellen>
(nur in der Schweiz)

<leerstellen> ::= " " [<leerstellen>]

"Das Unterführungszeichen wird im Schriftsatz unter die Mitte des zu unterführenden Wortes gesetzt. Die Unterführung gilt auch für Bindestrich und Komma. Zahlen dürfen nicht unterführt werden." (/Duden DT5/, S. 51)

Dieses Syntaxdiagramm wird nur dazu benutzt, die vorkommenden Unterführungszeichen zu entdecken und dann durch den Text zu ersetzen, der über dem Unterführungszeichen steht, damit der Inhalt bei einer Neuformatierung nicht verfälscht wird.

Bei einem Einsatz eines Textverarbeitungsprogramms kann jedoch davon ausgegangen werden, daß der Benutzer keine Unterführungszeichen mehr verwendet, da er die damit verbundene Problematik des Neuformatierens kennt und sie durch Ausschreiben des betreffenden Wortes vermeidet.

6.3.16 Apostrophe

<apostroph> ::= <wort1> [<trenner>] "'" [<trenner>]
<wort2>
--> <wort1> [<trenner'>] "'" <wort2>
{ <trenner'> <= fApostroph(<wort1>, <wort2>) }

"Dem Apostroph am Wortanfang geht der regelmäßige Wortzwischenraum voran. Eine Ausnahme machen nur einige übliche Verbindungen." (/Duden DT5/, S. 46)

Dazu gehören zum Beispiel "sich's", "geht's" und "kommt's", die ebenfalls in einer separaten Tabelle gespeichert werden können:

Bsp.: fApostroph(sich, s) = ""

fApostroph(so, n) = " "

6.3.17 Fußnoten- und Anmerkungszeichen

Da Fußnoten nur innerhalb des Textverarbeitungsprogramms auf Befehl des Anwenders erstellt werden, braucht nur das Syntaxdiagramm angegeben zu werden, nach dem die Zeichen kreiert werden:

<fußnote> ::= <^zahl>
^
| hochgestellte Zahl
| <fußnotenzeichen>

<fußnotenzeichen> ::= "(" <sternchen> ")"
| "(" <kästchen> ")"
| "(" <plus-zeichen>")"

<sternchen> ::= "*" [<sternchen>]

<kästchen> ::= "#" [<kästchen>]

<plus-zeichen> ::= "+" [<plus-zeichen>]

6.3.18 Sonstige Zahlen

Zur korrekten Identifikation einer der restlichen Zahlen muß ggf. in dem unmittelbaren Kontext ein entsprechender Hinweis vorhanden sein:

6.3.18.1 Ordinalzahlen

<ordinal> ::= <zahl> [<trenner>] "."
--> <zahl> "."

Zur Abarbeitung von Ordinalzahlen sei wiederum auf die Erkennung der Satzendesymbole verwiesen (s.a. Kap. 2.5.1.1 und Kap. 6.3.2).

6.3.18.2 Kapitelnummern

Die Kapitelnummern werden gemäß der Dezimalklassifikation für das Ordnen von Schrifttum in Bibliotheken geparst:

<kapitelnummer> ::= (<ordinalzahlen> [<trenner>])
[<zahl>]
--> <ordinalzahlen> [<zahl>]

<ordinalzahlen> ::= <ordinalzahl> [<ordinalzahlen>]

6.3.18.3 Zusammengesetzte Zahlen

<zusammengesetzte-zahl> ::= <zahl> <trenner> <nachwort>
--> <zahl> <nachwort>

<nachwort> ::= fach [ "e" [<beugung>]]
 | teilig [ "e" [<beugung>]]
 | stündig [ "e" [<beugung>]]
 | ..

<beugung> ::= "r" | "s" | "m" | "n" | ..

6.3.18.4 Gliederung von Telefonnummern

<telefon> ::= "Tel.:" <country number>
  <trunc number internat>

  <subscriber number>
  [<multiple numbers>]
--> "Tel.: " <country number>
  <trunc number internat>
  <subscriber number>
  [<multiple numbers>]

 | "Tel.:" [<trunc number nat>]
<subscriber number>
--> "Tel.: "[<trunc number nat>]
<subscriber number>

 | "Tel.:" <subscriber number>
--> "Tel.: "<subscriber number>

<country number> ::= <international prefix>
<country code>
[<trenner>] ["-"]
--> <international prefix> <country code> " "

<international prefix> ::= "+" [<trenner>]
--> "+"
| "00"
--> "+"

<country code> ::= <2st-zahl>

<trunc number internat> ::= [<trenner>]
"(" <trunc prefix><trunc code> ")"
[<trenner>]
--> <trunc code> " "
| [<trenner>]
<trunc prefix> <trunc code> "/"
[<trenner>]
--> <trunc code> " "

<trunc number nat> ::= [<trenner>]
"(" <trunc prefix> <trunc code> ")"
[<trenner>]
--> "(" <trunc prefix> <trunc code> ") "
| [<trenner>] <trunc prefix> <trunc code> "/"
[<trenner>]
--> "(" <trunc prefix> <trunc code> ") "

<trunc prefix> ::= "0"

<trunc code> ::= <3st-zahl>
--> <xst-zahl>
{ <xst-zahl> <= fTel(<3st-zahl>, BEN) }

<subscriber number> ::= <in-dialling> <extension>
| <in-dialling> [<multiple numbers>]

<in-dialling> ::= <ziffern>
--> <xst-zahl>
{ <xst-zahl> <= fTel(<ziffern>, BEN) }

<2st-zahlen> ::= " " <2st-zahl> [<2st-zahlen>]

<extension> ::= [<trenner>] <ext-sign> [<trenner>]
<ziffern>
--> " " <ext-sign> " " <ziffern>

<ext-sign> ::= "ext." --> "ext."
| "-" --> "ext." (engl.)

 | "ext." --> "-"
 | "-" --> "-" (deutsch)

<multiple numbers> ::= <multiple numbers>
<multiple numbers>
| " / " <in-dialling>
| "/" <in-dialling>

Bsp.: fTel("234", Deutschland) = "2 34"
fTel("234", Schweiz) = "234"

Der Aufbau des Syntaxdiagramms für die Telefonnummern erfolgt gemäß der "Recommendation E.123: Notation for National and International Telephone Numbers", die vom "CCITT" (/CCITT 85/, S. 36-40), "The International Telegraph and Telephone Consultive Committee", vom 8-19. Oktober 1984 in Malaga aufgestellt wurden, und der Angaben in /Duden DT5/.

6.3.18.5 Gliederung von Fernschreibnummern

<fsnummer> ::= <kennziffer> <zahlen>
--> <kennziffer> [" " <2st-zahl>] <3st-zahlen>

<kennziffer> ::= <ziffer>

<zahlen> ::= [<trenner>] <zahl> [<zahlen>]

<3st-zahlen> ::= " " <3st-zahl> [<3st-zahlen>]

6.3.18.6 Gliederung von Girokontennummern

<giro-kto> ::= <zahl1> [<trenner>] <zahl2> [<trenner>]
"-" [<trenner>] <zahl>
--> <zahl'> " " <2st-zahl'> "-" <zahl>
{ <zahl'> <= f
rest2(<zahl1>, <zahl2>),
<2st-zahl'> <= f
first2(<zahl1>, <zahl2>) }

Die beiden ersten Zahlen sind zusammenzufassen und so aufzuteilen, daß die zweite Zahl aus genau 2 Ziffern besteht (ffirst2) und die erste Zahl aus den restlichen Zahlen (frest2).

6.3.18.7 Gliederung von ISBN-Nummern

<isbn-nr> ::= "ISBN" <trennung> <ziffer>
<isbn-trenner> <zahl>
<isbn-trenner> <zahl>
<isbn-trenner> <ziffer>

--> "ISBN" <trennung> <ziffer>
<isbn-trenner> <zahl>
<isbn-trenner> <zahl>
<isbn-trenner> <ziffer>

<trennung> ::= <trenner> | ":"

<isbn-trenner> ::= <trenner>
--> <trenner'>
{ <trenner'> <= fisbn-trenner(<trenner>, BEN) }

| "-"
--> <trenner'>
{ <trenner'> <= fisbn-trenner("-", BEN) }

Die ISBN-Trennzeichen werden nach den Original- und Benutzerangaben umgesetzt, so daß sich insgesamt folgende Möglichkeiten ergeben:

fisbn-trenner(<trenner>, BEN) = " "

fisbn-trenner( "-", BEN) = "-"

fisbn-trenner(<trenner>, BEN) = " "

fisbn-trenner( "-", BEN) = "-"

Den restlichen Zahlen kann über ein Menü im Zweifelsfalle eine Bedeutung zugeordnet werden. Das ist insbesondere dann wichtig, wenn entsprechende Schlüsselwörter, die diese Zahl eigentlich kennzeichnen müßten, fehlen. Sobald die Bedeutung bekannt ist, kann der Schriftsatz erfolgen.

6.3.18.8 Nicht berücksichtigte Zahlen

Auf Grund der hohen Anzahl einzelner Zahlengruppen müssen derzeit u.a. folgende Zahlen unberücksichtigt bleiben:

* Bankkontonummern

* Bankleitzahlen

* Postleitzahlen (im Bereich der Deutschen Bundespost und im Auslandsverkehr, zusätzlich Angabe des Zustellbezirks)

* Postfachnummern

* ISSN (International Standard Serial Number)

6.4 Anforderungen an den PROLOG-Interpreter

Der PROLOG-Interpreter muß mehrere Bedingungen erfüllen, damit das System allen Anforderungen gerecht werden kann. Die primäre Bedingung ist, daß er eine Textdatei bearbeiten kann. Dazu zählt, daß er bestimmte Stellen innerhalb dieser Datei in einem wählbaren Format einlesen kann:

1. Eine freie Positionierung des File-pointers auf die betreffende Stelle (SEEK),

2. die Spezifikation der Anzahl von Zeichen, die eingelesen werden sollen und

3. das Format, mit dem diese Zeichen eingelesen werden, müssen angegeben werden können, d.h. ob als Liste von Zeichen, Zeichenkette (String), Liste von Zahlen (also deren ASCII-Werte) oder Zahlen.

Desweiteren sind noch einige optionale Eigenschaften wünschenswert:

* Eine Window-Technik erleichtert eine Implementierung des Dialoges mit dem Benutzer und

* eine direkte Bildschirmadressierung erlaubt eine optimale Nutzung des gesamten Bildschirmes.

6.5 Hilfstabellen und Hilfsfunktionen

Folgende Tabellen sollten in einer intelligenteren Textverarbeitung zur Unterstützung einzelner Funktionen als Verweise auf Textstellen zur Verfügung stehen:

  • Satzzeichen
  • Zeilenanfang/-ende
  • Wortanfang
  • Konstrukt
  • Auszeichnung
  • Satzanfang/-ende
  • Absatzanfang/-ende
  • Seitenanfang/-ende
  • Firmennamen

Darüber hinaus sind Tabellen nötig, um bestimmte Worte, die der Parsingprozeß zur Abarbeitung braucht, speichern zu können. Diese Tabellen können dann sowohl global (Standardvorgaben) als auch dem einzelnen Benutzer zugeordnet ("privat") zur Verfügung gestellt werden:

  • mögliche Abkürzungen
  • Trennungen
  • Firmennamen: Sind zwei Wörter, die vor bzw. hinter '&' stehen, als Firmenname aufzufassen?
  • Apostrophe

Dazu gehören außerdem folgende Hilfsfunktionen, die innerhalb des Parsingprozesses genutzt werden:

  • Geld-einheit
  • Geld-teil
  • Geld-tsd
  • dez-pkt
  • bis-zeichen
  • Apostroph
  • Tel
  • first2
  • rest2
  • isbn-trenner: Soll eine ISBN-Nummer mit Leerzeichen oder Bindestrichen getrennt werden?

Zum Verständnis dieser Tabellen und Funktionen sei dazu auf die vorangehenden Kapitel verwiesen.

6.6 Spezifikation einer Schnittstelle mit einem Textverarbeitungsprogramm

Folgende Prozeduren und Funktionen müssen dem Prolog-Interpreter als Schnittstelle zur Verfügung gestellt werden, damit das wissensbasierte System von einem Textverarbeitungsprogramm aufgerufen werden und die internen Datenstrukturen nutzen kann:

GLOBAL VARIABLE Stelle<$FWeil PROLOG die internen Zeigerstrukturen nicht auswerten kann, muß eine globale Variable, auf die der PROLOG-Interpreter auch Zugriff hat, bereitgestellt werden.>: ptr-to-text

PURPOSE: Die Variable dient zur Speicherung der Stelle im Text, die gerade bearbeitet wird.

PROCEDURE start-expert-system

PARAMETER: keine

PURPOSE: Die Hauptprozedur des Expertensystems wird aufgerufen und dadurch das gesamte System gestartet.

PROCEDURE find-keyword (Keyword)

PARAMETER: Keyword: word

PURPOSE: Diese Prozedur sucht ab der Position Stelle das nächste Vorkommen des angegebenen Schlüsselworts Keyword und speichert dann die aktuelle Position im Text in der Variable Stelle.

FUNCTION get-next-word (Ausnahme): word

PARAMETER: Ausnahme: set-of-words

PURPOSE: Diese Funktion liefert das nächste Wort ab der Position Stelle im abgespeicherten Text als String, den der PROLOG-Interpreter verarbeiten kann, sofern dieses Wort nicht in der Menge der Ausnahmen vorkommt. Sollte es sich bei diesem Wort um ein Steuerzeichen (s. Kap. 2.4.4) handeln, so muß es in ein äquivalentes, "PROLOG-fähiges" Wort umgewandelt werden.

FUNCTION get-previous-word (Ausnahme): word

PARAMETER: Ausnahme: set-of-words

PURPOSE: In Analogie zu get-next-word liefert diese Funktion das vorhergehende Wort.

PROCEDURE delete-word (Wort)

PARAMETER: Wort: word

PURPOSE: Diese Prozedur löscht das Wort Wort ab der Position Stelle innerhalb des abgespeicherten Textes ohne die anderen (internen) Zeigerwerte zu verfälschen.

PROCEDURE insert-word (Wort)

PARAMETER: Wort: word

PURPOSE: Diese Prozedur fügt an der Textstelle Stelle das Wort Wort ein. Dabei darf diese Prozedur den Text nicht derart verändern, daß alle anderen Zeigerwerte nicht mehr korrekt verweisen (referentielles Einfügen).

Folgende Prozedur kann optional (eine Berechnung ist auch in PROLOG<$IPROLOG> möglich (s. Kap. 3.3.7.1)) zur Verfügung gestellt werden:

FUNCTION wortlänge (Wort, Font, Schriftgröße): integer

PARAMETER: Wort: word

Font: benutzte Schriftart
Schriftgröße: integer

PURPOSE: Diese (optionale) Funktion berechnet für das Wort Wort für den angegebenen Font und die angegebene Schriftgröße die korrekte Länge in einer festzulegenden Einheit und gibt diesen Wert zurück.

Nachdem ein Konstrukt erkannt worden ist, muß dieses eine entsprechende Kennzeichnung erhalten. Diese Kennzeichnung kann, ausgehend von Einträgen in einer Tabelle (s. Kap. 6.4), als ein Verweis auf die entsprechende Textstelle geschehen oder durch Einfügen eines speziellen Steuerkodes.

Letzteres ermöglicht eine einfachere Weiterverarbeitung des Textes, ohne ständig alle Verweise überarbeiten (überprüfen) zu müssen, und eine größere Funktionalität insgesamt, weil über die normale Textverarbeitung hinausgehende Vorschläge, wie z.B. Alternativen oder Angaben zur Textformatierung, bei der späteren Verarbeitung berücksichtigt werden können.

 

Last Update : June 14, 2002