| |
FlySoft Member
Anmeldedatum: 16.04.2009 Beiträge: 444 Wohnort: Nähe von Stuttgart
|
Verfasst am: 23.06.2012, 13:49 Titel: Textkomprimierung |
|
Hallo liebe XNAler,
ich habe eine Frage, die für mich recht komplex ist. Es geht um... Textkomprimierung.
Mein Ziel:
Ich will die Wikipedia (die deutsch) offline auf das Windows Phone bringen. Da ich bei E-Plus bin und oft in ländlichen Gegenden, fände ich das für mich ganz Praktisch.
Das Problem:
Wie Packe ich das Zeug am besten?
Meine Momentan struktur ist recht einfach. Jeder Artikel ist eine (Text-)Datei, in der nur der Inhalt drinsteht. Diese sind in Ordner umsortiert, also der Facebook-Artikel ist in "./F/A/C/Facebook.txt"; Alle anderen Artikel analog.
Jetzt sind das natürlich massenweise Ordner ([0-9;A-Z;!;%;...]), in denen die Datein sortiert sind.
Jetzt möchte ich die Dateien irgendwie für das Phone zugänglich Packen.
Meine bisherigen Versuche:
7Zip
7Zip ist ein tolles Format! Es packt den Inhalt auf 1,1GB (20%) runter, aaaaber:
Das Entpacken ist nicht trival. 7Zip speichert seinen Inhalt in "Solide Blöcke", die dann komplett entpackt werden, und dazu hat es noch ein paar weitere Verrenkungen. Kurz: Ich habe es werde mit LMZA noch mit LMZA2 hinbekommen, eine 7z-Datei zu erstellen, die keine OutOfMemory-Exception auf dem Phone liefert. Schade
(Entpacker auf dem Phone: http://sharpcompress.codeplex.com/)
Zip
Zip sollte vermutlich funktionieren - doch es komprimiert (bei 7Zip) mit dem Deflate-Algorithmus mehr als doppelt so schlecht wie 7Zip! Eigentlich unakzeptabel.
(Entpacker auf dem Phone: Noch nichts probiert - aber die SharpZipLib von ICSharpCode sollte funktionieren=
Andere Formate
Hab ich nicht probiert, da sie alle Stream-basiert sind. Ich weiß einfach nicht, wie ich bei denen das Problem lösen sollte, schnell auf eine Datei am Ende zuzugreifen zu können.
Mehrere Archive (z.B. 7Zip)
Ist eine Idee, die ich auch schon überlegt habe. Geht aber zu lasten der Kompression :/ Ich könnte ja immer 20MB Artikel in eine Datei Packen, aber, und diese in eine Größere Datei Packen. Aber das geht, wie gesagt, zu lasten der Kompression. Es geht ja nicht nur um Bandbreite, sondern auch Speicherplatz ist ein rares gut.
Hat irgendjemand eine Idee, wie ich das Problem lösen sollte?
Viele Grüße und viel Dank im Vorras,
FlySoft _________________ Wenn du es verstehen solltest, hätte ich es nicht "Code" genannt. |
|
| Nach oben |
|

|
Der Gorch Member
Anmeldedatum: 15.02.2010 Beiträge: 118 Wohnort: Irgendwo
|
Verfasst am: 23.06.2012, 16:33 Titel: |
|
Mehrere Archieve plus einen Index werden glaube ich nicht schlecht sein. Soviel ich weiss musst du nämlich für besagte Algorithmen immer die ganze oder zumindestens einen großen Teil der Datei auslesen. Schreibst du die Algorithmen selber? Wenn ja kannst du dir ja selbst was einfallen lassen, um die Artikel kleiner zu machen. Zum Beispiel kannst du besonders häufigen Wörtern einen eigenen Platz im Huffman-Baum spendieren oder die Wörter indizieren.
EDIT: Sorry, ich sehe gerade das du Libaries verwendest. Wie gesagt, versuche eigene Algorithmen. |
|
| Nach oben |
|

|
FlySoft Member
Anmeldedatum: 16.04.2009 Beiträge: 444 Wohnort: Nähe von Stuttgart
|
Verfasst am: 23.06.2012, 16:45 Titel: |
|
Einen eigenen Komressionsalgorithmus... Klingt kompliziert, aber möglich... Ich muss mich da aber erst reinarbeiten.
Andere Ideen? Gibt es schon code? _________________ Wenn du es verstehen solltest, hätte ich es nicht "Code" genannt. |
|
| Nach oben |
|

|
Der Gorch Member
Anmeldedatum: 15.02.2010 Beiträge: 118 Wohnort: Irgendwo
|
Verfasst am: 23.06.2012, 17:17 Titel: |
|
| Guck dir mal die theoretische Basis von ZIP bei Wikipedia an, konkret die Shannon-Fano-Kodierung und LZ77. Ich würde um ein Wort zu kodieren zunächst ein Bit als Flag nehmen, ob das Wort unter den 128 häufigsten der deutschen Sprache ist. Wenn ja, dann stellen die nächsten 7 Bits das gesamte Wort dar. Wenn nicht, dann ist das nächste Bit ein weiteres Flag, ob das Wort unter den 64 häufigsten dieses Textes ist. Wenn das auch nicht wahr ist, dann geben die nächsten Bits die Länge des Wortes an, und das Wort wird im Klartext gespeichert. Die genannten "häufigsten Wörter" sind dann für die gesamte Wikipedia bzw. den gesamten Artikel indiziert. Ich denke, wenn du dieses Verfahren noch verbesserst, könntest du damit sehr hohe Kompressionsraten erzielen. |
|
| Nach oben |
|

|
FlySoft Member
Anmeldedatum: 16.04.2009 Beiträge: 444 Wohnort: Nähe von Stuttgart
|
Verfasst am: 23.06.2012, 17:19 Titel: |
|
Das habe ich mir auch überlegt. Wenn ich das nicht sogar mit Silben mache... Aber mal sehen, was ich machen kann  _________________ Wenn du es verstehen solltest, hätte ich es nicht "Code" genannt. |
|
| Nach oben |
|

|
|
|
|