Julius-Maximilians-Universität Würzburg Institut für Informatik Lehrstuhl für Künstliche Intelligenz und Angewandte Informatik Bachelorarbeit im Studiengang Informatik zur Erlangung des akademischen Grades Bachelor of Science Ähnlichkeitsanalyse und -darstellung von vorgegebenen Textdokumenten Autor: Nico Balbach Matrikel-Nr. 1944643 Abgabe: 10. Juni 2016 1. Betreuer: 2. Betreuer: Prof. Dr. Frank Puppe M. Sc. Christian Reul Abstract Das Analysieren von Daten und Ergebnissen hat in der Wissenschaft eine große Bedeutung und erfordert gewisse Werkzeuge. Bei der Textversionsanalyse sind dies Programme zum Finden und Aufbereiten der Versionsunterschiede. Diese Bachelorarbeit entwickelt, im Rahmen des Kallimachos Projektes, ein solches Programm für die Textanalyse. Das Ziel dieser Arbeit ist die Erstellung eines webbasierten Programms, mit dem Unterschiede verschiedener Buchversionen gefunden, visuell dargestellt und statistisch analysiert werden können. Die Analyse erfolgt mit Methoden die auch in der Plagiatserkennung Anwendung finden. Darunter der Myers Algorithmus und die Levenshteindistanz. Implementiert wird das Programm, mithilfe von Apache Tomcat, in Java. Es wird dabei auf das Konzept von Model-View-Control zurückgegriffen. Zum Vergleich verschiedener Bücher werden deren Kapitel aufeinander abgebildet und diese auf Textebene weiter analysiert. Für den Textvergleich kommt die API google-diff-match-pach zur Verwendung, während deren Ergebnisse weiter klassifiziert werden. Die Darstellung erfolgt über eine Weboberfläche, die für eine übersichtliche und ansprechende Gestaltung, durch das Framework Materialize CSS unterstützt wird. Im Verlauf dieser Arbeit wird ein universell einsetzbares Werkzeug zur Versionsanalyse verschiedener Buchversionen entwickelt. Das Programm liefert bei dieser Analyse gute Ergebnisse und stellt die Unterschiede übersichtlich dar. Bei der Vorstellung des Programms, bei einer interessierten Arbeitsgruppe, wurde es sehr positiv aufgenommen. Inhaltsverzeichnis 1 Inhaltsverzeichnis Abbildungsverzeichnis 2 Abkürzungsverzeichnis 3 1 Einleitung 1.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Ziel der Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Gliederung der Thesis . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 4 5 2 Grundlagen 2.1 Plagiatserkennung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Textvergleich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Vergleichbare Programme . . . . . . . . . . . . . . . . . . . . . . . . . 6 6 7 10 3 Konzept 3.1 Anforderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Textvergleich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 MVC-Modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 11 11 13 4 Implementierung 4.1 Buchversionsvergleich . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Programmgrundlage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Modularisierung und Erweiterbarkeit . . . . . . . . . . . . . . . . . . . 15 15 17 19 5 Programm 5.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Bedienoberfläche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Erweiterte Nutzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 21 21 25 6 Bewertung 6.1 Feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Bekannte Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 27 27 7 Diskussion 7.1 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 29 30 Literaturverzeichnis 31 DVD mit Ausarbeitung und Programmcode 33 Eidesstattliche Erklärung 34 Abbildungsverzeichnis 2 Abbildungsverzeichnis 1 2 3 4 5 6 7 8 Darstellung von Patches . . . . . . . . . . . . . . . . MVC -Modelldarstellung dieses Projektes . . . . . . . SQL Datenstruktur . . . . . . . . . . . . . . . . . . . Bibliotheksfenster . . . . . . . . . . . . . . . . . . . . Vergleichsfenster . . . . . . . . . . . . . . . . . . . . Geöffnete Statistik aus dem Vergleichsfenster . . . . Bearbeitungsfenster Auswahl . . . . . . . . . . . . . . Bearbeitungsfenster von Autoren (links) und Kapiteln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (rechts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 13 18 22 23 23 24 24 Abkürzungsverzeichnis 3 Abkürzungsverzeichnis API . . . . . . . . . . . . . . . . . . . . . . . . . . . . Application Programming Interface CAS . . . . . . . . . . . . . . . . . . . . . . . . . . . Common Analysis Structure CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cascading Style Sheets DVD . . . . . . . . . . . . . . . . . . . . . . . . . . . Digital Video Disc GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . Graphical User Interface HTML . . . . . . . . . . . . . . . . . . . . . . . . . Hypertext Markup Language ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Identifier/Identifikator IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . Integrated Development Environment Java EE . . . . . . . . . . . . . . . . . . . . . . . . Java Enterprise Edition JDBC . . . . . . . . . . . . . . . . . . . . . . . . . . Java Database Connectivity JS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . JavaScript JSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . JavaServer Pages MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . Model View Control RAM . . . . . . . . . . . . . . . . . . . . . . . . . . . Random-Access Memory SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . Structured Query Language UIMA . . . . . . . . . . . . . . . . . . . . . . . . . . Unstructured Information Management Architectur XML . . . . . . . . . . . . . . . . . . . . . . . . . . . Extensible Markup Language 1 Einleitung 4 1 Einleitung Dieses Kapitel befasst sich mit der Motivation, Aufgabenstellung, Zielsetzung und dem Aufbau dieser Bachelorarbeit. 1.1 Motivation Der Erfolg eines Buches zeigt sich oft durch eine erhöhte Anzahl an Ausgaben. Neben den vom Verlag gedruckten Neuauflagen, existieren nicht selten ungenehmigte Drucke eines Werkes, von vor der Zeit der Globalisierung. Über die Jahre entstehen dabei die unterschiedlichsten Versionen des Ursprungsbuches (vgl. [Wik15]). Einige bekannte Bücher wie das Narrenschiff von Brant erhielten dadurch "[..]zahlreiche Neuauflagen, Nachdrucke und Übertragungen in [..] mehrere Volkssprachen" [Wü14b]. Die Unterschiede dieser Versionen können unter anderem für Bereiche der Sprachwissenschaft, sowie für Bibliotheken von Interesse sein. Eine angemessene Darstellung der Unterschiede von Schriften verschiedener Versionen, ist bei der Analyse von Vorteil. Ein Programm, das diese Texte miteinander vergleicht, automatisch Unterschiede erkennt und visuell darstellt, ist hierbei eine große Hilfe. Aus diesem Grund soll im Rahmen des Kallimachos Projektes (vgl. [Wü14a]) ein solches Programm mit einer Webdarstellung als Bachelorarbeit entwickelt werden. 1.2 Ziel der Arbeit Im Zuge dieser Bachelorarbeit soll ein webbasiertes Programm erstellt werden, das in der Lage ist unterschiedliche Versionen verschiedener Bücher zu analysieren und miteinander zu vergleichen. Hierbei sollen Unterschiede zwischen den Versionstexten autonom erkannt und visuell hervorgehoben werden. Um dies zu erreichen, müssen korrespondierende Passagen vom Programm zugeordnet, sowie deren Unterschiede bestimmt werden. Neben gelöschten und eingefügten Textstellen, sollen durch Klassifizierungen auch weitere Änderungen, wie zum Beispiel Verschiebungen, erkannt werden können. Eine Ähnlichkeitanalyse der Bücher soll dabei durch Änderungsstatistiken unterstützt werden. Zusätzlich soll die Aufnahme weiterer Bücher und Buchversionen in das System leicht möglich sein. All dies soll in einer über- 1 Einleitung 5 sichtlichen Weboberfläche präsentiert werden, damit das Programm später auch in der Praxis mit möglichst wenig Vorkenntnissen genutzt werden kann. 1.3 Gliederung der Thesis Die folgende Arbeit ist in sieben Kapitel unterteilt. Nach dieser Einführung folgen die Kapitel Grundlagen, Konzept, Implementierung, Programm, Bewertung und Diskussion. In Kapitel 2 werden die Grundlagen für das Verständnis der Arbeit geschaffen. Hierbei wird auf ein verwandtes Themengebiet, auf zugrundeliegende Theorien und auf vergleichbare Programme eingegangen. Mit Kapitel 3 werden die Hauptkonzepte beschrieben, die dem Programms zugrunde liegen. Dabei werden die Anforderungen und das Konzept des Textvergleiches besprochen, sowie das verwendete Modell für den Programmaufbau dargelegt. Die Implementierung der Software wird in Kapitel 4 beschrieben. Dabei wird auf die Umsetzung des Vergleichsalgorithmus, der vorhandene Serverstruktur, der Darstellung und der Datenverwaltung, sowie deren modularen Implementierung eingegangen. Alle für die Nutzung der Software notwendigen Grundlagen werden in Kapitel 5 erläutert. Dabei werden grundlegende Informationen, wie die Installation und der Umgang mit der Oberfläche, sowie tiefer gehende Möglichkeiten zum Anpassen der Software erklärt. In Kapitel 6 wird eine Bewertung der Software vorgenommen. Es wird erhaltenes Feedback besprochen, sowie potentielle Probleme des Programms dargelegt. Anschließend wird in Kapitel 7 ein Fazit zur Arbeit gezogen und ein Ausblick über mögliche Fortführungen gegeben. 2 Grundlagen 6 2 Grundlagen In diesem Kapitel werden Grundladen für das Verständnis der Arbeit erläutert. Zuerst wird auf das verwandte Themengebiet, der Plagiatserkennung und danach auf die zugrunde liegende Funktionalität des Textvergleichsalgorithmus eingegangen. Anschließend folgt ein kurzer Überblick von, zu dieser Arbeit ähnlichen Programmen. 2.1 Plagiatserkennung Das Hauptthemengebiet dieser Arbeit ist die Ähnlichkeitsanalyse von Texten. Neben diesem, gibt es noch weitere überschneidende Gebiete. Ein wichtiges davon ist die Analyse, die zum Erkennen von Plagiaten in unterschiedlichen Texten beiträgt. Die unberechtigte Aneignung fremder geistiger Leistungen, durch Plagiate, ist vor allem in der Forschung und Bildung ein Problem. Das Überprüfen von Arbeiten auf Plagiate kann jedoch vor allem durch das Informationsreichtum des World Wide Webs problematisch sein (vgl. [Wik16c]). Aus diesem Grund wird in diesem Gebiet viel geforscht, während komplexe Programme für solche Überprüfungen notwendig sind. In der Plagiatserkennung ist das Hauptziel die Überprüfung eines Textes gegen einen großen Korpus. Bei der Überprüfung muss eine große Menge an Dokumenten auf Stil, Satzbau, ungekennzeichnete Zitate und Weiteres getestet werden. Dieses Überprüfung wird dabei in verschiedene Aspekte unterteilt. Ein erfolgreiches Programm zur automatischen Plagiatserkennung benötigt daher mehrere, unterschiedliche Konzepte. Wegen dem meist sehr großen Testkorpus, muss zuerst eine grobe Analyse auf die Wahrscheinlichkeit eines Plagiats und dann eine genauere Untersuchung mit potentiellen Dokumenten gestartet werden. Für die grobe Untersuchung gibt es viele Methoden. Der Hauptansatz liegt meist darin Text oder Textstellen mit einem Kryptoverfahren in einen eindeutigen Schlüssel umzuwandeln und diesen mit einer vorhanden Datenbank abzugleichen (vgl. [ZES06, HZ03]). Dieses Verfahren wird als Fingerprinting bezeichnet. Ein mögliches Vorgehen zur Errechnung von Fingerprints wird in der Arbeit von Timothy C Hoad and Justin Zobel (vgl. [HZ03]) besprochen. Ein weiterer Ansatz ist die Überprüfung eines Dokuments hinsichtlich dessen Schreibstil. Mit dem Erkennen von Schreibstilen unterschiedlicher Autoren in einem Text kann 2 Grundlagen 7 eine allgemeine Aussage über die Wahrscheinlichkeit eines Plagiats getroffen werden. Diesen Ansatz bezeichneten die Forscher Sven Meyer zu Essen und Benno Stein in ihrer Arbeit als "Instrinsic Plagiarism Detection" (vgl. [ZES06]). Um genaue Plagiatspassagen zu finden benötigt dieser Ansatz jedoch weitere Untersuchungen. Eine genauere Plagiatsanalyse zwischen spezifischen Dokumenten folgt dabei meistens der selben Theorie. Es werden die Texte verglichen, gemeinsame, sowie unterschiedliche Textstellen gesucht und daraus eine Ähnlichkeit bestimmt. Hierbei sind vor allem Ansätze mit dem Smith-Waterman (vgl. [Irv04]) oder Myers Algorithmus (vgl. [Mye86]) nennenswert. Die Ähnlichkeit wird daraufhin meist durch Metriken wie die Levenshteindistanz (vgl. Abschnitt 2.2.2, [ZFMP06]) berechnet. Viele dieser Konzepte sind für die Textanalyse interessant. Allerdings ist eine Aussage über die Plagiatswahrscheinlichkeit und der Vergleich mit einem großen Dokumentkorpus für die Textanalyse wenig von Bedeutung. Große Überschneidungen gibt es jedoch mit der Ähnlichkeitsanalyse in der Plagiatserkennung. Die dort verwendeten Algorithmen zum Textvergleich und zur Textähnlichkeit können in der allgemeinen Textanalyse zum Einsatz kommen. 2.2 Textvergleich Das Hauptziel dieser Arbeit ist der Vergleich von Texten. Hierfür wird im Kern die API google-diff-match-patch (vgl. [Fraa]) verwendet. In dieser werden einige für die Arbeit wichtige Funktionen implementiert, die im folgenden erläutert werden. 2.2.1 google-diff-match-patch Die API google-diff-match-patch wurde von Neil Fraser, einem Mitarbeiter von Google Research, entwickelt und in mehreren Programmiersprachen unter der Apache License 2.0 veröffentlicht [Frab]. Um den Vergleich von Texten zu ermöglichen, implementiert sie zwei bekannte Algorithmen, die sich in der Forschung bewährt haben. Darunter der Diff Algorithmus von Myers, der bei ähnlichen Klartexten Änderungen sehr performant herausfindet (vgl. [Mye86]), sowie ein flexibler Match und Patch Algorithmus von Wu Sun und Manber Udi (vgl. [WM91]) bei dem zuerst korrespondierende Textstellen verbunden und da- 2 Grundlagen 8 nach weiter mit Diff analysiert werden. Hierbei kann die API in die drei Funktionen Diff, Match und Patch unterteilt werden. Ein Diff Algorithmus sucht eine Folge von Änderungen zwischen zwei Sequenzen, die notwendig sind, um eine in die andere umzuwandeln. Hierbei werden Lösch- und Einfügeoperationen zwischen identischen Stellen dargestellt: Text1 : Die Katze sitzt auf einem Baum Text2 : Der Kater sitzt auf dem Baum diff(Text1 , Text2 ): D i e r Kat z e r sitzt auf ein d em Baum Dieser Ansatz funktioniert vor allem bei kurzen Texten und Texten mit wenig Änderungen sehr gut [Fra09]. Bei Match wird eine Textstelle in einem Text gesucht. Dabei wird ein fuzzy match, also ein ungenaue Zuordnung, angewendet. Diese sucht eine, der Anfrage am meisten gleichende, Textstelle.Es wird dabei die Position, sowie die Stärke der Übereinstimmung bestimmt. Ein Patch Algorithmus vergleicht zwei Texte und versucht diese mithilfe von Patches aufeinander abzubilden. Patch bezeichnet hierbei die Verbindung zwischen unterschiedlichen Textstellen, denen möglichst identische Textstellen voran- oder nachgehen. Hierbei wird der Text mit Hilfe von Match untersucht, um korrespondierende Textstellen in Abbildung 1: Darstellung von Patches 2 Grundlagen 9 den Texten zu finden. Dabei spielt sowohl die Entfernung zwischen diesen Textstellen, als auch Stärke der Übereinstimmung eine Rolle. Es wird dabei versucht Patches zu finden (vgl. Abbildung 1), sodass die Transformation eines Textes in einen anderen mit einer möglichst geringsten Levenshteindistanz (vgl. Abschnitt 2.2.2) erfolgen kann (vgl. [Fra06]). Nachdem die Verbindungen im Text erzeugt wurden, werden sämtliche Ausschnitte mit einem Diff Algorithmus weiter untersucht. Die google-diff-match-patch API wird in dieser Arbeit dazu verwendet, um mit patch und diff, eingefügte sowie gelöschte Textstellen zu finden. Anschließend werden diese nochmals klassifiziert um komplexere Änderungen wie Verschiebungen zu erkennen. 2.2.2 Levenshteindistanz Die Levenshteindistanz oder auch Editierdistanz (vgl. [Wik16a, ZFMP06]) kann zur Ähnlichkeitsanalyse zweier Sequenzen verwendet werden. Hierbei wird die Distanz mithilfe der Anzahl von eingefügten, gelöschten und geänderten Sequenzstellen berechnet, um eine Sequenz in eine andere umzuwandeln: Text1 : Die Katze sitzt auf einem Baum 1. D i e Katze sitzt auf einem Baum 2. De r Katze sitzt auf einem Baum 3. Der Kat z e sitzt auf einem Baum 4. Der Kate r sitzt auf einem Baum 5. Der Kater sitzt auf e inem Baum 6. Der Kater sitzt auf i nem Baum 7. Der Kater sitzt auf d em Baum Text2 : Der Kater sitzt auf dem Baum ⇒ distanzLevenshtein (Text1 ,Text2 ) = 7 Mit Hilfe dieser Distanzfunktion kann eine Aussage über die Ähnlichkeit zweier Sequenzen getroffen werden. Die besagten zu zählenden Änderungen können zum Beispiel von der diff Funktion der google-diff-match-patch API (vgl. Kapitel 2.2.1, diff) berechnet werden. Diese API enthält ebenfalls eine Funktion, um die Levenshteindistanz zu berechnen. 2 Grundlagen 10 2.3 Vergleichbare Programme Online sind verschiedene Webprogramme frei verfügbar, die den Vergleich von Texten ermöglichen. In diesen können meist zwei Textdateien hochgeladen oder zwei Texte eingefügt werden. Diese Texte werden daraufhin miteinander verglichen und ihre Unterschiede hervorgehoben. Beispiele hierfür sind unter anderem https://www.diffchecker.com/ , https://www.diffnow.com/ und https://text-compare.com/ . Mit diesen Programmen können die rudimentären Unterschiede zweier Dokumente herausgefunden werden. Eingefügte und gelöschte Textstellen werden dabei meist erkannt. Weitere Klassifizierungen, wie Umänderungen oder Verschiebungen, sowie Statistiken werden dort jedoch selten angeboten. Ebenso muss der Nutzer den Text selbst unterteilen und die Texte für jeden Vergleich neu hochladen. Ein schneller Vergleich verschiedener Versionen und Kapitel, sowie deren Zusammenhänge ist nicht ohne Weiteres möglich. Mit dieser Arbeit soll ein Programm entwickelt werden, dass mehr Funktionen bietet, um die gegebenen Anforderungen besser zu erfüllen. Hierbei sollen die vorhandenen Vorzüge der Programme vereint und deren Nachteile vermieden werden. Es ist dabei eine einfachere Bedienung mit kürzeren Arbeitsabläufen, sowie eine Verbesserung der Änderungklassifizierung besonders wichtig. 3 Konzept 11 3 Konzept Das folgende Kapitel beschreibt die Konzepte die in dieser Arbeit Anwendung finden. Zunächst werden die Anforderungen der Bachelorarbeit besprochen. Danach wird das Grundkonzept des Textvergleiches beschrieben. Im letzten Abschnitts wird auf die grundlegende Idee des Programmaufbaus eingegangen. 3.1 Anforderungen Das Ziel dieser Arbeit ist das Erstellen eines webbasierten Programms zum Vergleich unterschiedlicher Buchversionen. Hierbei soll es möglich sein, unterschiedliche Versionen von Büchern auf einen Server zu laden und diese in der Weboberfläche aufzurufen, um einen Vergleich der Texte auf Kapitelebene zu erhalten. Dabei werden Buchversionen, die vor dem Hochladen in Kapitel unterteilt wurden, geladen. Nach der Auswahl zweier Buchversionen, werden diese aufeinander abgebildet, sodass ein Kapitel-Alignment entsteht. Dabei werden die Kapitel dabei grob verglichen, um für jedes von ihnen ein korrespondierendes Gegenstück in der anderen Buchversion zu finden. Dadurch wird ein Kapitel-Alignment erzeugt, um eine Auswahl zu vergleichbaren Kapiteln zu liefern. Es kann ebenso eine unabhängige Auswahl zweier Kapitel getroffen werden, um diese miteinander zu vergleichen. In einem Vergleich werden daraufhin die Unterschiede der Kapitel visuell hervorgehoben und statistisch dargestellt. Dabei werden ähnliche Paragraphen auf gleiche Höhe gesetzt, um die Unterschiede besser zu präsentieren. Neu hinzugefügte Buchversionen stehen direkt in der Auswahl zum Vergleich bereit. Bei einem Vergleich werden sie automatisch von der Datenbank in Modellklassen geladen. 3.2 Textvergleich Beim Vergleich von Texten wird ein Text auf einen anderen abgebildet und die darin befindlichen Textstellen in fünf verschiedene Klassifizierungen unterteilt. Die Hauptklassifizierungen sind identische (EQUAL), gelöschte (DELETE) und eingefügte (INSERT ) Textstellen. Wenn passend, werden diese weiter in veränderte (ALTERNATION ) und verschobene (MOVE) Änderungen klassifiziert. 3 Konzept 12 EQUAL beschreibt Textstellen die Zeichen für Zeichen in beiden Texten übereinstimmen. Der Algorithmus sucht spezifisch nach diesen Textstellen, wodurch ebenfalls vorhandene Änderungen erfasst werden. Textstellen die mit INSERT gekennzeichnet sind, befinden sich meist vor oder nach identischen Textstellen der beiden Texte. Eine solche Stelle ist nicht im Haupttext aber in dem darauf abgebildeten Text vorhanden: Gelöschte Textstellen werden mit DELETE gekennzeichnet. Sie befinden sich genauso wie INSERT Stellen meist vor oder nach identischen Textstellen der beiden Texte. Diese gelöschten Ausschnitte sind Texte, die in dem Haupttext vorkommen aber in dem darauf abgebildeten Text fehlen: Unter einer ALTERNATION wird eine Klassifizierung verstanden, die an der selben Stelle befindliche DELETE- und INSERT -Änderungen ersetzt. Hierbei wird davon ausgegangen, dass eingefügte und gelöschte Textstellen die sich an der selben Stelle im Text befinden die selbe umgeänderte Stelle bezeichnen. Diese umgeänderten Textausschnitte werden mit ALTERNATION klassifiziert: Ein mit MOVE gekennzeichneter Textausschnitt ersetzt sowohl eine DELETE- als auch eine INSERT -Änderung welche nahezu identisch sind, sich aber an unterschiedlichen Stellen im Text befinden. Verschobene Textstellen werden erst ab einer festgelegten Mindestlänge als solche Klassifiziert um kleine Buchstabenänderungen auszuschließen. Des weiteren werden Textstellen nur dann als verschoben bezeichnet, wenn sie ein Mindestprozentsatz an gleicher Teilzeichenfolge beinhalten. Hierdurch können verschobene Textstellen entdeckt und markiert werden: 3 Konzept 13 3.3 MVC-Modell Um Erweiterbarkeit und Modularität zu erleichtern, ist dieses Projekt mit der Idee des Model-View-Control-Modells (MVC, englisch für Modell-Präsentation-Steuerung) entworfen worden. Dieses Modell beschreibt das Unterteilen der Softwarestruktur in die drei Teile Modell, Präsentation/Darstellung und Steuerung [Wik16b]. Das MVC -Modell ist ein vages Modell und besitzt daher viele Interpretationen. Die in dieser Arbeit verwendete Interpretation ist in Abbildung 2 zu sehen. 3.3.1 Model Das Modell umfasst sämtliche Datenobjekte, die in der Steuerung weiter verwendet werden. Diese Objekte besitzen wenig Eigenkontrolle und sind vor allem zum Abspeichern und Aufrufen von Daten gedacht. In diesem Projekt sind in Modell die Datenbankzugriffe geregelt und die Objekte die für die Steuerung wichtig sind, gelagert. Diese Objekte sind unter anderem Bücher, Buchversionen, Kapitel und Änderungen. Einzelne, wichtige Objekte können im Modell durch die Datenbankzugriffe abgespeichert werden. Sämtliche Modell-Objekte werden serverseitig verwendet und sind in Java-Code geschrieben. Abbildung 2: MVC -Modelldarstellung dieses Projektes 3 Konzept 14 3.3.2 View Die Präsentation/Darstellung umfasst sämtlichen Code, der für die Darstellung wichtig ist. Es werden Anfragen vom Nutzer, die über die Navigation hinausgehen an die Steuerung geleitet. Diese interpretiert die Anfragen und gibt eine für die Präsentation verständliche Antwort zurück. In diesem Projekt findet die Darstellung in einer Weboberfläche statt. Anfragen an die Steuerung und deren Antworten werden serverseitig mit Java-Code verwaltet. Für den Nutzer wird auf dem Server ein für die Anfrage passendes HTML-Dokument erstellt und mit Darstellungshilfen wie Javascript und CSS zurückgegeben. 3.3.3 Control In der Steuerung werden alle Anfragen der Darstellung geregelt und auf den Modellen angewandt. Hier werden sämtliche, für das Programm essentiellen Entscheidungen, getroffen. Die Steuerung übernimmt in diesem Projekt die Verwaltung der Bibliothek und die Vergleiche der Bücher. Es werden sämtliche Anfragen der Präsentation entgegen genommen und die benötigten Operationen auf den Modellobjekten angewandt. Diese Anfragen und Operationen finden serverseitig mit Java-Code statt. 4 Implementierung 15 4 Implementierung Dieses Kapitel beschreibt die grundlegenden Mechaniken der Software. Zuerst wird auf die Implementierung des Vergleichsalgorithmus, der vorhandenene Serverstruktur, der Darstellung und der Datenverwaltung eingegangen. Danach wird die Möglichkeit der Modularisierung und Erweiterung besprochen. 4.1 Buchversionsvergleich Der Vergleich von unterschiedlichen Versionen gleicher Bücher erfolgt in drei Schritten: Zuerst wird ein Alignment der Kapitel einer Buchversion zu denen der anderen Buchversion erzeugt. Mithilfe dieses Alignments ist bereits eine grobe Zuordnung des Inhaltes auf Kapitelebene gegeben. Der nächste Schritt besteht darin, nach der Auswahl einer Verbindung zweier Kapitel einen genauer Textvergleich zu starten. Dieser erzeugt eine Vergleichsliste von identischen, gelöschten und eingefügten Textstellen von dem einen zum anderen Kapitel. Der letzte Schritt besteht in der Optimierung der Vergleichsliste. Hierbei werden die Änderungen weiter klassifiziert und aufgeräumt. Für die Darstellung wird diese Vergleichsliste daraufhin auf die Buchversionen angewandt, um diese mit Änderungen darzustellen. Für jeden der drei Schritte zum Erstellen der Vergleichsliste wurden drei Interfaces, namentlich AlignmentGenerator, CompareAlgorithm und ChangeOptimizer, erstellt und eigene Klassen für das Projekt implementiert. 4.1.1 Kapitel-Alignment (AlignmentGenerator) Das Kapitel-Alignment ist mit dem Interface AlignmentGenerator beschrieben. Eine Klasse, die dieses implementiert, erzeugt, nachdem ihr zwei Buchversionen übergeben wurden, eine Liste von Alignments zwischen deren Kapitel. In diesem Projekt wurden drei Klassen mit diesem Interface erstellt: AlignmentGeneratorSimple, AlignmentGeneratorFingerprint und AlignmentGeneratorLevenshtein. Hierbei ist AlignmentGeneratorSimple die grundlegendste Implementierung. Zu jedem Kapitel in der ersten Buchversion wird, abhängig von der Reihenfolge, ein Kapitel aus der zweiten Buchversion gewählt. 4 Implementierung 16 Mit AlignmentGeneratorFingerprint wurde das Fullfingerprinting, wie es im Paper von Timothy C. Hoad und Justin Zobel beschrieben wurden, eingesetzt (vgl. [HZ03]). Dabei erhält jedes Kapitel der beiden Bücher einen Fingerprint und daraufhin werden sämtliche Kapitel-Fingerprints der einen Buchversion mit denen der anderen Buchversion verglichen. Die Kapitel mit den ähnlichsten Fingerprints gelten daraufhin als korrespondierend und stellen ein Alignment dar. In diesem Projekt wird als Standard Alignment die Implementierung AlignmentGeneratorLevenshtein verwendet. Dort wird jedes Kapitel der ersten Buchversion mit jedem der zweiten Buchversion verglichen. Aus den dabei gefundenen Änderungen wird die Levenshteindistanz gebildet (vgl. Kapitel 2.2.2). Die Kapitel mit der kürzesten Levenshteindistanz gelten daraufhin als korrespondierend. Für das Vergleichen der beiden Kapitel wird die diff -Funktion der google-diff-match-patch API mit einer ungenaueren aber schnelleren Einstellung verwendet. Die Levenshteindistanz wird daraufhin ebenfalls mit einer Funktion der API aus den gefundenen Änderungen bestimmt. Diese Implementierung findet die zusammenhängenden Kapitel mit einer angemessenen Rechenzeit und Genauigkeit. 4.1.2 Vergleich (CompareAlgorithm) Für den Vergleichsalgorithmus wurde das Interface CompareAlgorithm erstellt. Dieses definiert eine Funktion, welche Kapitel entgegennimmt und eine Liste von Änderungen zurück gibt. Die für dieses Projekt implementierte Klasse CompareAlgorithmGoogle verwendet hierfür im Kern die API google-diff-match-patch. Es wird dabei die patch-Funktion verwendet, die bereits in Kapitel 2 näher erläutert wurde. Diese Funktion liefert einzelne Patches, die bereits die unterschiedlichen Änderungen von eingefügten, gelöschten und teilweise identischen Textstellen in sich enthalten. Zwischen den Patches befinden sich immer identische Textstellen beider Kapiteln. Für eine erleichterte Weiterverarbeitung werden diese daraufhin verbunden, indem Fehlendes als identische Textstellen hinzugefügt oder Überlappendes von den Textstellen abgezogen wird. Die erhaltene Liste wird daraufhin in das eigene Änderungsformat umgewandelt und zurückgegeben. 4 Implementierung 17 4.1.3 Optimierung (ChangeOptimizer) Das Interface ChangeOptimizer beschreibt ein vages Vorgehen zum Weiterverarbeiten einer erhaltenen Änderungsliste. Hierbei können die Änderungen weiter klassifiziert und Optimierungen, wie z.B. Weichzeichner, angewandt werden. Die Hauptimplementierung von ChangeOptimizer, die für dieses Projekt verwendet wird, ist die Klasse ChangeOptimizerMain. Darin werden einige Änderungen weiter in Verschiebungen (MOVE) und Umwandlungen (ALTERNATION ), wie sie im Kapitel 3.2 beschrieben sind, klassifiziert. Des Weiteren sind Funktionen zum Löschen von überschüssigen Whitespaces, zum Verbinden von Änderungen gleichem Typs und zum Weichzeichnen definiert. Das Verbinden von gleichen Änderungstypen und die Funktion zum Weichzeichnen sind jedoch standardmäßig deaktiviert, da sie bei den vorhandenen Texten bisher keinen merklichen Nährwert brachten. 4.2 Programmgrundlage Die Programmanwendung ist als Webanwendung konzipiert. Nutzer interagieren mit der Anwendung über eine Weboberfläche in ihrem Browser. Diese Anfragen werden an einen Server gesendet und dort verarbeitet. Zu speichernde Daten werden ebenso auf einem Server gespeichert. 4.2.1 Server Sämtliche serverseitigen Funktionen sind mit Hilfe von Tomcat 8 in Java geschrieben. Die Funktionen werden mithilfe von Java-Klassen ausgeführt und per JavaServer Pages (JSP) in HTML-Darstellungen umgewandelt. Alle für das Programm gespeicherten Daten, wie zum Beispiel Bücher und Buchversionen, werden in einer MySQL Datenbank gespeichert. Das Hinterlegen und Auslesen der Datenbank erfolgt in Java durch SQLAbfragen mit Hilfe der Java Database Connectivity (JDBC). 4.2.2 Darstellung Auf der Clientseite findet die Darstellung im Webbrowser statt. Diese wird mit HTML strukturiert, mit CSS stilistisch angepasst und mit Javascript um Echtzeitfunktionen erweitert. Für eine optimierte Darstellung wurde das Framework Materialize CSS ver- 4 Implementierung 18 wendet. Dieses versucht die Designrichtlinien von Googles Material Design (vgl. [Goo]) mit vorgefertigten CSS- und Javascript-Dokumenten zu erfüllen. Damit soll die Erstellung von Seiten gemäß dieser Richtlinien erleichtert werden (vgl. [WCML]). 4.2.3 Daten Um das Auslesen und das Hinzufügen verschiedener Bücher und Buchversionen jederzeit zu gewährleisten, muss das Programm durchgehend abrufbar sein. Aus diesem Grund werden die Daten in einer Datenbank abgespeichert. Hierfür wurde eine MySQLDatenbank gewählt und die Daten, wie sie in Abbildung 3 zu sehen sind, serverseitig mit JDBC in Java verarbeitet. Datenstruktur Die Datenbank enthält Tabellen zum Abspeichern von Kategorien, Büchern, Buchversionen, Kapiteln und Autoren. Diese Tabellen stehen zueinander in Verbindung (vgl. Abbildung 3). Eine Kategorie enthält mehrere Bücher und ist in der Abbildung 3: SQL Datenstruktur Tabelle categories mit einem Namen und einer ID abgespeichert. Bücher sind, mit einem Titel, einer ID und einem Verweis auf die dazugehörige Kategorie, in der Tabelle books enthalten. Von einem Buch kann es mehrere Versionen von unterschiedlichen Autoren geben. Diese Autoren sind in authors mit korrespondierender ID und einem Namen abgelegt. Die von Autoren geschriebenen Versionen unterschiedlicher Bücher 4 Implementierung 19 sind mit einer ID, einem Titel, je einem Verweis auf das Buch und den Autoren, sowie mit einem Veröffentlichungsdatum in der Tabelle versions gespeichert. Der Text jeder Buchversion ist in verschiedene Kapitel aufgeteilt. Diese Kapitel besitzen eine ID, einen Titel, einen Verweis auf die dazugehörige Buchversion, einem Text und einen Index. Der Index beschreibt die Reihenfolge der Kapitel in der Buchversion. Die Kapitel sind anhand des Index aufsteigend sortiert. Datenbank Die Verbindung zur Datenbank erfolgt in Java mit JDBC. Es wurden für die Datenbankverbindung drei Interfaces erstellt. Für diese Interfaces wurde eine JDBC-Implementierung umgesetzt. Die Interfaces lauten DatabaseAccess, DatabaseManipulator und DatabaseObjectLoader. DatabaseAccess wird implementiert um eine grundlegende Verbindung zur Datenbank herstellen zu können. In dieser werden Funktionen zum Aufbauen und Schließen einer Datenbankverbindung festgelegt. In diesem Projekt werden die Daten zur Datenbankverbindung in der JDBC-Implementierung von Access gespeichert. DatabaseManipulator beschreibt, wie die Funktionen zum Löschen und Einfügen der Objekte in die Datenbank benannt sein sollen. Mit der JDBC-Implementierung dieses Projektes wurde genau dies umgesetzt. DatabaseObjectLoader definiert welche Funktionen eine Klasse benötigt, um die Objekte aus der Datenbank laden zu können. Die JDBC Implementierung, die für dieses Projekt erstellt wurde, enthält aus Effizienzgründen verschiedene Hashmaps aller Objekte um diese möglichst ohne redundante SQL-Anfragen von der Datenbank in den RAM zu laden. 4.3 Modularisierung und Erweiterbarkeit Auf Modularisierung und Erweiterbarkeit wurde in diesem Projekt großen Wert gelegt. Der Code ist bewusst so konzipiert, dass bei Bedarf auch große Teile ausgetauscht oder in anderen Projekten eingebunden werden können. Unter anderem wird dies durch die Verwendung des MVC Modells verwirklicht. Prinzipiell ist es möglich die Oberfläche oder Steuerung mit Modellen auszutauschen. Es 4 Implementierung 20 wurde die Logik der Steuerung bewusst mit einer erweiterten Ebene zwischen ihr und der Oberfläche entworfen. Hierfür sind im Programmpaket control einige Klassen enthalten, die für die Kommunikation mit der View zuständig sind. Alle für den Vergleich benötigten Steuerungsklassen sind im Paket control.compare separat zu finden. Ebenso wurden einige Interfaces zum Erweitern oder Austauschen einzelner Funktionen hinzugefügt. Darunter die in diesem Kapitel unter Buchversionsvergleich und unter Datenbank beschriebenen Funktionen. Der Austausch wird dabei in Kapitel 5.3 näher beschrieben. 5 Programm 21 5 Programm In diesem Kapitel wird die Installation und Nutzung der Software besprochen. Zuerst werden die Grundsätze der Programmnutzung, wie die Installation und die Benutzeroberfläche beschrieben. Daraufhin wird auf erweiterte Funktionen, wie zum Beispiel die Einbindung eines anderen Datenbanksystems, eingegangen. 5.1 Installation Für die Nutzung der Software wird ein Server mit Apache Tomcat und einer MySQL Datenbank vorausgesetzt. Zur Erleichterung der Installation wird die Eclipse IDE for EE Developers mit installiertem Plugin für Apache Maven empfohlen. Um die Datenbankeinrichtung zu erleichtern wurde ein MySQL-Skript namens tables.sql zur Erstellung aller benötigten Tabellen auf der beiliegenden DVD aufgespielt. Die für dieses Projekt benötigten Tabellen werden durch das Ausführen des Skriptes auf dem zu verwendeten MySQL Server automatisch erstellt und konfiguriert. Um die Verbindung zum Datenbankserver herzustellen, benötigt das Projekt anschließend die Nutzerdaten eines gültigen SQL Nutzers mit Lese- und Schreibrechten. Hierzu sollte das Java Projekt von der beigefügten DVD in Eclipse geladen und die Klasse JDBCAccess aus dem Paket model.database geöffnet werden. In dieser Klasse werden die MySQL Verbindungs- und Nutzerdaten eingetragen. Das Projekt ist jetzt für die Standardnutzung erfolgreich vorkonfiguriert. Für das Aufspielen auf den Server wird eine Server Installationsdatei benötigt. Diese Datei kann als Maven-Installationsdatei durch das Kontextmenü des Projektes mit Run As → Maven Install erzeugt werden. Die weitere Installation wird von einem laufenden Tomcat Server automatisch übernommen. Hierzu muss die erzeugte Installationsdatei nur in den webapps Ordner im Tomcat Verzeichnis des Servers gelegt werden. Daraufhin ist die Webapp, nach einer kurzen Wartezeit, unter <Serverurl>/bookversion aufrufbar. 5.2 Bedienoberfläche Die Bedienoberfläche kann in die drei Hauptfunktionen Bibliothek, Vergleich und Bearbeitung unterteilt werden. In der Bibliothek sind alle Bücher mit ihren jeweiligen Versionen, in Kategorien unterteilt. Diese Buchversionen können in Zweierpaaren im 5 Programm 22 Vergleich gegenübergestellt werden. Das Verwalten von vorhandenen Texten und das Hinzuzufügen neuer Texte erfolgt in der Bearbeitung. Bibliothek Besucht der Nutzer die Startseite, klickt auf den Programmtitel oder wählt Library in der Navigation aus, wird er zum Bibliotheksfenster, das in Abbildung 4 zu sehen ist, weiter geleitet. Beim Aufrufen der Bibliothek wird dem Nutzer zuerst eine Liste aller Buchkategorien angezeigt. Nach der Auswahl einer Kategorie werden alle dort vorhandenen Bücher untereinander dargestellt. Um die verschiedenen Versionen eines Buches zu sehen, muss auf dessen Titel geklickt werden, woraufhin sich eine Tabelle von Buchversionen öffnet. In einem Buch können je zwei Buchversionen gleichzeitig verglichen werden. Hierzu müssen zwei Versionen ausgewählt werden. Ein Klick auf compare leitet zum Vergleichsfenster weiter. Abbildung 4: Bibliotheksfenster Vergleich Das Vergleichsfenster, das in Abbildung 5 zu sehen ist, wird durch die Auswahl von zwei Buchversionen aus der Bibliothek geöffnet. Dabei wird ein Vergleich der beiden Versionen gestartet und ein Kapitelalignment erzeugt. Es wird von diesem Alignment die ersten verbundenen Kapitel geöffnet. Die weiteren Alignments können auf der linken Seite betrachtet und ausgewählt werden. Hierdurch können Vergleiche zwischen den Kapiteln dargestellt werden. Diese Vergleiche können auch zwischen beliebigen Kapitel erfolgen, indem diese durch das Klicken auf die jeweiligen Überschriften ausgewählt werden. Beim Vergleich werden ähnliche Paragraphen in den Kapiteln auf gleiche Höhe gesetzt und Markierungen für Änderungen wie eingefügte, gelöschte, verschobene und geänderte Texte dargestellt. Die Relationen aller Änderungen in Prozent werden als Balken unterhalb der Versionsüberschriften dargestellt. Eine erweiterte Statistik, wie sie in Abbildung 6 zu sehen ist, kann ebenfalls eingesehen werden. Um diese 5 Programm 23 Abbildung 5: Vergleichsfenster zu öffnen muss mit der Maus über den Statistikbalken gefahren werden. Es werden dann alle Änderungen mit dem Prozentsatz ihres Auftretens in diesem Kapitel eingeblendet. Abbildung 6: Geöffnete Statistik aus dem Vergleichsfenster Bearbeitung Das Bearbeitungsfenster zur Verwaltung der Daten kann über die Subdomain /edit.jsp erreicht werden. Die Hauptbearbeitungsseite (vgl. Abbildung 7) gleicht bei der Navigation dem Bibliothekenfenster. Es kann dort durch Kategorien, Bücher und Buchversionen navigiert werden. Diese können bei Bedarf an der gewünschten Stelle hinzugefügt oder gelöscht werden. Für die Erstellung von Kategorien und Büchern muss dabei nur ein Name angegeben werden, während die Buchversionen neben dem Namen zusätzlich einen Autoren und ein Erstellungsdatum benötigen. Kapitel werden erst nach der Erstellung einer Buchversion zu dieser hinzugefügt. Falls ein gewünschter Autor fehlt, kann dieser in einem separaten Fenster erstellt werden. Dieses Fenster, das links in Abbildung 8 zu sehen ist, kann über den Tab mit der Aufschrift Authors erreicht werden. Dort ist es möglich bei Bedarf weitere Autoren hinzuzufügen oder vorhandene zu löschen. Um Kapitel zu den noch leeren Buchversionen hinzuzufügen, muss 5 Programm 24 Abbildung 7: Bearbeitungsfenster Auswahl die gewünschte Buchversion gewählt und dort das Bleistiftsymbol angeklickt werden. Hiermit wird zu einem weiteren Fenster geleitet (vgl. Abbildung 8, rechts). In diesem Fenster können neue Kapitel hinzugefügt und alte gelöscht werden. Es können dabei entweder einzelne Kapitel oder mehrere zusammen hochgeladen werden. Um mehrere Kapitel mit einem Text gleichzeitig hinzuzufügen, müssen deren Text, sowie ein Trennwort angegeben werden Beim Hinzufügen eines einzelnen Kapitels, wird ein Titel, ein Index und der Text benötigt. Der hinzugefügte Index ist hierbei ein Hilfsmittel, um die Kapitel zu sortieren. Die Kapitel werden anhand des Index aufsteigend sortiert. Abbildung 8: Bearbeitungsfenster von Autoren (links) und Kapiteln (rechts) 5 Programm 25 5.3 Erweiterte Nutzung Das Programm ist, wie in Kapitel 4.3 beschrieben, besonders auf Modularisierung und Erweiterbarkeit abgestimmt. Aus diesem Grund können einige Teile ersetzt oder auch erweitert werden. Die Funktionen, die für einen Austausch oder eine Erweiterung von Interesse sind, sind vor allem das Datenbanksystem, der Vergleichsalgorithmus, der Kapitel-Alignment-Erzeuger und der für die Klassifizierung der Änderungen zuständige Optimierer. 5.3.1 Datenbanksystem Das MySQL Datenbanksystem kann bei Bedarf ausgetauscht werden. Hierfür sind in Java entsprechende Interfaces im Package model.database enthalten. Das Interface DatabaseAccess beschreibt die Verbindung zur Datenbank. Eine Klasse die DatabaseManipulator integriert, ist für das Hinzufügen und Löschen von Einträgen in dieser Datenbank zuständig, während eine Klasse die DatabaseObjectLoader integriert, für das Herauslesen dieser Einträge in Objektklassen verantwortlich ist. Nach dem Erstellen eigener Datenbankklassen, müssen diese in den Klassen LibraryController und DiffController aus dem Package control instanziiert werden. 5.3.2 Vergleichsalgorithmus Neben der vorhandenen Implementierung des Vergleichsalgorithmus mit der API googlediff-match-patch können weitere Vergleichsalgorithmen implementiert und getestet werden. Hierfür muss eine Java Klasse erstellt werden, die das Interface CompareAlgorithm aus dem Package control.compare implementiert. Der Algorithmus muss zwei Kapitel entgegen nehmen können und daraufhin eine Liste von Änderungen, wie sie in Model implementiert sind, zurückgeben. Um diesen neuen Algorithmus anzuwenden, muss dieser im Konstruktor der Klasse CompareMain, aus dem selben Package, initialisiert werden. 5 Programm 26 5.3.3 Kapitel-Alignment Für das Kapitel-Alignment sind mehrere Ansätz implementiert worden. Neben der in diesem Programm verwendeten Klasse AlignmentGeneratorLevenshtein sind die Klassen AlignmentGeneratorSimple und AlignmentGeneratorFingerprint vorhanden. Diese, in Kapitel 4 näher beleuchteten Klassen, können wie alle Implementierungen des Interfaces AlignmentGenerator verwendet werden, nachdem sie in der Klasse CompareMain initialisiert wurden. Eine neue Implementierung müsste, wie im dazugehörigen Interface beschrieben, zwei Buchversionen entgegen nehmen und daraufhin eine Liste von Kapitelalignments, welche die Kapitel der einen Version mit denen der anderen verknüpft, zurückgeben. 5.3.4 Erweiterte Vergleichsklassifizierung und Optimierer Um die vom Algorithmus detektierten Änderungen weiter zu klassifizieren und gegebenenfalls zu bereinigen, existiert ein Optimierer. Darin wird eine Liste von Änderungen entgegengenommen und optimiert wieder zurückgegeben. Ein Optimierer implementiert das Interface ChangeOptimizer und ist in diesem Projekt mit der Klasse ChangeOptimizerMain implementiert worden. Der in diesem Programm verwendete Optimierer enthält Funktionen zur Klassifizierung der Änderungen in Verschobenes und Umgeändertes, sowie Funktionen zum Löschen von überflüssigen Whitespaces, zum Weichzeichnen und zum Kombinieren von typengleichen Änderungen. Diese Funktionen können im Konstruktor der Klasse CompareMain über die Initialisierung der Optimiererklasse ein und ausgeschaltet werden. Beim Verwenden der Funktion zum Klassifizieren von verschobenen Textstücken, sowie der Verwendung zum Weichzeichen können die vorhandenen Parameter weiterhin angepasst werden. Bei der Integration von weiteren Funktionen können diese in die vorhandene oder in eine neue Optimierer Klasse eingetragen werden. Diese muss dabei das Interface ChangeOptimizer implementieren. 6 Bewertung 27 6 Bewertung In diesem Kapitel wird auf erhaltenes Feedback und bekannte potentielle Probleme des Programms eingegangen 6.1 Feedback Das in dieser Bachelorarbeit entwickelte Programm wurde im Rahmen des Kallimachos Projektes entwickelt und einer Arbeitsgruppe der Philosophischen Fakultät, unter Leitung von Prof. Dr. Brigitte Burrichter und Prof. Dr. Joachim Hamm, präsentiert. Hierbei wurde das Grundkonzept gelobt und die Oberfläche sehr positiv bewertet. Es wurde darauf eingegangen, dass dieses Programm eine gute Hilfe beim Exemplarvergleich verschiedener Buchversionen wäre. Zusätzlich konnten einige, für die Gruppe wichtige Aspekte des Exemplarvergleiches, angesprochen werden. Darunter die Möglichkeit spezielle Sonderzeichen und Schriftarten einzubinden, um eine universelle Darstellung zu ermöglichen. Auf diese und weitere Verbesserungen wird im Ausblick eingegangen. Im Hinblick auf weitere Zusammenarbeit überreichte die Arbeitsgruppe von Prof. Dr. Burrichter und Prof. Dr. Hamm einige Kapitel verschiedener Narrenschiffexemplare, die als Problemfälle bezeichnet wurden. Zum Verbessern und zum Anpassen an die Bedürfnisse der Arbeitsgruppe wurden diese Texte im Programm analysiert und die Ergebnisse für weitere Rücksprache übergeben. Hierbei wurde erkannt, dass die Anwendung, vor allem beim Vergleich von Texten ähnlicher Versionen, hilfreich ist. 6.2 Bekannte Probleme Während der Entwicklung des Programms kamen einige grundlegende Probleme zum Vorschein, die im Folgenden beschrieben werden. Die in diesem Programm angewandte Textanalyse ist grundsätzlich in der Lage das Auftreten eingefügter, sowie gelöschter Leerstellen und Zeilenumbrüche zu erkennen. Durch die Beschränkung der Anwendung auf eine Webdarstellung können diese jedoch nur schwer dargestellt werden. Die Auszeichnungssprache HTML ignoriert aufgrund ihres Aufbaues die Verwendung von Zeilenumbrüchen und aufeinander folgenden Leerstellen. Diese Diskrepanz zwischen Auffinden und Darstellen solcher Strukturelemente 6 Bewertung 28 sorgt dafür, dass die Änderungen in der Darstellung nicht weiter betrachtet werden. Sie sind jedoch weiterhin in der Rückgabe der Änderungsliste vorhanden und können weiterhin dargestellt werden. Bei der Webdarstellung ergibt sich ein weiteres Problem. Zur dynamischen Darstellung des Textvergleiches in HTML wird die Skriptsprache Javascript benötigt. Diese hat als Skriptsprache, verglichen mit einer Programmiersprache, nur beschränkte Resourcen zur Verfügung. Bei sehr langen Kapiteln mit extrem vielen Paragraphen und einer hohen Anzahl darin enthaltener Änderungen, kann dies gegebenenfalls zu einer stark erhöhten Browserauslastung führen. Allerdings ist es nahezu ausgeschlossen, dass dieses Phänomen in der Praxis auftritt. Sollte es dennoch dazu kommen, kann leicht Abhilfe geschaffen werden, indem die betreffenden Kapitel noch weiter untergliedert werden. 7 Diskussion 29 7 Diskussion Im folgenden Kapitel werden in einem abschließenden Fazit die Ergebnisse zusammengefasst und diskutiert, sowie ein Ausblick über mögliche Weiterentwicklungen der Software gegeben. 7.1 Fazit Diese Arbeit befasste sich mit der Entwicklung einer Webanwendung zur Textanalyse. Dabei wurden die Schritte des Programms von der Konzeption bis zur Fertigstellung, sowie dessen Benutzung beschrieben. Es wurde eine übersichtliche Webanwendung entwickelt, die bei der Buchversionsanalyse gute Ergebnisse erzielt. Die bei der Analyse gefundenen Unterschiede wurden erfolgreich in eingefügte, gelöschte, veränderte und verschobene Änderungen klassifiziert. Beim Vergleich von Kapiteln wird eine Statistik über deren Änderungen angezeigt. Diese ist leicht erweiterbar, wodurch das Hinzufügen neuer Änderungsklassifizierungen automatisch aufgenommen wird. Ebenso ist das Hinzufügen einer buchweiten Statistik in einem neuen Darstellungsfenster leicht möglich. Mithilfe dieser Klassifizierung und deren statistischen Aufbereitung wurde ein nützliches Analysewerkzeug geschaffen. Das Programm wurde noch in der Entwicklungszeit einer interessierten Arbeitsgruppe vorgeführt und erhielt dabei eine sehr positive Resonanz. Während der Entwicklung wurde immer auf Erweiterbarkeit und Modularität geachtet. Hierbei war es wichtig, dass die Anwendung mit möglichst wenig Anpassungen universell einsetzbar ist, aber gleichzeitig modular genug, zur Anpassung an Spezialfälle, bleibt. Diese Modularität wurde durch verschiedene Vorkehrungen, wie das Einhalten des MVC-Modells und die Erstellung mehrerer Interfaces, erfolgreich umgesetzt. Die Anwendung wurde im Hinblick auf die Verwendung im Kallimachos Projekt entwickelt. Bei der Evaluation hat sich gezeigt, dass das Programm sowohl für den dortigen Einsatz, als auch für die Verwendung in anderen Projekten geeignet ist. 7 Diskussion 30 7.2 Ausblick Diese Arbeit hat bereits ein gut funktionierendes Programm hervorgebracht, das jedoch noch weiterentwickelt und verbessert werden kann. Einige Ideen zur Weiterentwicklung sind bereits während der Entwicklung entstanden, konnten jedoch im Rahmen der Arbeit nicht vollständig umgesetzt werden. Einige dieser möglichen Erweiterungen werden im Folgenden besprochen. Das Testen des Programms führte auf den vorhandenen Daten zu guten Ergebnissen. Durch das Testen von weiteren Büchern, kann das Analyseergebnis sicherlich noch verbessert werden. Mit einer angepassten Klassifizierungen und Textoptimierungen wäre es möglich, weiteren Extremfällen entgegen zu wirken. Dadurch könnte das Programm an spezielle Anforderungen angepasst werden. Ebenso könnten weitere Klassifizierungen wie das Runterbrechen der Änderungen auf Wort-, Satz- und Paragraphebene erfolgen. Das Hinzufügen weiterer Klassifizierungen ist bei der momentanen Implementierung jederzeit möglich. Das Erweitern der Statistik auf eine buchweite Untersuchung, kann das Treffen von Aussagen über die Buchversionen untereinander ermöglichen. Die Versionen könnten somit auf globale Ähnlichkeit untereinander geprüft und gegebenenfalls in eine Änderungshistorie des Buches eingeordnet werden. Bei der Analyse der Bücher werden die vorhandenen Änderungen in einer Liste von eigenen Modellklassen abgespeichert. Für eine Verwendung dieser Analysedaten außerhalb des Programms wäre es möglich, diese vorhandene Liste in ein eigenes oder in ein bereits etabliertes Format umzuwandeln. Ein Format das hierfür verwendet werden könnte, ist das analytische Annotationsformat Common Analysis Structure (CAS), das vor allem in der Apache Unstructured Information Management Architecture (UIMA) Verwendung findet. In diesem Format werden die Annotationen vom Haupttext getrennt und lokal unter Verwendung von XML oder in Datenbanken gespeichert [FTP13]. Literaturverzeichnis 31 Literaturverzeichnis [Fraa] Fraser, Neil: google-diff-match-patch - Diff, Match and Patch libraries for Plain Text. https://code.google.com/p/google-diff-match-patch/. – [Online; Stand 23. Mai 2016] [Frab] Fraser, Neil: Research at Google - Researcher Neil Fraser. https:// research.google.com/pubs/author38488.html. – [Online; Stand 23. Mai 2016] [Fra06] Fraser, Neil: Fuzzy Patch. https://neil.fraser.name/writing/ patch/. Version: 2006. – [Online; Stand 03. Juni 2016] [Fra09] Fraser, Neil: Differential synchronization. In: Proceedings of the 9th ACM symposium on Document engineering ACM, 2009, S. 13–20 [FTP13] Fette, Georg ; Toepfer, Martin ; Puppe, Frank: Storing UIMA CASes in a relational database. In: Unstructured Information Management Architecture (UIMA) (2013), S. 10 [Goo] Google: Material design - Google design guidelines. https://www. google.com/design/spec/material-design/. – [Online; Stand 04. Juni 2016] [HZ03] Hoad, Timothy C. ; Zobel, Justin: Methods for identifying versioned and plagiarized documents. In: Journal of the American society for information science and technology 54 (2003), Nr. 3, S. 203–215 [Irv04] Irving, Robert W.: Plagiarism and collusion detection using the SmithWaterman algorithm. In: University of Glasgow (2004), S. 9 [Mye86] Myers, Eugene W.: AnO (ND) difference algorithm and its variations. In: Algorithmica 1 (1986), Nr. 1-4, S. 251–266 [Wü14a] Würzburg, Universitätsbibliothek: KALLIMACHOS. http:// kallimachos.de/kallimachos/. Version: 2014. – [Online; Stand 06. Juni 2016] [Wü14b] Würzburg, Universitätsbibliothek: Narragonien digital KALLIMACHOS. http://kallimachos.de/kallimachos/index. php/Narragonien. Version: 2014. – [Online; Stand 29. Mai 2016] [WCML] Wang, Alvin ; Chang, Alan ; Mark, Alex ; Louie, Kevin: Materialize A modern responsive front-end framework based on Material Design. http: //materializecss.com. – [Online; Stand 23. Mai 2016] Literaturverzeichnis 32 [Wik15] Wikipedia: Nachdruck — Wikipedia, Die freie Enzyklopädie. https:// de.wikipedia.org/w/index.php?title=Nachdruck&oldid=144481552. Version: 2015. – [Online; Stand 29. Mai 2016] [Wik16a] Wikipedia: Levenshtein-Distanz — Wikipedia, Die freie Enzyklopädie. https://de.wikipedia.org/w/index.php?title=LevenshteinDistanz&oldid=154710503. Version: 2016. – [Online; Stand 7. Juni 2016] [Wik16b] Wikipedia: Model View Controller — Wikipedia, Die freie Enzyklopädie. https://de.wikipedia.org/w/index.php?title=Model_ View_Controller&oldid=153458367. Version: 2016. – [Online; Stand 23. Mai 2016] [Wik16c] Wikipedia: Plagiat — Wikipedia, Die freie Enzyklopädie. https: //de.wikipedia.org/w/index.php?title=Plagiat&oldid=155045704. Version: 2016. – [Online; Stand 7. Juni 2016] [WM91] Wu, Sun ; Manber, Udi: Fast text searching with errors. University of Arizona. Department of Computer Science, 1991 [ZES06] Zu Eissen, Sven M. ; Stein, Benno: Intrinsic plagiarism detection. In: Advances in Information Retrieval. Springer, 2006, S. 565–569 [ZFMP06] Zini, Manuel ; Fabbri, Marco ; Moneglia, Massimo ; Panunzi, Alessandro: Plagiarism detection through multilevel text comparison. In: Automated Production of Cross Media Content for Multi-Channel Distribution, 2006. AXMEDIS’06. Second International Conference on IEEE, 2006, S. 181–185 DVD mit Ausarbeitung und Programmcode 33 DVD mit Ausarbeitung und Programmcode Der beigelegte Datenträger enthält eine digitale Fassung dieser Ausarbeitung, sowie sämtlichen Programmcode der zur Installation der Software notwendig ist. Eidesstattliche Erklärung 34 Eidesstattliche Erklärung Ich versichere, die von mir vorgelegte Arbeit selbstständig verfasst zu haben. Alle Stellen, die wörtlich oder sinngemäß aus veröffentlichten oder nicht veröffentlichten Arbeiten anderer entnommen sind, habe ich als entnommen kenntlich gemacht. Sämtliche Quellen und Hilfsmittel, die ich für die Arbeit benutzt habe, sind angegeben. Die Arbeit hat mit gleichem Inhalt bzw. in wesentlichen Teilen noch keiner anderen Prüfungsbehörde vorgelegen. Ort, Datum Unterschrift