Rul-Skript
Skriptsprache für Textbearbeitung
Die Rul-Skriptsprache ist das eigentliche Arbeitswerkzeug von directEXTRACT.
In dieser Skriptsprache wird genau definiert, welche Dokumententypen es gibt
und welche Daten aus den Dokumenten extrahiert werden sollen.
Im Folgenden werden die technischen Grundlagen der Rul-Skriptsprache
erläutert.
Fuzzy - Technologie für Textverarbeitung
Nun sind Dokumenten - Layouts in der Praxis oft Wandlungen unterzogen. Wir
haben herausgefunden, dass die Fuzzy-Technologie weitaus besser als die
bekannte (binäre) Arithmetik geeignet ist, um die hier auftretenden
Probleme der Textverarbeitung zu lösen. Denn letztendlich geht es darum,
auch bei leicht geändertem Layout einer Seite trotzdem immer die gleichen
Textstellen zu finden.
Deshalb wollen wir Ihnen nun unseren Ansatz der Fuzzy - Mathematik etwas
näher bringen.
Die Fuzzy - Technologie beruht darauf, dass Bedingungen und Entscheidungen
nicht aus Ja und Nein bestehen, sondern aus einer
Wahrscheinlichkeit oder besser einer Bewertungszahl im Intervall
p=[0..1].
Die Bedingung "Ist diese Text rot?" wird nicht mit einem klaren
Ja/Nein beantwortet, sondern mit einer Bewertungszahl, die in diesem Fall die
Ähnlichkeit der Textfarbe mit der Farbe Rot angibt. Blau ist dabei weniger
ähnlich zu Rot als Orange.
Nach einem ähnlichen Prinzip wird bei Positionen verfahren. Die
Bedingung "Ist der Text im Bereich [0,0,100,100]" führt mit
Fuzzy - Methodik dazu, dass jeder Text auf der Seite eine Bewertungszahl
zugewiesen bekommt, wie gut der Text in dem gesuchten Bereich positioniert ist.
Mit anderen Worten, wie Nahe der Text dem gesuchten Bereich ist.
Es gibt viele verschiedene solcher Bewertungen: Textfarbe, Position,
Schriftart, Schriftgröße und Textinhalt. Selbst Relationen von
Nachbarelementen wie der Abstand voneinander können auf diese Weise
bewertet werden.
Mehrere solcher Bewertungen können dann mit Bedingungen wie AND
und OR zusammengefasst werden. Aber auch hier darf man das bekannte
AND und OR nicht logisch betrachten. Es wird tatsächlich
auch hier eine weiche Fuzzy - Mathematik ausgeführt. Hatte ein Textelement
vorher viele Maßzahlen (zu jeder Bedingung wie Farbe und Position jeweils
eine), so werden diese nun zu einer Bewertungszahl pro Textelement
zusammengefasst.
Auf diese Weise kann man nun mehrere Bewertungszahlen als auch Bedingungen
wie AND und OR miteinander verschachteln und beliebig komplexe
Ausdrücke bilden.
Erst ganz zum Schluss werden die Bewertungszahlen ausgewertet und das am
höchsten bewerteten Element verwendet. Es werden sozusagen ein oder
mehrere Textelemente selektiert. Der entsprechende Rul - Befehl heißt
dann auch SELECT.
Warum denn eine eigene Programmiersprache ?
Wenn man sich vor Augen hält, dass jeder der hier genannten
Ausdrücke gleich einen ganzen Satz von nicht-lineare Gleichungen auf
wirklich jedes einzelne Textelement anwendet,
Eine typische Aufgabe eines Rul-Skriptes ist es, Textstellen aufzufinden.
Dies führt recht schnell zu komplexen Regeln, die im einfachsten Fall etwa
in dem folgenden Muster aufgebaut sind:
"Suche mir den nächsten roten zusammenhängenden Text
rechts neben dem Text KUNDENNUMMER der mit einer Ziffer beginnt und der sich
ungefähr im Seitenbereiche [0,0,100,100] befindet."
So einen Ausdruck mit den bekannten funktionalen Programmiersprachen wie C,
Basic oder Pascal abzubilden führt zu keinem praxisnahen Ansatz.
In der Rul-Skriptsprache wird daraus:
SELECT( BEST,
AND ( NEAR( RIGHT,
SELECT( BEST,
AND( BOX( 0,0,100,100),
TEXT( "KUNDENNUMMER")
) ),
COLOR( RED)
) )
Zugegeben, wenn man sich nie mit diesem Typ von Programmiersprachen
beschäftigt hat, sieht das erstmal ungewöhnlich aus. Vielleicht
kennen Sie noch die "polnisch-umgekehrte Notation" von älteren
Taschenrechnern oder manchen Programmiersprachen. Versuchen Sie einfach den
Ausdruck von innen nach außen zu lesen.
Der innere Ausdruck Select sucht den Text "Kundennummer" in
dem durch den Ausdruck Box bestimmten Bereich. Der umklammernde Ausdruck
Near sucht dann den nächsten Text rechts daneben. Zusätzlich
werden durch den Ausdruck Color nur rote Texte zugelassen. Der
äußere Select Ausdruck sucht dann das am besten passende
Element heraus.
Für diese Art Aufgaben ist dieser Notation ideal, denn in einer
"normalen" Programmiersprache würden Sie für diese Aufgaben
viele hundert Zeilen Code benötigen.
Tatsächlich muss man Rul-Skript ja auch nicht in allen Einzelheiten
verstehen, denn der RulEditor erstellt diese Skripte automatisch.
Die Elementliste und ein paar kleine Tricks
Genau genommen arbeitet das Rul-Skript immer mit einer Liste von
Textelementen, der Arbeitsliste. Am Anfang sind immer alle Text-Elemente darin
enthalten. Ein Fuzzy - Befehle behandelt immer alle Elemente die in der
aktuellen Liste von Textelementen enthalten sind.
Mit Hilfe des Befehls SELECT können nun solange Textelemente aus
der Arbeitsliste entfernt werden, bis nur noch das gesuchte Textelement
übrig bleibt.
Auf diese Weise kann man jederzeit das Beste aus beiden Welten verwenden.
Zum Beispiel ist es in den meisten Fällen unsinnig, dass alle Textelemente
von allen Seiten ausgewertet werden. In der Regel sucht man nach einem Text auf
der ersten, zweiten oder der letzten Seite. Mit dem einfachen Befehl:
SELECT( ALL, PAGE( 0))
werden ganz einfach alle Elemente aus der Arbeitsliste entfernt, die sich
nicht auf der ersten Seite befinden (die Bedingung PAGE fängt bei 0 an zu
zählen). Nur Elemente die sich auf der ersten Seite befinden, verbleiben
in der Arbeitsliste.
Danach kann man das gesuchte Element dann einfach mit einem zweiten
SELECT Befehl einkreisen. Wenn man z.B. den gesamten Text in einem
bestimmten Bereich sucht:
SELECT( BEST, BOX(10,10,100,100))
Daneben ist der UNSELECT Befehl das genaue Gegenteil von
SELECT. Er entfernt die Textelemente aus der Arbeitsliste, die der Fuzzy -
Bedingung am besten entsprechen. Dieser Befehl eignet sich besonders um
störende Texte vor der eigentlichen Auswertung zu entfernen.
Natürlich lässt sich die Arbeitsliste in beliebigen Variablen
speichern und auch wieder laden, dies geht mit den Befehlen SET und
GET.
Modifikatoren
Übliche Office - Programme wie Microsoft Word oder OpenOffice
Writer können Texte auf sehr unterschiedliche Weise drucken. An einem
normalen Drucker mögen diese Unterschiede nicht auffallen, für eine
Textverarbeitung macht es aber schon Unterschiede ob der Text in der Form
"123456" oder "1", "2", "3",
"4", "5" ausgegeben wurde. Auch können manchmal
Zeichen enthalten sein, die ganz einfach unerwünscht sind. Es gibt auch
Programme, die Drucken den Text "Kundennumer: 12345" in der Form
"Kundennumm" "er: 123" "45".
Der Modifikator CONCAT kann nahe beieinander stehende Textelemente
wie "1", "2", "3", "4", "5"
zu einem Textelement der Form "12345" zusammenfassen. Durch die
MODIFY Anweisung lassen sich alle Textelemente der Liste auf einmal
modifizieren. So können bestimmte unerwünschte Zeichen oder Phrasen
ganz leicht ignoriert werden.
Bedingungen
Tatsächlich enthält Rul-Skript auch eine ganz normale
Programmiersprache mit IF-THEN-ELSE, WHILE-Schleifen, Booleschen Bedingungen
und algebraischen Ausdrücken. Dies kann dafür verwendet werden um
zwischen den verschiedenen Dokumenttypen zu unterscheiden und um die Ausgabe zu
formatieren.
Wenn Sie sich jetzt immer noch nicht klüger fühlen...
... macht das überhaupt nichts. Sie haben sicher verstanden wie
mächtig Rul-Skript in Bezug auf Textverarbeitung ist. Der Rul-Editor nimmt
Ihnen jegliche Programmierarbeit vollkommen ab. Sie können sich mit dem
RulEditor ganz darauf konzentrieren, welche Dokumente Sie haben und welche
Informationen Sie daraus gewinnen wollen. Sie arbeiten einfach mit der Maus wie
in einer Textverarbeitung und ohne eine einzige Zeile Rul programmiert zu
haben.
Erst wenn Sie wirklich das letzte bisschen aus directEXTRACT herausholen
möchten brauchen Sie sich mit Rul zu beschäftigen. Und selbst in
komplexen Fällen reicht es, die Codevorlage des RulEditor einfach zu
modifizieren anstatt den gesamten Code neu zu schreiben.
Wenn Sie wünschen, zeigt der RulEditor ihnen das automatisch erstellte
Skript auch an, siehe Bild 1. Oben im Bild sehen Sie das erstellte Skript und
unten die durch das Skript erstellte Ausgabe. In diesem Skript werden Daten wie
Anschrift, Rechnungsnummer, Kundennummer und Beträge aus einer Rechnung
exportiert.

Bild 1: Das automatisch erstellte Rul-Skript im RulEditor.
Sollten Sie eines Tages Rul-Skripte wirklich modifizieren müssen,
denken Sie einfach daran, dass Sie in Rul nur ein Wort ändern anstatt
hunderte von Programmierzeilen wie in einem normalen Programm.
|