ttlogo.jpg Freie TextTransformer Projekte
Start
Text2HTML
Wikipedia
Yacc2TT
Delphi-Parser
Java-Parser
C-Präprozessor
C-Parser
HTML4
Nützliches
XML-Writer
MergeHTML
RtfCheck
Zahl2Nombre
MIME-Parser
Spamfilter
Weitere Beispiele
Freie Komponenten
  Minimal Website   Impressum

Zahl2Nombre


Ein Compiler wird häufig als Übersetzer bezeichnet, da er Programm-Code in eine Sprache übersetzt, die der Computer versteht. Der TextTransformer ist ein Compiler-Compiler oder Parser-Generator, d.h. ein Hilfsmittel zum Bau von Übersetzern.
Bei dem Projekt Zahl2Nombre, der Übersetzung deutscher Zahlworte in französische, kommt dieser Terminus mit seiner Alltagsbedeutung überein.

Das Projekt kann hier herunter geladen werden: Text2Html.ttp
Ein Text zum testen von Zahl2Nombre ist: Zahl2Nombre_Test.txt
Die Textvorlage für diese HTML-Seite ist: Text2Html.txt


Jedem deutschsprachigen Leser sind die Bildungsregeln der Zahlwörter unmittelbar bekannt. Dennoch ist die Aufgabe einen derartigen Übersetzer zu schreiben eine Knobelarbeit und das resultierende Programm nicht sehr übersichtlich. Dies liegt daran, dass natürlichsprachliche Ausdrücke stets Unregelmäßigkeiten und Ausnahmen enthalten, die eine formale Repräsentation erschweren. Hinzukommt, dass die Bildungsregeln der französischen Zahlworte von denen der deutschen teilweise stark abweicht, so dass auch, wenn das deutsche Zahlwort richtig analysiert ist, eine Synthese des französischen keineswegs eins zu eins aus den deutschen Zahlwortelementen erfolgen kann.
So ist z.B. die Reihenfolge der Einer und Zehner im deutschen gegenüber dem Französischen vertauscht. Das französische "vingt et un" hieße wörtlich übersetzt "zwanzig und eins" und nicht "einundzwanzig". Noch schwieriger verhält es sich mit den Zahlen größer als 70. Die Zahl "sechsundneunzig" ist auf französisch "quatre-vingt-seize", was wörtlich übersetzt hieße: "vier-zwanzig-sechzehn".

Wegen dieser Schwierigkeiten wäre es in einer "ernsthaften" Anwendung wahrscheinlich sinnvoller auf die ersten tausend Zahlwortpaare über einer Tabelle zuzugreifen. Mir hat diese Knobelarbeit aber Spaß gemacht und mindestens zu didaktischen Zwecken ist sie sinnvoll.

Übersetzungstabelle

deutsch  französisch 
null  zéro 
eins  un 
zwei  deux 
drei  trois 
vier  quatre 
fünf  cinq 
sechs  six 
sieben  sept 
acht  huit 
neun  neuf 
zehn  dix 
elf  onze 
zwölf  douze 
dreizehn  treize 
vierzehn  quatorze 
fünfzehn  quinze 
sechzehn  seize 
siebzehn  dix-sept 
achtzehn  dix-huit 
neunzehn  dix-neuf 
zwanzig  vingt 
einundzwanzig  vingt et un 
zweiundzwanzig  vingt-deux 
dreiundzwanzig  vingt-trois 
vierundzwanzig  vingt-quatre 
fünfundzwanzig  vingt-cinq 
sechsundzwanzig  vingt-six 
siebenundzwanzig  vingt-sept 
achtundzwanzig  vingt-huit 
neunundzwanzig  vingt-neuf 
dreißig  trente 
einunddreißig  trente et un 
zweiunddreißig  trente-deux 
vierzig  quarante 
einundvierzig  quarante et un 
fünfzig  cinquante 
einundfünfzig  cinquante et un 
sechzig  soixante 
einundsechzig  soixante et un 
siebzig  soixante-dix 
einundsiebzig  soixante et onze 
zweiundsiebzig  soixante-douze 
dreiundsiebzig  soixante-treize 
achtzig  quatre-vingts 
einundachtzig  quatre-vingt-un 
zweiundachtzig  quatre-vingts-deux 
dreiundachtzig  quatre-vingts-trois 
neunzig  quatre-vingt-dix 
einundneunzig  quatre-vingt-onze 
sechsundneunzig  quatre-vingt-seize 
neunundneunzig  quatre-vingt-dix-neuf 
hundert  cent 
hunderteins  cent un 
hundertfünf  cent cinq 
hundertzehn  cent dix 
hundertzwanzig  cent vingt 
zweihundert  deux cents 
tausend  mille 
tausendeins  mille un 
tausendzweihundert  mille deux cents 
zweitausend  deux mille 
zweitausendzehn  deux mille dix 
eine Million  un million 

Anmerkungen zur Implementation

Um die Ausnahmen, die es bei der Bildung der französischen Zahlausdrücke gibt berücksichtigen zu können, werden jeweils Informationen über den Kontext in dem das aktuell erkannte Token steht benötigt. Der Kontext besteht aus zuvor oder später erkannten Token. So gibt es beispielsweise eine Reihe regelmäßig gebildeter Zahlausdrücke:

21: vingt et un
31: trente et un
41: quarante et un
51: cinquante et un
61: soixante et un

die dann von einer unregelmäßigen Bildung abgelöst wird:

71: soixante et onze (sechzig und elf)

Folgt also das Token "siebzig" auf die Token: "ein" und "und", so müssen die letzteren anders übersetzt werden als im Normalfall. Im TETRA-Programm wird die französische Zahl daher erst gebildet, wenn alle drei Token erkannt sind und eine entsprechende Fallunterscheidung gemacht werden kann. Als Grundlage der Fallunterscheidung dient in der Regel "und_zehner" die Integer-Referenzvariable "iZehner", die als Parameter der Regel "zehner" nach dessen Durchlaufen einen Wert zwischen 2 und 9 enthält, je nachdem ob eine Zwanziger, Dreißiger usw. erkannt wurden. Die Integer-Variable kann nun für eine switch-Anweisung verwendet werden, die die richtige Übersetzung der Zahl bestimmt.

Ein ähnliches Problem besteht darin, ob "hundert" mit "Cent" oder "cents" übersetzt werden soll. Hier hilft ein boolscher Parameter, der angibt, ob eine Pluralbildung erfolgen soll oder nicht (Regel: "hundert").

Anm.: In der Produktion "hunderter" wird die Regel hundert folgendermaßen aufgerufen:

hundert[sHundert, iEiner != 1]

d.h. der zweite Parameter, der die Pluralbildung bestimmt, wird während des Aufrufs berechnet:
er ist true, wenn die Integer-Variable "iEiner" nicht gleich eins ist.


 to the top