SpamAndNonSpam

Top  Previous  Next

Beispielsprojekte > Reine Text-Parser > SpamAndNonSpam

 

Das vorherige Projekt soll nun in dem Projekt SpamAndNonSpam.ttp so erweitert werden, dass auch Spam-Worte erkannt werden. Wegen der Priorität des IMP-Filters, sollten dies aber nur wenige ausgezeichnete Worte sein, die mit sehr hoher Wahrscheinlichkeit auf Spam schließen lassen.

 

Um das Projekt übersichtlicher zu machen, werden zunächst zwei zusätzliche Regeln (Produktionen) erzeugt. Die erste NonSpam umfasst die Nicht-Spam-Worte.

 

  "Spamihilator"

| "TextTransformer"

| "tetra"

 

Die zweite zusätzliche Regel möge Spam heißen und umfasst einige Spamworte:

 

  "Viagra"

| "Casino" 

| "Rolex"

| "Watch"

| "Watches"

 

In der Startregel von SpamAndNonSpam wird eine Schleife solange ausgeführt, bis der gesamte Text verarbeitet ist. Der Stern '*' hinter dem Klammerausdruck symbolisiert die Schleife.

 

{{

int iResult = 0;

}}

(

    SKIP

  | NonSpam  {{ iResult = 1; }}

  | Spam     {{ if(iResult == 0) iResult = -1; }}

)*

{{

out << iResult;

}}  

 

 

Die Formulierung mit der Schleife ist ein kleiner Trick. Die Alternativen zu SKIP können ihm sowohl vorausgehen als auch nachfolgen. In der Startregel wird demnach mit SKIP entweder zum nächsten Spamwort oder Nicht-Spam-Wort gesprungen oder bis zum Ende des Textes. Wenn ein Wort gefunden wurde, wird dem Result ein Wert zugewiesen.

Die Mail wird aber nur dann als Spam klassifiziert, wenn sie kein Nicht-Spam-Wort enthält. Dafür sorgt die Anweisung:

 

if(iResult == 0) iResult = -1;

 

D.h. das Resultat wird nur dann gleich -1 gesetzt, wenn es noch indifferent ist. Wenn dann noch ein Nicht-Spam-Wort folgt, wird das Resultat auf 1 gesetzt, die Mail also insgesamt als Nicht-Spam klassifiziert. So kann der IMP-Filter weiterhin mit hoher Priorität verwendet werden.