Hallo und erstmal ein großes Danke meinerseits für eure Antworten!
Ich denke das Beste wird sein, wenn ich einfach mal auf alle eingehe.
XML ist das wohl bescheuertste Serialisierungs-Format, das mir je untergekommen ist, und das mit dem absurd höchsten Overhead an Nutzlos-Daten.
Ja, genau das dachte ich mir anfangs auch, welshalb ich hier gefragt habe. Informationen die ich schlichtweg nicht verwenden kann, noch dazu das parsen der einzelnen Tags sah für mich einfach als zu großer Arbeitsaufwand aus, der letzten Endes nur hinderlich ist.
Ich muss aber sagen, ich hab selbst noch ein bisschen herumprobiert und meinen Langenscheidt ausgepackt und dann einfach einmal Worte ins "Wöterbuch" geschrieben. Dabei sind immer wieder neue Dinge hinzugekommen, also Informationen die beachtet werden mussten, etwa bei dem Wort "abdecken":
abdecken: to cover;
Dach to take off;
Haus to take the roof off;
Tisch to clear
Ich hab das ganze auf zwei Weisen getestet, einmal mit einer normalen Textdatei, wobei ich ein bestimmtes Muster verwendet habe, das möglichst sparsam sein sollte und durch einen Algorithmus "decodiert" werden sollte. Bei der zweiten Datei habe ich eine XML-Struktur verwendet, die natürlich viel größer war als die erste Datei, mehr als doppelt so viel. Allerdings hatte ich hier den Vorteil von XML auf meiner Seite: Der Algorithmus kann bestimmte Tags bereits lesen, die die er nicht kennt lässt er weg und somit kann man später immer wieder Informationen ergänzen. Der Grund warum diese Art der Datenspeicherung überhaupt für mich in Frage kommt.
Wenn du es selber machen willst, musst du halt irgendwie in der Datei schon in die Nähe des richtigen Wortes springen ohne die ganze Datei vorher gelesen zu haben. Mit XML wird das sehr schwierig.
Das ist eine Sache die ich mir auch schon überlegt habe. Ich hatte ganz primitive Lösungsansätze: Wieso sollte ich alle Wörter in eine Datei schreiben, ich mach Dokumente für jeden einzelnen bekannten Buchstaben, also etwa so:
a.dictionary
b.dictionary
...
somit sollte ich es mir prinzipiell ersparen bei dem Wort "brechen" auch noch alle Worte mit "a" beginnend einzulesen, da ich einfach den Anfangsbuchstaben verwende um die entsprechende Datei zu suchen.
Bin ich dann in der Datei so dachte ich an eine Art Verzeichnis, welches mir im Fall des Wortes "brechen" sagt, so die Worte mit "br" beginnend anfangen, in XML etwa so:
<index line="123">b</index>
<index line="456">c</index>
...
Ich springe dann in die entsprechende Zeile und setzte dort meine Suche fort. Damit die Daten nicht unnötig groß werden und es nur um die Erweiterbarkeit und nicht um die optimale Lesbarkeit geht, dachte ich könnte man oberes auch so gestalten:
<i l="123>b</i>
...
für einfache Datenspeicherungen so wie in der win.ini
Ich muss gestehen, mit ".ini"-Dateien kenne ich mich nicht wirklich aus...allerdings dachte ich bisher, dass sie eher veraltet seien, wobei ich wie gesagt wenig Ahnung davon habe, also tut es mir leid wenn ich mich irre.
Geht es hier um einfache Übersetzungssoftware? Wenn ja, dann macht eine Art ini-File sehr wohl Sinn. Schreib deine Daten einfach in eine Textdatei. Zeile für Zeile.
Das war meine ursprüngliche Idee, allerdings tat sich mir dann ein Problem bei dieser Stelle auf:
Die Daten ließt dein Programm nun ein und generiert eine geeignete Datenstruktur.
weil ich wie gesagt sehr schnell gemerkt habe, dass immer wieder neue Informationen hinzukommen und das Programm dementsprechend modifiziert werden muss, damit es damit umgehen kann. So etwas ist mir mit der XML-Version nicht passiert.
Ein Binärer Suchbaum zum Beispiel ist schnell implementiert und du kannst mit log(n) Elemente finden.
Das klingt sehr interessant, könntest du mir das bitte noch einmal genau erklären?
Voraussetzung ist hierfür, dass alle Daten aktuell im Speicher gehalten werden dürfen. Also auch hier gilt, möglichst keine GB an Daten.
Ich wollte mit den oben beschriebenen Ansätzen dafür sorgen, dass ich möglichst wenig meines kompletten Wörterbuches einlesen muss. Es ist doch so, dass wenn ich eine Datei bzw. einen Stream öffne, dass ich dadurch noch keine Daten im Speicher halte, oder irre ich mich? Wenn nicht, dann würde ich ohnehin immer nur Zeile für Zeile einlesen, wobei nicht passende Werte einfach wieder aus dem Speicher genommen werden.
Das alles sind allerdings nur grobe Vorstellungen. Ach und
Geht es hier um einfache Übersetzungssoftware?
Naja, etwas von mir produziertest verdient den Namen "Software" eigentlich nicht
. Es geht um ein Übungsprojekt von mir, bei dem ich mich mit eben Datenspeicherung und anderem beschäftigen wollte, unter anderem auch das übersetzten von ganzen Satzgebilden, wobei diese sich so wie ich mich kenne nur auf einfache 3-Wort-Sätze beschränken werden.
Jetzt würde mich interessieren, wenn ihr beispielsweise Spiele schreibt, wie speichert ihr eure Daten?
Ich bedanke mich jetzt schon einmal für eure Antworten!
Lg
Hans_Peter