Eine typische Mailtextstruktur

Top  Previous  Next

Texte parsen > Eine typische Mailtextstruktur

 

Mit dem IMP-Filter werden Text geparst, das heißt, dass Texte auf ihre Struktur und ihre Bestandteile hin analysiert werden. An einem einfachen Beispiel soll das Prinzip kurz demonstriert werden. Von dem Kopf der E-Mail und eventuellen Unterstrukturen mit binären Daten soll auf dieser einführenden Seite abgesehen werden. Hier soll der reine Text analysiert werden, wie er in einem E-Mail-Programm angezeigt wird.

 

Man kann diesen Text auf verschiedene Weise analysieren. Im einfachsten Fall als simple Wortliste. (Auch eine Liste ist eine Struktur.) Bei der folgenden typischen Mail drängt sich aber eine etwas komplexere Struktur auf.

 

---------

 

Lieber Heinz,

 

blah blah blah

 

Herzliche Grüße

 

Dein Fettie

 

-----------

 

Auf die Anrede folgt ein Text und darauf folgt ein Gruß. Und die Anrede ist wiederum in sich strukturiert und hat u.a. einen Namensbestandteil. Wenn es gelingt, den letzteren zu ermitteln, so kann er gut als Kriterium für eine Nicht-Spam-Mail  verwendet werden. Wenn der Adressat der obigen Mail tatsächlich Heinz heißt, dann handelt es sich bei der Mail höchstwahrscheinlich nicht um Spam, wohl aber, wenn da z.B. stünde "Lieber Fettie". Das wäre vermutlich Reklame für ein Schlankheitsmittel.

Ein Wortfilter reicht in diesem Fall für die Klassifikation als Spam oder nicht Spam nicht aus. Heinz könnte ja einen Freund haben, dessen Spitzname Fettie ist. Für die Unterscheidung ist es daher nötig zu wissen, an welchen Stellen die Namen auftauchen: Fettie in der Anrede wäre Spam und Fettie als Unterzeichner nicht.

 

Mit dem TextTransformer kann man so einen Mail-Text analysieren. Dazu wird zunächst die Struktur obiger Mail etwas abstrakter beschrieben:

 

Mailtext ::= Anrede Text Gruß

 

Anrede, Text und Gruß sind Textbestandteile, die in sich auf jeweils eigene Art strukturiert sind. Eine Definition für die Anrede könnte sein:

 

Anrede ::= "Lieber" "Heinz"

 

D.h. in einer Anrede folgen die Worte "Lieber" und "Heinz" aufeinander.

Das wäre aber zu kurz gegriffen. "Hallo Heinz" wäre eine ebenso korrekte Anrede. Deshalb könnte die obige Regel (Fachterminus: Produktion) so verallgemeinert werden:

 

Anrede ::= ("Lieber" | "Hallo") "Heinz"

 

D.h. in einer Anrede folgt auf eines der Worte "Lieber" oder "Hallo"  das Wort "Heinz". Das ist sicher immer noch zu kurz gegriffen, veranschaulicht aber das Prinzip. Es funktioniert sehr ähnlich wie die regulären Ausdrücke, die vielen Benutzern des Spamihilators bekannt sein dürften. In einem TextTransformer-Projekt können Regeln, die den Aufbau eines Textes beschreiben ganz ähnlich formuliert werden, wie reguläre Ausdrücke, die den Aufbau eines Wort-Ausdruckes beschreiben. Für die Textregel können z.B. die von den regulären Ausdrücken bekannten Wiederholungsoperatoren verwendet werden:

 

Text ::= (WORT+ SATZZEICHEN)*

 

Die Token WORT und  SATZZEICHEN seinerseits können als "echte" reguläre Ausdrücke beschrieben werden.