2015 API

Guntersweiler Raphael

Alle Vorkommen eines Textes in HTML-Dokumenten auffinden und in Datenbank speichern

Durchführung: 20.04.2015 bis 22.05.2015

Ausgangslage
""DataAnalyzer"" ist eine Oberfläche für ""SAP BusinessObjects Text Analysis"" (im Weiteren ""Fremdprodukt"" genannt). Mit ""DataAnalyzer"" lassen sich die vom Fremdprodukt gesammelten Daten verwalten, strukturieren und auswerten. Basis dieser Daten sind Dokumente verschiedener Art, bspw. Word-, HTML- oder Textdokumente, die vom Fremdprodukt eingelesen und an Hand von Wortlisten und linguistischer Regeln verarbeitet werden. Durch diesen sogenannten ""Crawl"" erzeugt es sogenannte Entitäten, welche in Entitätstypen kategorisiert werden.
""DataAnalyzer"" bietet unter anderem eine Dokumentanzeige an, in welcher die gecrawlten Dokumente angezeigt werden. Dabei werden alle in einem Dokument gefundenen Entitäten hervorgehoben und es wird ein Kontextmenü angeboten, mit welchem Entitäten direkt im Dokument bearbeitet werden können. Jedoch können keine neuen Entitäten direkt aus dem Text erfasst werden.

Aufgabe
Das Ziel dieser Arbeit war die Implementation dieses Features: das Erstellen einer neuen Entität durch Setzen einer Markierung in der Dokumentansicht und das anschliessende Auswählen des Befehls in einem Kontextmenü. Die Herausforderung dieser Arbeit bestand in der Implementation eines Suchalgorithmuses, welcher durch die bereits bestehende Makro-Logik und die Vorschau-Logik verwendet werden kann. Diese Makro-Logik sorgt dafür, dass eingetragene Änderungen nach einem ""Recrawl"" (dem wiederholten Einlesen von Dokumenten durch das Fremdprodukt) wiederhergestellt und auf neue Dokumente übertragen werden können. Die Vorschau-Logik hingegen soll Änderungen anzeigen, bevor sie überhaupt in die Datenbank geschrieben werden und dem Benutzer so anzeigen, die Konsequenz seiner Aktion also im Voraus darstellen.

Umsetzung
Zur Umsetzung waren folgende Schritte nötig:

  • Implementation einer client-seitige Textsuche zur Bestimmung der Position der Markierung (als Vorarbeit realisiert)
    Der Client berechnet selbstständig, welcher Text markiert wurde, wie oft er im Dokument vorkommt und an welcher Stelle die Markierung gesetzt wurde.

  • Abgleich der client-seitigen Suche mit der server-seitigen Suche (teilweise als Vorarbeit realisiert)
    Der Client sendet eine Anfrage an den Server und liefert die zuvor berechneten Werte mit. Der Server durchsucht anschliessend das Dokument auf der Datenbank und liefert die genauen Positionsdaten zurück (ID des Satzes, Position der Markierung innerhalb des Satzes, etc.)

  • Einbindung eines Kontextmenüs (als Vorarbeit realisierts)
    Dies wurde durch die JavaScript-Bibliothek ""context.js"" (http://lab.jakiestfu.com/contextjs/) realisiert.

  • Anpassung des bestehenden Bearbeitungsmaske
    Die Dokumentansicht besitzt bereits eine Bearbeitungsmaske. Diese musste entsprechend erweitert werden, damit auch das Hinzufügen neuer Entitäten möglich ist.

  • Implementation eines neuen Makro-Kommandotyps
    Der neue Makrotyp ist vonnöten, um im Falle eines ""Recrawls"" Änderungen wiederherzustellen bzw. auf neue Dokumente übertragen zu können.

  • Implementation eines Algorithmus zur Suche des markierten Textes im gewünschten Kontext
    Der Suchalgorithmus muss bei Auftragserteilung (durch Vorschau oder Makro-Kommando) im gewünschten Kontext (""nur in diesem Dokument"" / ""in allen Dokumenten"" und ""nur in diesem Satz"" / ""in allen Sätzen"") suchen und die Ergebnisse melden, damit das Vorschausystem bzw. das Makro-Kommando diese Daten entsprechend weiterverarbeiten kann.



Fazit
Diese Arbeit war eine ziemliche Herausforderung, da ich mich zum einen in einem Produkt zurecht finden musste, das ich noch nicht so gut kannte und dessen Source-Struktur nicht mit unserem heutigen Standard übereinstimmt. Jedoch habe ich mich, auch dank der Hilfe meines Betreuers, schnell zurecht gefunden.
Grössere Probleme bereitete mir das Planen und Dokumentieren. Durch den Zeitplan habe ich mich selbst einem zu hohen Druck ausgesetzt, durch welchen ich mich dann festgefahren und einen halben Tag verloren habe. Jedoch konnte ich mich nach einem Wochende wieder fangen und die Aufgabe neu anpacken, wodurch mir schliesslich der Durchbruch gelang.