Bachelorarbeit - Lehrstuhl für Informatik VI

Werbung
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
Herunterladen