NonFree

Top  Previous  Next

Beispielsprojekte > Reine Text-Parser > NonFree

 

NonFree.ttp ist das reale Projekt, an dem ich vor der ersten Veröffentlichung des IMP-Filters einigen Wochen gefeilt habe, um es an  meine speziellen Bedürfnisse anzupassen. Nur mein Name ist darin geändert. Bei den bisherigen Projekten wurde darauf acht gegeben, dass sie alle mit der freien Version des TextTransformers verwendbar sind. Das gilt für NonFree.ttp nicht. Trotzdem soll es hier als Anregung und "Steinbruch" kurz vorgestellt werden.

 

Die zentrale Regel darin ist die text-Produktion. Sie besteht im wesentlichen aus einer Schleife mit alternativen regulären Ausdrücken für Worte, Satzzeichen und den übrigen druckbaren Zeichen

 

(

    WORD

  | PUNCTUATION

  | SPECIAL

  | NBSP     {{ SetIsSpam(" : NBSP"); }} // geschütztes Leerzeichen

)*

 

WORD ::= [[:alpha:]]+

PUNKTUATION ::= [[:punct:]]+ 

SPECIAL ::= [^[:alnum:][:punct:][:space:]Æ-Ïæ-ï€ÀÁÂÄÒÓÔÖÙÚÛÜßàáâäòóôöùúûü]+

NBSP ::= \xA0

 

Mit dieser Schleife können alle Texte vollständig erkannt werden, weil die Ausdrücke alle ANSI-Zeichen umfassen. (Leerzeichen werden gemäß den Projekteinstellungen automatisch übersprungen.)

 

Diese Schleife ist nun durch zusätzliche Alternativen erweitert, die die Anfänge möglicher Spam sind. Z.B.:

 

(

    WORD

  | PUNCTUATION

  | SPECIAL

  | NBSP     {{ SetIsSpam("NBSP"); }} // geschütztes Leerzeichen

  | pricelist_if

)*

 

Pricelist_if sieht so aus:

 

IF( pricelist() )

  pricelist         {{ SetIsSpam("price list");  }}

ELSE

  price  

END  

 

Pricelist_if wurde hier ausgesucht, weil darin ein interessantes Feature des TextTransformers verwendet wird, das allerdings in der freien Version nicht verfügbar ist. Mit den Zeilen:

 

  IF( pricelist() )

    pricelist 

 

wird der Parser angewiesen im Text vorauszuschauen. Nur, wenn tatsächlich eine ganze Liste von Artikel und Preisen folgt, wird  der Text als Preisliste geparst und das Spamattribut gesetzt. Andernfalls wird an der aktuellen Stelle mit der obigen Schleife fortgefahren. Die Vorauschau hat den Vorteil, dass nicht nach jedem erkannten Token alle möglichen Alternativen bedacht werden müssen, um einen vorzeitigen Abbruch des Parsers zu verhindern.