Markus Stengel, Universität Tübingen, Juni 2002
LZxx-Verfahren und Beispiele
Pressestimmen
Entropie
Anwendungen
Spracherkennung
Autorenidentifikation
Sprachklassifizierung
weitere Anwendungen
Quellen
Entwickelt von Abraham Lempel und Jacob Ziv, 1977+, Technion in Haifa, Israel
LZxx ist die Familie der am meisten eingesetzten Kompressionsverfahren, Implementationen sind z.B. gzip, compress, zip, Stacker, WinZip
nicht zu verwechseln mit neueren Verfahren wie z.B. bzip2
viele verschiedene Unterarten:
|
Begriff |
Erklärung |
|---|---|
|
Input Stream |
„Eingabestrom“: zu komprimierende Sequenz von Zeichen (Character) |
|
Character |
„Zeichen“: das zugrundeliegende Datenelement im Eingabestrom (Input Stream) |
|
Coding Position |
Position des character's im Eingabestrom, das gerade kodiert wird (Anfang des Lookahead Buffer's) |
|
Lookahead Buffer |
die Zeichenfolge von der Coding Position bis zum Ende des Input Stream's |
|
Window |
Das „Fenster“ der Größe W enthält die W Zeichen vor der coding position, also die letzten W bearbeiteten Zeichen |
|
Pointer |
verweist auf die letzte Übereinstimmung im Fenster und gibt die Länge derselben an |
Suche nach der längsten Übereinstimmung im Fenster, beginnend beim lookahead buffer
gibt einen Zeiger auf die Übereinstimmung zusammen mit dem ersten darauffolgenden character des lookahead buffer's zurück
gibt es keine Übereinstimmung, wird ein „null“-Zeiger und der character an der aktuellen Position zurückgegeben
setze der coding position auf den Anfang des Eingabestroms
finde die längste Übereinstimmung im Fenster für den lookahead buffer
gib das Paar (P,C) mit der folgenden Bedeutung zurück:
P ist der Zeiger auf die Übereinstimmung im Fenster
C ist der erste character im lookahead buffer, für den keine Übereinstimmung gefunden werden konnte
ist der lookahead buffer nicht leer, setze die coding position und das Fenster auf den character nach C und wiederhole Schritt 2
Eingabestrom:
|
Position |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|---|---|---|---|---|---|---|---|---|---|---|
|
character |
A |
A |
B |
C |
B |
B |
A |
B |
C |
X |
Kodierungsablauf:
|
Schritt |
Position |
Übereinst. |
Zeichen |
Ausgabe |
|---|---|---|---|---|
|
1 |
1 |
-- |
A |
(0,0) A |
|
2 |
2 |
A |
B |
(1,1) B |
|
3 |
4 |
-- |
C |
(0,0) C |
|
4 |
5 |
B |
B |
(2,1) B |
|
5 |
7 |
A B C |
X |
(5,3) X |
das Fenster wird gleich behandelt wie bei der Kompression
bei jedem Schritt wird (P,C) gelesen
Ausgabe der Sequenz aus dem Fenster, die durch P und C spezifiziert wird
sehr gute Kompressionsrate für viele Arten von Daten
Dekompression sehr schnell
geringer Speicherbedarf (gewöhnlich 4-64 Kilobytes)
Kompression kann aufgrund der Suche nach Übereinstimmungen sehr lange dauern
WinZip
gzip
zip
Stacker
|
Begriff |
Erklärung |
|---|---|
|
Charstream |
„Zeichenstrom“: zu komprimierende Sequenz von Zeichen (character) |
|
Character |
Grundlegendes Datenelement in einem charstream |
|
Prefix |
„Präfix“: eine Sequenz von Zeichen, die einer anderen vorhergeht |
|
String |
Das prefix zusammen mit dem character, dem es vorhergeht |
|
Code word |
Grundlegendes Datenelement im code stream; Es repräsentiert einen string aus dem dictionary |
|
Code stream |
Die Sequenz der code words und characters (also die Ausgabe des Kompressionsalgorithmus) |
|
Dictionary |
Eine Tabelle mit strings als Einträge. Jedem string wird entsprechend seiner ID im dictionary ein code word zugeordnet |
|
Current prefix |
Das prefix, das gerade vom Kompressionsalgorithmus bearbeitet wird. Symbol: P |
|
Current character |
Wird vom Kompressionsalgorithmus ermittelt. Im Allgemeinen ist dies der character, dem das aktuelle prefix vorangeht. Symbol: C |
|
Current code word |
Das code word, das gerade vom Dekompressionsalgorithmus bearbeitet wird. Es wird mit W bezeichnet, und die strings, die es repräsentiert, als string.W |
Am Anfang ist das dictionary leer
ein neuer character wird gelesen
ist er noch nicht im dictionary, wird er diesem hinzugefügt
ansonsten wird er an den längsten, passenden string im dictionary angehängt und als neuer Eintrag abgespeichert
immer längere Einträge im dictionary
Dictionary und P sind leer
C := der nächste character im charstream
Gibt es den string P+C bereits im dictionary?
ja, P := P+C (erweitere P mit C)
nein,
gib diese zwei Objekte an den codestream:
das code word, das P zugeordnet ist (wenn P leer ist, gib 0 zurück)
C, in der gleichen Form wie im charstream
füge den string P+C dem dictionary hinzu
P := leer
weitere character im charstream?
ja, gehe zu Schritt 2
nein,
wenn P nicht leer ist, gib das code word aus, das P zugeordnet ist
ENDE
Eingabestrom:
|
Position |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
|---|---|---|---|---|---|---|---|---|---|
|
Zeichen |
A |
B |
B |
C |
B |
C |
A |
B |
A |
Kodierungsablauf:
|
Schritt |
Position |
dictionary |
Ausgabe |
|---|---|---|---|
|
1 |
1 |
A |
(0,A) |
|
2 |
2 |
B |
(0,B) |
|
3 |
3 |
B C |
(2,C) |
|
4 |
5 |
B C A |
(3,A) |
|
5 |
8 |
B A |
(2,A) |
Zu Beginn ist das dictionary leer
funktioniert genauso wie die Kompression, jedoch wird nich C, sondern (W,C) gelesen und der entsprechende string zurückgegeben
ähnlich gute Kompressionsrate für viele Arten von Daten
weniger Vergleiche müssen durchgeführt werden als bei LZ77
Speicherbedarf kann stark wachsen (lange Einträge im Wörterbuch)
Compress
Lempel-Ziv-Storer-Szymanski (LZSS):
Verbesserung des LZ77-Verfahrens
setzt bei der Kodierung ein spezielles Bit zur Identifizierung des code words setzt und spart somit weiteren Platz
Lempel-Ziv-Welch (LZW):
wichtigste Variante des LZ78-Algorithmus
Hauptunterschiede zu LZ78:
das dictionary ist niemals leer, sondern wird mit allen characters vorinitialisiert
one-character-prefix
der character, mit dem ein neues prefix beginnt, ist der letzte character des vorherigen strings
Lossy LZW Algorithmus (LLZW):
an GIF-LZW-Algorithmus angelehnt
Dekompression ist kompatibel
Lempel-Ziv-Miller-Wegman (LZMW):
Variante des LZW-Verfahrens
hängt anstatt einzelnen Buchstaben den längstmöglichen string aus dem dictionary an
berichteten über die Arbeit von Dariao Benedetto, Emanuelle Caglioti und Vittorio Loreto von der Universita degli Studi di Roma „La Sapienza“, veröffentlicht in der Fachzeitschrift „Physical Review Letters“
besonders hervorgehoben wurde die Eignung der Methode, um
die Sprache eines Textes zu erfassen
den Autor eines Textes zu identifizieren
teilweise wurde gezeigt, daß die Methode nicht für alle Zwecke verwendbar ist (mögliches Interpretationsproblem)
Im Folgenden soll die Definition von Chaitin-Kolmogorov gelten:
|
|
|
|
|
|
|
Bei der Analyse einer Zeichenfolge interessiert der Informationsgehalt, z.B.:
Teilsequenz eines DNA-Strangs, die ein Gen bestimmt
Interpretation und Verstehen eines geschriebenen Texts (Sprache, Thema, Autor, etc.)
Informationsgehalt ist die Entropie
Frage: Kann daraus die semantische Information ermittelt werden?
Methode, die Distanz bzw. Ähnlichkeit zweier Zeichenfolgen zu messen
Klärung der Übertragbarkeit auf die Semantik
zumindest bei den durchgeführten Experimenten gelangen
Erkennung der Sprache
Ermittelung des Autors
Erfassung des Themas zum Zwecke der automatischen Klassifikation/ Verschlagwortung
Durchschnittliche Distanz zwischen zwei Sequenzen der Form ϭ1...ϭn ist die Ordnung des Inversen seiner Auftrittswahrscheinlichkeit
häufiger auftretende Sequenzen brauchen weniger Bytes, seltenere benötigen mehr
geht nicht deutlich hervor, was gemeint ist:
zusätzliche Kodierung (z.B. Huffman) bereits einbezogen wird
je länger die Sequenz, desto größer die Platzersparnis
genutzte Eigenschaft:
|
|
|
|
|
|
|
|
Symbol |
Bedeutung |
|---|---|
|
S |
unkomprimierte Text |
|
Z |
komprimierter (gezippter) Text |
|
s |
Entropie pro Zeichen des Quelltextes |
für
![]()
In anderen Worten:
Der Text wird nicht auf die beste Weise kodiert, aber je länge er ist, umso mehr nähert er sich dem Optimum an.
|
|
|
|
|
|
|
Maß für die Länge:
|
Symbol |
Bedeutung |
|---|---|
|
α |
ein Zeichenstrom α |
|
β |
ein Zeichenstrom β |
|
A |
lange Sequenz von α |
|
a |
kurze Sequenz von α |
|
B |
lange Sequenz von β |
|
b |
kurze Sequenz von β |
|
|
Zahl der Zeichen von b |
|
A+b |
Konkatenation von b an A, anschließendes komprimieren (zippen) |
|
LX |
Länge eines gezippten Textes X in Bits |
Das Maß für die Länge von b in der für A optimierten Kodierung:
![]()
relative Entropie je Zeichen zwischen α und β:
![]()
In anderen Worten:
Sind α
und β Texte in
verschiedenen Sprachen, so ist
ein
Maß für die Schwierigkeit, die eine Person mit der
Muttersprache α
hat, einen Text in der Sprache β
zu lesen
Praktische Versuche brachten eine hervorragende Übereinstimmung mit den theoretischen Werten zustande
Verfahren sehr robust in Bezugauf Variationen in der Dateigröße, typisch:
A: 32-64 Kilobytes
b: 1-15 Kilobytes
|
Ziel |
Automatische Erkennung der Sprache eines Textes
|
|
Gegeben |
|
|
Ablauf |
|
|
Versuch |
10 Texte in je 10 Sprachen: ⇨ Sammlung von 100 Texten
|
|
Ergebnis |
|
|
Ziel |
automatische Erkennung eines Textes zu einem Autor
|
|
Gegeben |
|
|
Ablauf |
|
|
Versuch |
Sammlung von insgesamt 90 Texten von 11 italienischen Autoren |
|
Autor |
Textanzahl |
Erste Wahl |
Zweite Wahl |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ergebnis |
|
Bemerkung:
Erfolgsrate durch z.B. Gewichtung der Durchschnitte der ersten m als wahrscheinlich eingestuften Kandidaten des Textes noch steigerbar
Faktoren wie z.B. Variationen im Schreibstil beeinflussen die Erfolgsrate
|
Ziel |
Klassifikation von Sprachen anhand von Texten
|
|
Gegeben |
eine möglichst große Sammlung von Texten in jeweils sovielen Sprachen wie möglich
|
|
Probleme |
|
|
Ablauf |
|
|
Versuch |
|

|
Ergebnis |
Alle linguistischen Hauptgruppen Romanisch, Keltisch, Germanisch, Ugro-Finnisch, Slavisch, Baltisch und Altaisch wurden erkannt |
Verschiedene Anwendungen wurden für eine sehr allgemeine Methode, Sequenzen zu erkennen und zu klassifizieren, gezeigt
weitere Anwendungen, z.B. Ermittlung des Informationsgehalt (s. folgendes Beispiel) sind denkbar (Aktienkurse, DNA, etc.)
Die Arbeit von Benedetto, Caglioti und Loreto ist nicht die erste, die mit mathematischen Methoden literarische Texte auf Autorenschaft prüft:
Linguistikprofessor George Zipf, 1932,
Harvard-Universiät:
„Studien zur Wortfrequenz“
George Yule, Schottland, 1944:
ordnete in
seinem Werk „The Statistical Study of Literacy“ „De
imitatione Christi“ aus dem 15. Jh. dem Mystiker Thomas a
Kempis zu
amerikan. Statistiker R. Frederik Morteller
und David L Wallace, 1964:
gaben Aufschluß über die
Autoren der „Federal Papers“ aus dem 18. Jh.
Versuch 1: Informationsgehalt
Gegeben:
18 Texte, 14000 Wörter, 105000 Zeichen
häufigstes Thema: „Israel“
Winzip als Kompressionsprogramm
reine Kompression:
Kompression auf
der ursprünglichen Größe, also
Redundanz
Sortierung:
Kompression auf
der ursprünglichen Größe, also hat sein Text etwa
15% mehr Relevanz als ein Wörterbuch
Randomisierung:
Kompression auf
der Größe, eine zufällige Sammlung hat also mehr
Gehalt als die verfassten Artikel
Versuch 2: Autorenidentifikation und Vergleich
Gegeben:
je ein langer (1000 Wörter) und ein kurzer (50 Wörter) Text von zwei Journalisten
Winzip als Kompressionsprogramm
Identifizierung des Autors:
korrekte Identifizierung des Autors
Vergleich kurze mit langen Artikeln:
außerordentlich gute Kompression, also nur wenig neues in den Artikeln
Bemerkung:
Nicht korrekte Anwendung des Verfahrens
oben definierter Entropiebegriff lässt sich nicht ohne weiteres auf die Semantik, bzw. den Informtionsgehalt, übertragen
„Language Trees and Zipping“,
Benedetto, Caglioti, Loreto,
„La Sapienza“
Universität, 13.05.2002
„Buchstabenstauchung“, Neue Züricher Zeitung, 31.05.2002, http://www.nzz.ch
Datenkompressionen,
http://www.datacompression.info/Lossless.shtml,
http://www.rasip.fer.hr/research/compress/algorithms/fund
„Zip-Algorithmus identifiziert Autoren“, Heise Newsticker, 28.01.2002, http://www.heise.de/newsticker