Hallo Kaeru Gaman (und alle anderen Beteiligten)!
Auch am Sonntag schon so früh fit?
Hallo Nachbar, Korbach liegt ja nicht weit von Meschede, wo ich wohne
Ja die Kompression sollte für den Übersetzer sein. Aber deine Überlegungen stimmen, da kann man nicht viel
komprimieren. Vielleicht sollte ich das Ganze doch von einer anderen Seite her anpacken. Ich gebe dir als Experten einmal
ein paar mehr Infos für weitere Überlegungen:
Die Daten sehen ja so aus:
abadono abadon
abako rechenbrett
babao rosinenkuchen
...
zumzumo gesumm
sollen aber später erweiter werden z.B. mit Wortangaben, Mehrzahl, Vergangenheitsformen bei Verben usw. :
abako rechenbrett substantiv rechenbretter
babao rosinenkuchen substaniv rosinenkuchen ...
trinki trinken verb trank getrunken
Die txt-Datei hat momentan 60000 Einträge und ist (mit bisher zwei Spalten) 1500 kB groß. Die Überlegung mit dem
Komprimieren kam daher, dass die Datei gezippt nur 500 kB groß ist.
Kiffi hat den Vorschlag mit PackMemory() und UnPackMemory() gemacht. Muss ich mir noch ansehen.
Ich glaube, es ist besser die ganze Zeile in ein Feld zu ziehen und nur ein Array zu verwenden
Die Überlegung: Muss/Kann ich wirklich alle 60000 Zeilen in ein Array ziehen (Größe des Arbeitsspreicher?, Geschwindigkeit?) oder ist es nicht sinnvoll erst dann nur einzulesen, wenn das Wort gebraucht wird.
Wenn man also den Satz:
Mi trinkas kafon hodiau (Ich trinke heute Kaffee)
übersetzen will, würde man nur alle Wörter mit M einlesen bis zum Wort "Mi", dann mit T, dann mit K und dann mit H
durchsehen. Da kafon mit K und dann A beginnt, würde dieses Wort unter K beim Einlesen sehr schnell gefunden.
Das würde für die Lösung mit
26 Data- Sätzen sprechen mit
Eventuell alle Einträge mit "A" in einem Megalangen-A$-String, wo mit Semikolon getrennt ist. Kiffi hat ja den Vorschlag mit PackMemory() und UnPackMemory() gemacht. Dann gibt es einen B$, C$ usw.
Andere Idee, die ich aber noch nich völlig durchdacht habe. Es gibt keine Wörter mit 1 Buchstaben im Wörterbuch. Wenn
man nun das ganze Wörterbuch als Array hat und ein zweites Array das sich Sprungmarken der ersten zwei Buchstaben
merkt:
Aa = 1
Ab = 5
Ac = 8
...
Ba = 345
Bb = 351
Bc = 378
..
Zy = 59675
Zz = 59678
Dann könnte man sehr schnell anhand der ersten zwei Buchstaben im "Wörterbuch" an die richtige Stelle gelangen.
Kann man das irgendwie elegant?
Und die wichtige Performance-Frage: Weißt du, wie groß Arrays sein können? Sind 200000 Felder kein Problem, wenn es
sich um Strings handelt, und jedes Feld z.B. 100 Buchstaben hat? Wie lange dauert das Einlesen und ist das Programm bzw. der Arbeitsspeicher nicht überfordert?