- Fachgebiet Datenbanken und Informationssysteme
Transcription
- Fachgebiet Datenbanken und Informationssysteme
Fakultät für Elektrotechnik und Informatik Institut für Praktische Informatik Fachgebiet Datenbanken und Informationssysteme String-basiertes Matching von Datenbank-Objekten Masterarbeit im Studiengang Informatik Andreas Prante Matrikelnummer: 2296160 Prüfer: Prof. Dr. Udo Lipeck Zweitprüfer: Dr. Hans Hermann Brüggemann Betreuer: M. Sc. Hendrik Warneke 3. Mai 2012 Inhaltsverzeichnis 1 Einleitung 3 2 Algorithmen 5 2.1 Edit-Distance / Levenshtein-Distance . . . . . . . . . . . . . . . . . . . . 5 2.2 Damerau-Levenshtein . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3 Soundex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.4 Kölner Phonetik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.5 Jaro-Distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.6 Field Similarity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.7 Q-Grams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.8 N-Gramme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.9 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3 Kombination von Algorithmen für die Duplikaterkennung 23 3.1 Hintereinander-Ausführung von Algorithmen . . . . . . . . . . . . . . . . 23 3.2 Parallele-Ausführung von Algorithmen . . . . . . . . . . . . . . . . . . . 24 3.3 Kombination über die Länge von Vektoren . . . . . . . . . . . . . . . . . 25 3.4 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4 Sorted Neighborhood Methode(SNM) 29 5 Experimente 33 5.1 Bewertungskriterien der Algorithmen . . . . . . . . . . . . . . . . . . . . 33 5.2 Experimente: Analyse der Brute Force Strategie . . . . . . . . . . . . . . 35 5.3 Experimente: Analyse der Sorted Neighborhood Methode . . . . . . . . . 39 1 5.4 Experimente: Analyse der vorhandenen Datenquellen . . . . . . . . . . . 6 Implementierung 50 55 6.1 Anforderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 6.2 Programmaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 6.3 Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 6.4 Benutzeroberfläche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 6.5 Installation und Deinstallation . . . . . . . . . . . . . . . . . . . . . . . . 77 6.6 Ergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 7 Erweiterung auf Datenbankobjekte 83 7.1 Ähnlichkeit von Datenbankobjekten . . . . . . . . . . . . . . . . . . . . . 83 7.2 Fortgeschrittene Experimente . . . . . . . . . . . . . . . . . . . . . . . . 84 7.3 Erweiterung der Implementation . . . . . . . . . . . . . . . . . . . . . . . 85 8 Ausblick 87 8.1 Ähnlichkeitsmaße . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 8.2 Anzahl der Vergleiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 8.3 Anwendungsgebiete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 A SQL und PL/SQL 91 B XSLT 93 C Experimente 95 2 Kapitel 1 Einleitung Heutzutage gibt es immer mehr Datenbanken, die auf der Dateneingabe von vielen Nutzern basieren. Hieraus ergibt sich das Problem, dass häufig für ein Objekt in der realen Welt mehrere Beschreibungen in der Datenbank vorhanden sind. Diese entstehen durch Tippfehler oder auch durch die Verwendung anderer Schreibweisen. So werden z.B. manche Begriffe durch Leerzeichen oder auch durch Bindestriche getrennt, obwohl in beiden Fällen das selbe Objekt in der realen Welt dargestellt wird. Unterschiede entstehen aber auch durch die Verwendung von unterschiedlichen Sprachen. Weiterhin zu erwähnen ist die Disziplin der Nutzer, denn gerade in von Nutzern gefüllten Datenbeständen ist es sehr wichtig, dass sich ein Nutzer sehr diszipliniert z.B. an Vorgaben für die Bezeichnung von Objekten hält. Durch diese Probleme wird es sehr schwierig und problematisch, z.B. eine Suche über solche Datenbestände durchzuführen. Um diese Daten nutzen zu können, ist es notwendig, dass diese Synonyme erkannt werden und möglichst nur eine Repräsentation eines Objektes der realen Welt in der Datenbank verbleibt. Hieraus ergibt sich die Aufgabenstellung dieser Arbeit. Diese Arbeit soll das Matching von Datenbank-Objekten betrachten. Basieren soll dieses Matching auf dem Matching von Strings. Hierzu sollen zunächst verschiedene Algorithmen zur Bestimmung der Ähnlichkeit von zwei Strings betrachtet und danach anhand der Betrachtung von praktischen Beispielen analysiert sowie bewertet werden. Danach soll eine Kombination der betrachteten Algorithmen gewählt werden, die aus der Datenquelle die entsprechenden Matchingpartner berechnen. Diese Kombination soll ebenfalls genutzt werden, um den Vergleich der Strings auf den Vergleich von Datenbank-Objekten zu erweitern. Zusätzlich sollen in der Arbeit die Möglichkeiten des Einsatzes von Methoden des Data Mining, die beim Matching der Datenbank-Objekte eingesetzt werden könnten, um z.B. eine geeignete Vorauswahl der betrachteten Daten zu treffen, betrachtet werden. Für die spätere Implementation soll analysiert werden, inwieweit ein Anwender über Vorwissen über die verwendete Datenbank verfügen muss, um die Analyse der Daten durchzuführen, oder ob diese ohne bzw. mit minimalem Vorwissen erfolgen kann. 3 Die Arbeit ist wie folgt aufgebaut: Nach diesem Kapitel als Einleitung der Arbeit, wird im Kapitel Algorithmen(Kap. 2) eine Auswahl von Algorithmen zur Berechnung der Ähnlichkeit von Strings vorgestellt. Der Aufbau, die Funktionsweise sowie weitere wichtige Eigenschaften der Algorithmen werden genannt und beschrieben. Im nachfolgenden Kapitel Kombination von Algorithmen für die Duplikaterkennung(Kap. 3) werden die grundlegenden Ideen zur Kombination bzw. zur effizienten Berechnung der Ähnlichkeitsmaße für komplette Datensätze dargestellt und erläutert. Im Kapitel 4 wird die Sorted Neighborhood Methode(SNM) vorgestellt und analysiert. Im Kapitel Experimente(Kap. 5) werden die vorgestellten Ansätze und Algorithmen praktisch ausgeführt und die daraus resultierenden Ergebnisse ausgewertet. Daraus sollen evtl. notwendige Eigenschaften für die spätere Implementierung erfasst werden. Zudem werden in diesem Kapitel die verwendeten Datenquellen vorgestellt. Die endgültige Implementierung wird anschließend im Kapitel Implementierung(Kap. 6) betrachtet. Im Kapitel 7 wird die Erweiterung auf Datenbankobjekte betrachten. Zum Schluss der Arbeit folgt ein Ausblick(Kap. 8) auf weiterführende Aspekte der betrachteten Problematik. 4 Kapitel 2 Algorithmen Im diesem Kapitel werden mögliche Algorithmen vorgestellt, die später zur Berechnung eines Ähnlichkeitsmaßes verwendet werden. Es wird jeweils kurz der Ablauf des Algorithmus beschrieben, das im Algorithmus verwendete Ähnlichkeitsmaß erläutert sowie Vorund Nachteile der einzelnen Algorithmen aufgelistet. Anschließend folgen kurze Beispiele zur Verdeutlichung der Funktionsweise. Die vorgestellten Algorithmen werden nach den im Kapitel 3 dargestellten Ideen kombiniert und anschließend getestet. Die Ergebnisse der Tests werden im Kapitel 5 dargestellt. 2.1 Edit-Distance / Levenshtein-Distance Beim Verfahren der Edit-Distance[LN2007], auch bekannt als Levenshtein-Distance, betrachtet man die Differenzen zweier Strings, in dem die notwendigen Änderung berechnet werden, um den einen String in den anderen String zu überführen. Zur Berechnung der Überführung des einen Strings in den anderen stehen vier Operationen zur Verfügung: • I: Einfügen • D: Löschen • R: Ersetzen • M : Match Mit Hilfe dieser Operation lassen sich sog. Editskripte definieren. Ein Editskript e für zwei Strings A, B ist eine Sequenz der o.g. Operationen, so dass e(A) = B. 5 (2.1) Die Länge eines Editskripts ist die Anzahl der Operationen in einem Editskript, allerdings wird matchen“ nicht gezählt. Die Edit-Distance zweier Strings ist die Länge des ” kürzestes Editskripts. Zur Bestimmung des Ähnlichkeitsmaßes gilt es zunächst die Edit-Distance zweier Strings zu bestimmen. Leser/Naumann[LN2007] führen die Berechnung der Edit-Distance zweier Strings auf die Berechnung der Distance der einzelnen Präfixe zurück. Hierbei gilt: seien A, B zwei Strings mit |A| = n und |B| = m. d(i, j) ist definiert als Edit-Distance des Präfixes der Länge i von A und des Präfixes der Länge j von B. Daraus folgt d(n, m) = dist(A, B) (2.2) mit dist(A, B) berechne den Editabstand der Strings A und B. dist(A, B) wird rekursiv mit Hilfe von d(i, j) berechnet. Als Struktur zur Speicherung der einzelnen d(i, j) wird eine n × m − M atrix verwendet. Für die einzelnen d(i, j) gilt: d(i − 1, j) + 1 d(i, j) = min d(i, j − 1) + 1 (2.3) d(i − 1, j − 1) + t(i, j) mit d(i, 0) = i, d(0, j) = j und { t(i, j) = 1, wenn A[i] ̸= B[j] 0, sonst } (2.4) Der Aufbau der Matrix wird durch das folgende Beispiel, der Berechnung der EditDistance der Strings Ostlandstraße“ und Otslandstraße“, verdeutlicht. Seien A und B ” ” zwei Strings, für die gilt: A = Ostlandstraße B = Otslandstraße Aus der Berechnung der einzelnen d(i, j) folgt die Matrix, die in Tabelle 2.1 dargestellt wird. Wie in Tabelle 2.1 zu erkennen ist, gilt im genannten Beispiel d(n, m) = 2. (2.5) Somit haben die Strings A und B eine Edit-Distance von 2. Das Ähnlichkeitsmaß wird mit folgender Formel berechnet: simedit−dist (A, B) := 1 − dist(A, B) max(|A|, |B|) (2.6) Für das oben genannte Beispiel ergibt sich mit der Formel für die Berechnung des Ähnlichkeitsmaßes folgendes: 2 max(13, 13) simedit−dist (A, B) = 0.8462 simedit−dist (A, B) = 1 − 6 0 1 2 3 4 1 0 1 2 3 2 1 1 1 2 3 2 1 2 2 4 3 2 2 2 5 4 3 3 3 6 5 4 4 4 7 6 5 5 5 8 7 6 5 6 9 8 7 6 6 10 9 8 7 7 11 10 9 8 8 12 11 10 9 9 13 12 11 10 10 5 4 3 3 3 2 3 4 5 6 7 7 8 9 6 5 4 4 4 3 2 3 4 5 6 7 8 9 7 6 5 5 5 4 3 2 3 4 5 6 7 8 8 7 6 6 6 5 4 3 2 3 4 5 6 7 9 10 11 12 13 8 9 10 11 12 7 8 9 10 11 6 7 8 9 10 7 7 8 9 10 6 7 7 8 9 5 6 7 8 9 4 5 6 7 8 3 4 5 6 7 2 3 4 5 6 3 2 3 4 5 4 3 2 3 4 5 4 3 2 3 6 5 4 3 2 Tabelle 2.1: Matrix für das o.g. Edit-Distance-Beispiel Der folgende Algorithmus in Pseudo-Code berechnet die Ähnlichkeit von zwei Strings. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 editdistance(String A, String B) { for (i = 0 ; i < A.length() ; i++) { d(i,0) = i; } for (j = 0 ; j < B.length() ; j++) { d(0,j) = j; } for (i = 1 ; i < A.length() ; i++) { for (j = 1 ; j < B.length() ; j++) { if (A.charAt(i).equals(B.charAt(j))) { t = 0; } else { t = 1; } d(i,j) = min(d(i-1,j)+1,d(i,j-1)+1,d(i-1,j-1)+t); } } return d(n,m); } Algorithmus 2.1: Algorithmus zur Bestimmung der Edit-Distance 7 Die Laufzeit des angegebenen Algorithmus ergibt sich aus der Berechnung der Matrix d. Die Matrix hat eine Größe von n × m für zwei Strings A und B mit |A| = n und |B| = m. Da alle Zellen der Matrix d berechnet werden müssen und für die Berechnung einer Zelle eine konstante Anzahl von Rechenoperationen notwendig ist, ergibt sich eine Laufzeit von O(n ∗ m). (2.7) Vorteil der Edit-Distance ist, dass dieses Maß unabhängig von der zu erkennenden Sprache ist. Somit kann das Maß auch bei Datenquellen zur Anwendung kommen, die Elemente aus verschiedenen Sprachen enthalten. Nachteil der Edit-Distance ist, dass die Eingabestrings nur in der Reihenfolge ihrer Eingabe betrachtet werden. Daraus folgt, dass z. B. die Strings “Hans Peter” und “Peter Hans” als nicht sehr ähnlich angesehen werden. 2.2 Damerau-Levenshtein Beim Damerau-Levenshtein-Verfahren[Le0809] erfolgt die Berechnung analog zum EditDistance-Verfahren. Die Damerau-Levenshtein-Distance unterscheidet sich von der EditDistance lediglich in der Berechnung der einzelnen d(i, j) und der Gewichte t(i, j). Beim Damerau-Levenshtein-Verfahren werden die einzelnen Distanzen d(i, j) in folgender Form berechnet: d(i − 1, j) + 1 d(i, j − 1) + 1 (2.8) d(i, j) = min d(i − 1, j − 1) + t(i, j) d(i − 2, j − 2) + t(i − 1, j) + t(i, j − 1) mit d(i, 0) = i, d(0, j) = j. Die Kosten t(i, j) für eine Replace-Operation werden in Abhängigkeit vom Abstand der einzelnen Buchstaben auf der Tastatur berechnet. Der Abstand der einzelnen Buchstaben wird wie folgt bestimmt: es werden die Tasten gezählt, die man auf dem kürzesten Weg zwischen zwei Tasten besucht. Liegen zwei Tasten in verschiedenen Reihen der Tastatur, erfolgt ein Sprung in eine andere Reihe über eine anliegende Taste der entsprechenden Ebene und wird das ebenfalls mit 1 bewertet. Abbildung 2.1 macht dies deutlich. Die Kosten t(i, j) für eine Replace-Operation berechnen sich nach folgendem Ansatz: sei n(i, j) der Abstand zwischen der Taste i und der Taste j auf der Tastatur. Die einzelnen Kosten werden dann mit der Formel t(i, j) = n(i, j) 10 (2.9) berechnet. Mit Hilfe dieser Formel lassen sich die in der Tabelle 2.2 dargestellten Werte berechnen. Die Tabelle kann einmalig berechnet werden, da sie sich nicht ändert, sondern konstant ist. Einzige Ausnahme wäre die Verwendung einer englischen Tastatur 8 Abbildung 2.1: Abstand der Tasten R und B auf einer Tastatur und der damit verbundenen Vertauschung der Tasten y“ und z“. Da das Verfahren ” ” eine Weiterentwicklung der Edit-Distance ist, besitzt das Verfahren die selben Vor- und Nachteile. Allerdings hat das Verfahren weitere Vorteile. Durch die Unterscheidung bei der Berechnung der Kosten für eine Replace-Operation werden Tipp-Fehler ausgeglichen, da Buchstaben, die auf der Tastatur nahe beieinander liegen, mit einem geringeren Gewicht bewertet werden. Der Algorithmus des Verfahrens ist analog zum Algorithmus der Edit-Distance. Somit ergibt sich auch die selbe Laufzeit für dieses Verfahren von O(n ∗ m). (2.10) Die Funktionsweise des Verfahrens soll durch die folgenden Beispiele kurz dargestellt werden. Bestimmung der Ähnlichkeit für die Strings Ostlandstraße“ und Otslandstra” ” ße“, seien A und B zwei Strings, für die gilt: A = Ostlandstraße B = Otslandstraße Aus dem Algorithmus folgt Tabelle 2.3 und eine Damerau-Levenshtein-Distance von 0.6. dist(A, B) max(|A|, |B|) 0.60 simdamerau−levenshtein−dist (A, B) = 1 − max(13, 13) simdamerau−levenshtein−dist (A, B) = 0.9538 simdamerau−levenshtein−dist (A, B) = 1 − 9 10 a b c d e f g h i j k l m n o p q r s t u v w x y z a 0 0.5 0.3 0.2 0.2 0.3 0.4 0.5 0.7 0.6 0.7 0.8 0.6 0.7 0.8 0.9 0.1 0.3 0.1 0.4 0.6 0.4 0.1 0.2 0.1 0.5 b 0.5 0 0.2 0.3 0.4 0.2 0.1 0.1 0.3 0.2 0.3 0.4 0.2 0.1 0.4 0.5 0.6 0.3 0.4 0.2 0.2 0.1 0.5 0.2 0.3 0.2 c 0.3 1 0 0.1 0.2 0.1 0.2 0.3 0.5 0.4 0.5 0.6 0.4 0.3 0.6 0.7 0.4 0.2 0.2 0.2 0.4 0.1 0.3 0.1 0.2 0.3 d 0.2 0.3 0.1 0 0.1 0.1 0.2 0.3 0.5 0.4 0.5 0.6 0.5 0.4 0.6 0.7 0.3 0.1 0.1 0.2 0.4 0.2 0.2 0.1 0.2 0.3 f 0.3 0.2 0.1 0.1 0.2 0 0.1 0.2 0.4 0.3 0.4 0.5 0.4 0.3 0.5 0.6 0.4 0.1 0.2 0.1 0.3 0.1 0.3 0.2 0.3 0.2 g 0.4 0.1 0.2 0.2 0.3 0.1 0 0.1 0.3 0.2 0.3 0.4 0.3 0.2 0.4 0.5 0.5 0.2 0.3 0.1 0.2 0.1 0.4 0.3 0.4 0.1 h 0.5 0.1 0.3 0.3 0.4 0.2 0.1 0 0.2 0.1 0.2 0.3 0.2 0.1 0.3 0.4 0.6 0.3 0.4 0.2 0.1 0.2 0.5 0.4 0.5 0.1 i 0.7 0.3 0.5 0.5 0.5 0.4 0.3 0.2 0 0.1 0.1 0.2 0.2 0.2 0.1 0.2 0.7 0.4 0.6 0.3 0.1 0.4 0.6 0.6 0.7 0.2 j 0.6 0.2 0.4 0.4 0.5 0.3 0.2 0.1 0.1 0 0.1 0.2 0.1 0.1 0.2 0.3 0.7 0.4 0.5 0.3 0.1 0.3 0.6 0.5 0.6 0.2 k 0.7 0.3 0.5 0.5 0.6 0.4 0.3 0.2 0.1 0.1 0 0.1 0.1 0.2 0.1 0.2 0.8 0.5 0.6 0.4 0.2 0.4 0.7 0.6 0.7 0.3 l 0.8 0.4 0.6 0.6 0.7 0.5 0.4 0.3 0.2 0.2 0.1 0 0.2 0.3 0.1 0.1 0.9 0.6 0.7 0.5 0.3 0.5 0.8 0.7 0.8 0.4 m 0.7 0.2 0.4 0.5 0.6 0.4 0.3 0.2 0.2 0.1 0.1 0.2 0 0.1 0.2 0.3 0.8 0.5 0.6 0.4 0.2 0.3 0.7 0.5 0.6 0.3 n 0.6 0.1 0.3 0.4 0.5 0.3 0.2 0.1 0.2 0.1 0.2 0.3 0.1 0 0.3 0.4 0.7 0.4 0.5 0.3 0.2 0.2 0.6 0.4 0.5 0.2 o 0.8 0.4 0.6 0.6 0.6 0.5 0.4 0.3 0.1 0.2 0.1 0.1 0.2 0.3 0 0.1 0.8 0.5 0.7 0.4 0.2 0.5 0.7 0.7 0.8 0.3 p 0.9 0.5 0.7 0.7 0.7 0.6 0.5 0.4 0.2 0.3 0.2 0.1 0.3 0.4 0.1 0 0.9 0.6 0.8 0.5 0.3 0.6 0.8 0.8 0.9 0.4 q 0.1 0.6 0.4 0.3 0.2 0.4 0.5 0.6 0.7 0.7 0.8 0.9 0.8 0.7 0.8 0.9 0 0.3 0.2 0.4 0.6 0.5 0.1 0.3 0.2 0.5 r 0.3 0.3 0.2 0.1 0.1 0.1 0.2 0.3 0.4 0.4 0.5 0.6 0.5 0.4 0.5 0.6 0.3 0 0.2 0.1 0.3 0.2 0.2 0.2 0.3 0.3 s 0.1 0.4 0.2 0.1 0.2 0.2 0.3 0.4 0.6 0.5 0.6 0.7 0.6 0.5 0.7 0.8 0.2 0.2 0 0.3 0.5 0.3 0.1 0.1 0.1 0.4 t 0.4 0.2 0.2 0.2 0.2 0.1 0.1 0.2 0.3 0.3 0.4 0.5 0.4 0.3 0.4 0.5 0.4 0.1 0.3 0 0.2 0.2 0.3 0.3 0.4 0.1 u 0.6 0.2 0.4 0.4 0.4 0.3 0.2 0.1 0.1 0.1 0.2 0.3 0.2 0.2 0.2 0.3 0.6 0.3 0.5 0.2 0 0.3 0.5 0.5 0.6 0.1 Tabelle 2.2: Gewichte t(i, j) für das Maß des Abstandes auf der Tastatur e 0.2 0.4 0.2 0.1 0 0.2 0.3 0.4 0.5 0.5 0.6 0.7 0.6 0.5 0.6 0.7 0.2 0.1 0.2 0.2 0.4 0.3 0.1 0.2 0.2 0.3 v 0.4 0.1 0.1 0.2 0.3 0.1 0.1 0.2 0.4 0.3 0.4 0.5 0.3 0.2 0.5 0.6 0.5 0.2 0.3 0.2 0.3 0 0.4 0.2 0.3 0.2 w 0.1 0.5 0.3 0.2 0.1 0.3 0.4 0.5 0.6 0.6 0.7 0.8 0.7 0.6 0.7 0.8 0.1 0.2 0.1 0.3 0.5 0.4 0 0.2 0.2 0.4 x 0.2 0.2 0.1 0.1 0.2 0.2 0.3 0.4 0.6 0.5 0.6 0.7 0.5 0.4 0.7 0.8 0.3 0.2 0.1 0.3 0.5 0.2 0.2 0 0.1 0.4 y 0.1 0.3 0.2 0.2 0.2 0.3 0.4 0.5 0.7 0.6 0.7 0.8 0.6 0.5 0.8 0.9 0.2 0.3 0.1 0.4 0.6 0.3 0.2 0.1 0 0.5 z 0.5 0.2 0.3 0.3 0.3 0.2 0.1 0.1 0.2 0.2 0.3 0.4 0.3 0.2 0.3 0.4 0.5 0.3 0.4 0.1 0.1 0.2 0.4 0.4 0.5 0 0,0 1,0 2,0 3,0 4,0 5,0 6,0 7,0 8,0 9,0 10,0 11,0 12,0 13,0 1,0 0,0 1,0 2,0 3,0 4,0 5,0 6,0 7,0 8,0 9,0 10,0 11,0 12,0 2,0 1,0 0,3 1,0 2,0 3,0 4,0 5,0 6,0 7,0 8,0 9,0 10,0 11,0 3,0 2,0 1,0 0,6 1,6 2,1 3,1 4,1 5,0 6,0 7,0 8,0 9,0 10,0 4,0 3,0 2,0 1,5 0,6 1,6 2,4 3,4 4,4 5,4 6,4 7,4 8,4 9,4 5,0 4,0 3,0 2,4 1,6 0,6 1,6 2,6 3,5 4,5 5,5 6,4 7,4 8,4 6,0 5,0 4,0 3,3 2,6 1,6 0,6 1,6 2,6 3,6 4,6 5,6 6,6 7,6 7,0 6,0 5,0 4,2 3,6 2,6 1,6 0,6 1,6 2,6 3,6 4,6 5,6 6,6 8,0 7,0 6,0 5,2 4,6 3,6 2,6 1,6 0,6 1,6 2,6 3,6 4,6 5,6 9,0 8,0 7,0 6,0 5,6 4,6 3,6 2,6 1,6 0,6 1,6 2,6 3,6 4,6 10,0 9,0 8,0 7,0 6,6 5,6 4,6 3,6 2,6 1,6 0,6 1,6 2,6 3,6 11,0 10,0 9,0 8,0 7,6 6,6 5,6 4,6 3,6 2,6 1,6 0,6 1,6 2,6 12,0 11,0 10,0 9,0 8,6 7,6 6,6 5,6 4,6 3,6 2,6 1,6 0,6 1,6 13,0 12,0 11,0 10,0 9,6 8,6 7,6 6,6 5,6 4,6 3,6 2,6 1,6 0,6 Tabelle 2.3: Damerau-Levenshtein-Distance-Beispiel 2.3 Soundex Beim Soundex-Verfahren[EIV2007] werden Elemente anhand ihres Klanges verglichen. Dabei ist das Ziel, dass gleichklingende Wörter mit der selben Kodierung repräsentiert werden. Das Verfahren orientiert sich am Klang der Wörter in der englischen Sprache. Die Kodierung erfolgt nach folgenden Regeln: 1. Der Soundex-Code eines Wortes besteht aus dem ersten Zeichen des Wortes, gefolgt von drei Ziffern für die gilt 1 ≤ Ziffer ≤ 6. 2. Vokale werden, außer beim Vorkommen als erstes Zeichen, ignoriert. 3. Die Konsonanten H“, W“ und Y“ werden, außer beim Vorkommen als erstes ” ” ” Zeichen, ignoriert. 4. Entstehen bei der Codierung der Zeichen zweimal dieselbe Ziffer, wird diese nur einmal in den Code übernommen und die Codeerzeugung fortgesetzt. 5. Die Berechnung wird nach der dritten erzeugten Ziffer abgebrochen. 6. Enthält ein erzeugter Soundex-Code weniger als drei Ziffern, wird dieser mit Nullen aufgefüllt, bis der Code drei Ziffern enthält. 7. Die Kodierung der Buchstaben erfolgt nach Tabelle 2.4. Die Berechnung des Ähnlichkeitsmaßes basiert auf der Berechnung der SOUNDEXCodes für die beiden Eingabestrings. Seien i und j die zu vergleichenden Eingabestrings, 11 Ziffer Repräsentierte Buchstaben 1 B, F, P, V 2 C, G, J, K, Q, S, X, Z 3 D, T 4 L 5 M, N 6 R H, W, Y A, E, I, O, U Tabelle 2.4: Kodierung Soundex dann ist das Ähnlichkeitsmaß definiert als { 1, wenn SOU N DEX(i) = SOU N DEX(j) simsoundex = . 0, wenn SOU N DEX(i) ̸= SOU N DEX(j) (2.11) Der Algorithmus zur Berechnung des Ähnlichkeitsmaßes ist nach folgendem Code-Beispiel in Pseudo-Code aufgebaut. 1 soundex(String A, String B) { 2 codeMap //Hashmap, die die Tabelle der Kodierung des Soundex abbildet. 3 4 if ((a != null)&&(b != null)) { 5 if (getCode(a).equals(getCode(b))) return 1.0; 6 else return 0.0; 7 } 8 else return 0.0; 9 } 10 11 public String getCode(String string) { 12 String code = string.substring(0, 1).toUpperCase(); 13 String lastCode = code; 14 for (int i = 1; i < string.length(); i++) { 15 if (code.length() == 4) { 16 return code; 17 } 18 else { 19 String aktCode = codeMap.get(string.substring(i, i+1)); 20 if (!(aktCode.equals(lastCode))) 21 code = code + aktCode; 22 lastCode = aktCode; 23 } 24 } 12 25 26 27 28 29 30 31 32 33 34 35 } if (code.length() == 1 ) { code = code + "000"; } else if (code.length() == 2 ) { code = code + "00"; } else if (code.length() == 3 ) { code = code + "0"; } return code; Algorithmus 2.2: Algorithmus zur Bestimmung des Soundex Zur Bestimmung der Laufzeit des Algorithmus seien A und B zwei Strings, für die gilt n = |A| und m = |B|. O.b.d.A. sei m ≤ n. Zur Bestimmung des Soundex-Codes muss im schlechtesten Fall einer der beiden Strings einmal vollständig durchlaufen werden. Somit ergibt sich eine Laufzeit von O(n). (2.12) Vorteil des Soundex-Verfahren ist, dass das Verfahren auf der Aussprache von Wörtern beruht. Somit werden Hör- und Aussprachefehler korrigiert. Nachteil des SoundexVerfahrens ist, dass der Algorithmus für die englische Sprache bzw. Aussprache entwickelt wurde und somit andere Sprachen nur bedingt unterstützt werden. Deutlich wird dies durch den Vergleich der Soundex-Codes für die Wörter Hannover“, Hamburg“ und ” ” Homburg“: ” • Hannover → H516 • Hamburg → H516 • Homburg → H516 Ein weiterer Nachteil ist, dass vor allem bei längeren Wörtern der hintere Teil komplett ignoriert und nicht betrachtet wird. Hinzu kommt, dass Informationen durch das Verfahren verloren gehen, da alle Vokale, wenn sie nicht als erstes Zeichen vorkommen, nicht betrachtet werden. Das folgende Beispiel zeigt die Bestimmung des Ähnlichkeitsmaßes für die Strings Ostlandstraße“ und Otslandstraße“. ” ” A = Ostlandstraße B = Otslandstraße SOU N DEX(A) = O234 SOU N DEX(B) = O324 simsoundex (A, B) = 0.0 13 2.4 Kölner Phonetik Die Kölner Phonetik ist eine Weiterentwicklung des Soundex-Algorithmus, um den Algorithmus besser für die deutsche Sprache nutzen zu können. Entwickelte wurde das Modell der Kölner Phonetik von Hans Joachim Postel. Bei diesem Algorithmus wird jedem Zeichen eines Wortes eine Ziffer von 0 bis 8 zugeordnet. Bei der Bestimmung der entsprechenden Ziffer wird zusätzlich der folgende und der vorherige Buchstabe betrachtet. Im Gegensatz zum Soundex-Verfahren ist die Länge eines Codes nicht begrenzt; somit wird ein weiterer Nachteil des Soundex-Verfahrens ausgeglichen. Die Kodierung der Buchstaben erfolgt nach Tabelle 2.5. Das Ähnlichkeitsmaß ist analog zum SoundexBuchstaben A, E, I, J, O, U, Y H B P D, T F, V, W P G, K, Q C C X L M, N R S, Z C C C D, T X Kontext nicht vor H nicht vor C, S, Z vor H im Anlaut vor A, H, K, L, O, Q, R, U, X vor A, H, K, O, Q, U, X außer nach S, Z nicht nach C, K, Q nach S, Z im Anlaut außer vor A, H, K, L, O, Q, R, U, X nicht vor A, H, K, O, Q, U, X vor C, S, Z nach C, K, Q Code 0 1 1 2 3 3 4 4 4 48 5 6 7 8 8 8 8 8 8 Tabelle 2.5: Kodierung Kölner Phonetik Verfahren definiert als { 1, wenn SOU N DEX KOELN (i) = SOU N DEX KOELN (j) . 0, wenn SOU N DEX KOELN (i) ̸= SOU N DEX KOELN (j) (2.13) Der Algorithmus ist, bis auf die Längenbeschränkung der erzeugten Codes, analog zum Algorithmus des Soundex-Verfahren. Somit beträgt die Laufzeit mit den Bedingungen simsoundex koeln = 14 analog zum Soundex-Verfahren O(n) (2.14) Am folgenden Beispiel lässt sich erkennen, dass einige Nachteile des Soundex-Verfahrens ausgeglichen worden sind. Vergleich der Codes für die Wörter Hannover“, Hamburg“ ” ” und Homburg“ mit der Kölner Phonetik: ” • Hannover → 060307 • Hamburg → 061074 • Homburg → 061074 Der Nachteil, dass das Verfahren nicht unabhängig von der Sprache ist, bleibt allerdings auch bei diesem Verfahren erhalten. Bestimmung der Ähnlichkeit für die Strings Ostlandstraße“ und Otslandstraße“. ” ” A = Ostlandstraße B = Otslandstraße SOU N DEX(A) = 0825068270 SOU N DEX(B) = 085068270 simsoundex (A, B) = 0.0 2.5 Jaro-Distance Die Jaro-Distance[EIV2007] diente im ursprünglichen Sinn zum Vergleichen von Namen. Die Bestimmung des Ähnlichkeitsmaßes erfolgt nach folgendem Ansatz: seien A und B zwei Strings, bestimmt man die gemeinsamen Zeichen c mit A[i] = B[j] und |i − j| ≤ 1 min(|A|, |B|) 2 (2.15) Zusätzlich bestimmt man die Anzahl t der Transpositionen . Hierzu vergleicht man die Zeichen beider Strings an der i-ten Stelle. Unterscheiden sich die beiden Zeichen, wird die Transposition um 1 erhöht. Daraus ergibt sich folgendes Ähnlichkeitsmaß: ( ) c − 2t c c 1 + + (2.16) simjaro (A, B) := 3 |A| |B| c Der folgende Codeausschnitt in Pseudo-Code zeigt eine Implementierungsidee des Algorithmus zur Bestimmung eines Ähnlichkeitsmaßes mit Hilfe der Jaro-Distance. 15 1 jarodistance(String A, String B) { 2 for (i = 0 ; i <= A.length() ; i++ ) { 3 for (j = 0 ; j <= B.length() ; j++) { 4 if (A[i].equals(B[j])&&Math.abs(i - j) <= 0.5 * Math.min(A. length(), B.length())) { 5 c = c + 1; 6 } 7 if (i == j) { 8 if (A[i].equals(B[j])) { 9 t = t + 1; 10 } 11 } 12 } 13 } 14 return (1/3)*((c/A.length())+(c/B.length())+((c-(t/2))/c)); 15 } Algorithmus 2.3: Algorithmus zur Bestimmung der Jaro-Distance Seien A und B zwei Strings, für die gilt n = |A|, m = |B| sowie o.B.d.A. n <= m, dann folgt aus dem Algorithmus eine Laufzeit von O(n ∗ m) (2.17) für die Bestimmung der gemeinsamen Zeichen c und der Transpositionen. Vorteil des Jaro-Distance-Verfahren ist, dass sowohl die Reihenfolge der verwendeten Zeichen als auch der verwendete Zeichenvorrat eine Rolle spielt. Da das Verfahren nur die einzelnen Zeichen betrachtet, ist das Verfahren unabhängig von der verwendeten Sprache. Das folgende Beispiel zeigt die Anwendung der Jaro-Distance zur Bestimmung der Ähnlichkeit für die Strings Ostlandstraße“ und Otslandstraße“. Sei C die Menge ” ” der gemeinsamen Zeichen und sei T die Menge der Stellen, an denen sich die Strings unterscheiden. A = Ostlandstraße B = Otslandstraße C = {O, s, t, l, a, n, d, s, t, r, a, ß, e} c = 13 T = {2, 3} t=2 simjaro (A, B) = 0.9744 16 2.6 Field Similarity Beim Verfahren der Field Similarity[ZLBL2004] wird die Ähnlichkeit zweier Strings auf folgende Art und Weise bestimmt. Zuerst wird der Eingabestring in einzelne Zeichen zerlegt. Die einzelnen Zeichen werden anschließend mit der Häufigkeit, mit der das entsprechende Zeichen im String vorkommt, gekennzeichnet. Dies wird durch das folgende Beispiel zur Bestimmung der Ähnlichkeit für die Strings Ostlandstraße“ und Otsland” ” straße“ verdeutlicht. A = Ostlandstraße B = Otslandstraße TA = {O1, s1, t1, l1, a1, n1, d1, s2, t2, r1, a2, ß1, e1} TB = {O1, t1, s1, l1, a1, n1, d1, s2, t2, r1, a2, ß1, e1} Um das Ähnlichkeitsmaß zu bestimmen, bestimmt man zunächst den Schnitt der Mengen, die aus den einzelnen Zeichen bestehen. Hierfür seien A und B zwei Strings und seien TA und TB die Mengen der einzelnen Zeichen der beiden Strings. Daraus folgt: ( ) |TA ∩ TB | |TA ∩ TB | simF ieldSimilarity (A, B) := min , (2.18) |TA | |TB | Für das o. g. Beispiel ergibt sich: TA ∩ TB = {O1, s1, t1, l1, a1, n1, d1, s2, t2, r1, a2, ß1, e1} simF ieldSimilarity (A, B) = 1.0 Der Algorithmus zur Bestimmung des Ähnlichkeitsmaß für zwei Strings ist in folgendem Code-Ausschnitt dargestellt. 1 fieldsimilaritydistance(String A, String B) { 2 public static int subStringLengthConst = 1; 3 4 public static HashMap<String, Integer> map = new HashMap<String, Integer>(); 5 6 public static double similarity(String a, String b) { 7 8 HashSet<String> tokenA = getToken(a); 9 HashSet<String> tokenB = getToken(b); 10 tokenA.retainAll(tokenB); 11 double n1 = tokenA.size(); 12 if ((a != null)&&(b != null)) { 13 return (double) Math.min(n1 / a.length(), n1 / b.length()); 14 } else { 17 15 return 0.0; 16 } 17 } 18 public static HashSet<String> getToken(String eingabe) { 19 HashSet<String> token = new HashSet<String>(); 20 HashMap<String, Integer> count = new HashMap<String, Integer>(); 21 for (int i = 0; i < eingabe.length() - subStringLengthConst + 1; i = i + subStringLengthConst) { 22 if (token.add(eingabe.substring(i, i + subStringLengthConst)+"1 ")){ 23 count.put(eingabe.substring(i, i + subStringLengthConst), 1) ; 24 System.out.println(eingabe.substring(i, i + subStringLengthConst)+"1"); 25 } 26 else { 27 int aktCount = count.get(eingabe.substring(i, i + subStringLengthConst)) + 1; 28 count.remove(eingabe.substring(i, i + subStringLengthConst)) ; 29 token.add(eingabe.substring(i, i + subStringLengthConst) + aktCount); 30 count.put(eingabe.substring(i, i + subStringLengthConst), aktCount); 31 System.out.println(eingabe.substring(i, i + subStringLengthConst)+ aktCount); 32 } 33 } 34 return token; 35 } 36 } Algorithmus 2.4: Algorithmus zur Bestimmung der Field-Similarity-Distance Zur Bestimmung der Laufzeit sei |A| = n und |B| = m. Damit dauert die Erzeugung der Token O(n) bzw. O(m). (2.19) Die beiden verschachtelten FOR-Schleifen zur Berechnung des Schnittes der Tokenmengen führen zu einer Laufzeit von O(n ∗ m). (2.20) Somit ergibt sich eine Gesamtlaufzeit von O(n + m + n ∗ m). 18 (2.21) Vorteil des Verfahrens ist, das es unabhängig von der verwendeten Sprache ist. Ein weiterer Vorteil ist, dass das Verfahren unabhängig von der Eingabereihenfolge der Zeichen ist. Dadurch werden z.B. Buchstabendreher, wie im o.g. Beispiel, erkannt. Hierdurch entsteht aber ein Nachteil des Verfahrens, wenn nämlich zwei Strings aus demselben Zeichenvorrat, wie z. B. rosenbusch“ und buschrosen“, bestehen. ” ” 2.7 Q-Grams Beim Q-Grams-Verfahren wird der Eingabe-String in Teilstrings der Länge q zerlegt. Anfangs- und Endzeichen werden durch ein Zeichen, das außerhalb des verwendeten Alphabets liegt, besonders gekennzeichnet. Häufig verwendet werden die Zeichen $“ ” und #“. Die Markierung der Anfangs- und Endzeichen sollen an einem kurzen Bei” spiel für 2-Grams deutlich gemacht werden. Sei A ein String der Länge n und A = Programmiersprache. Beim Q-Gram-Verfahren wird der Eingabestring am Anfang und am Ende um das Zeichen zur Kennzeichnung des Anfangs- bzw. des Endzeichens erweitert. Daraus ergibt sich A′ = $Programmiersprache$. Über diesen String werden nun die Teilstrings der Länge q gebildet und mit der Anzahl, wie oft ein Teilstring in der Menge der Teilstrings vorkommt, gekennzeichnet. Sei TA die Menge der Teilstrings, die aus A′ gebildet werden. TA = {$P 1, P r1, ro1, og1, gr1, ra1, am1, mm1, mi1, ie1, er1, rs1, sp1, pr1, ra2, ac1, ch1, he1, e$1} Das Ähnlichkeitsmaß wird auf folgende Art und Weise berechnet. Seien A und B zwei Strings und TA und TB die Mengen der Teilstrings von A bzw. B. Das Ähnlichkeitsmaß wird dann mit Hilfe des Jaccard-Koeffizienten1 berechnet. Daraus ergibt sich: simQ−Grams (A, B) := |TA ∩ TB | |TA ∪ TB | (2.22) Der Algorithmus zur Bestimmung des Ähnlichkeitsmaß für zwei Strings ist analog zum Algorithmus des Field-Similarity-Verfahrens. Da der Algortihmus analog zum Field-Similarity-Verfahren aufgebaut ist, ergibt sich ebenfalls eine Laufzeit von O(a + a ∗ b). (2.23) Vorteil des Verfahrens ist, dass Strings der Art Hans Peter“ und Peter Hans“ als ähn” ” lich angesehen werden. Trotzdem wird die Reihenfolge der Zeichen im Eingabestring berücksichtigt, allerdings nur im Kontext der umliegenden Zeichen. Ein weiterer Vorteil 1 Der Jaccard-Koeffizient bestimmt die Ähnlichkeit von zwei Mengen. Er geht auf den Schweizer Botaniker Paul Jaccard zurück. 19 ist, dass das Verfahren unabhängig von einer Sprache ist, da nur die Zeichen und nicht Aussprache und Klang betrachtet werden. Die folgenden Beispiele stellen die Funktionsweise des Q-Grams-Verfahren dar: 2-Grams Bestimmung der Ähnlichkeit für die Strings Ostlandstraße“ und Otslandstraße“. ” ” A = Ostlandstraße B = Otslandstraße TA = {$O1, Os1, st1, tl1, la1, an1, nd1, ds1, st2, tr1, ra1, aß1, ße1, e$1} TB = {$O1, Ot1, ts1, sl1, la1, an1, nd1, ds1, st1, tr1, ra1, aß1, ße1, e$1} TA ∩ TB = {$O1, la1, an1, nd1, ds1, st1, tr1, ra1, aß1, ße1, e$1} TA ∪ TB = {$O1, Ot1, ts1, sl1, Os1, st1, tl1, la1, an1, nd1, ds1, st2, tr1, ra1, aß1, ße1, e$1} simQ−Grams (A, B) = 0.6875 3-Grams Bestimmung der Ähnlichkeit für die Strings Ostlandstraße“ und Otslandstraße“. ” ” A = Ostlandstraße B = Otslandstraße TA = {$Os1, Ost1, stl1, tla1, lan1, and1, nds1, dst1, str1, tra1, raß1, aße1, ße$1} TB = {$Ot1, Ots1, tsl1, sla1, lan1, and1, nds1, dst1, str1, tra1, raß1, aße1, ße$1} TA ∩ TB = {lan1, and1, nds1, dst1, str1, tra1, raß1, aße1, ße$1} TA ∪ TB = {$Os1, Ost1, stl1, tla1, lan1, and1, nds1, dst1, str1, tra1, raß1, aße1, ße$1, $Ot1, Ots1, tsl1, sla1} simQ−Grams (A, B) = 0.5294 2.8 N-Gramme Die N-Gramme-Verfahren[LN2007] ähneln sich in seiner Struktur dem Q-Grams-Verfahren. Auch beim N-Gramme-Verfahren werden Anfangs- und Endzeichen besonders gekennzeichent. Im Gegensatz zum Q-Grams-Verfahren werden beim N-Gramme-Verfahren sogenannte Rand-N-Gramme[LN2007] gebildet. Die Rand-N-Gramme sind die Teilstrings des Eingabestrings, die das Zeichen zum Kennzeichnen von Anfangs- und Endzeichen enthalten. Dazu wird der Eingabestring am Anfang und am Ende um (n − 1)-mal $“2 ” 2 Sei $ das verwendete Zeichen, um Anfangs- und Endzeichen zu kennzeichnen. 20 erweitert. Somit ergibt sich aus dem Eingabestring A zu A′′ = $$Ostlandstraße$$. Anschließend werden die Teilstrings der Länge n gebildet. So ergibt sich: TA = {$$O, $Os, Ost, stl, tla, lan, and, nds, dst, str, tra, raß, aße, ße$, e$$} Das Ähnlichkeitsmaß wird auf die folgende Art und Weise berechnet: seien A und B zwei Strings und TA und TB die Mengen der Teilstrings von A bzw. B. Das Ähnlichkeitsmaß wird dann mit Hilfe des Jaccard-Koeffizienten3 berechnet. Daraus ergibt sich: simN −Gramme (A, B) := |TA ∩ TB | |TA ∪ TB | (2.24) Der Algorithmus zur Bestimmung des Ähnlichkeitsmaß für zwei Strings ist analog zum Algorithmus des Field-Similarity-Verfahrens. Da der Algortihmus analog zum Field-Similarity-Verfahren aufgebaut ist, ergibt sich ebenfalls eine Laufzeit von O(a + a ∗ b). (2.25) Vorteil beider Verfahren ist, dass Strings der Art Hans Peter“ und Peter Hans“ als ” ” ähnlich angesehen werden. Trotzdem wird die Reihenfolge der Zeichen im Eingabestring berücksichtigt, allerdings nur im Kontext der umliegenden Zeichen. Ein weiterer Vorteil ist, dass das Verfahren unabhängig von einer Sprache ist, da nur die Zeichen und nicht Aussprache und Klang betrachtet werden. Die folgenden Beispiele stellen die Funktionsweise des N-Gramme-Verfahren dar. 2-Gramme(N-Gramme) Bestimmung der Ähnlichkeit für die Strings Ostlandstraße“ und Otslandstraße“. ” ” A = Ostlandstraße B = Otslandstraße TA = {$O, Os, st, tl, la, an, nd, ds, st, tr, ra, aß, ße, e$} TB = {$O, Ot, ts, sl, la, an, nd, ds, st, tr, ra, aß, ße, e$} TA ∩ TB = {$O, la, an, nd, ds, st, tr, ra, aß, ße, e$} TA ∪ TB = {$O, Os, st, tl, la, an, nd, ds, st, tr, ra, aß, ße, e$, Ot, ts, sl} simQ−Grams (A, B) = 0.7059 3 Der Jaccard-Koeffizient bestimmt die Ähnlichkeit von zwei Mengen. Er geht auf den Schweizer Botaniker Paul Jaccard zurück. 21 3-Gramme(N-Gramme) Bestimmung der Ähnlichkeit für die Strings Ostlandstraße“ und Otslandstraße“. ” ” A = Ostlandstraße B = Otslandstraße TA = {$$O, $Os, Ost, stl, tla, lan, and, nds, dst, str, tra, raß, aße, ße$, e$$} TB = {$$O, $Ot, Ots, tsl, sla, lan, and, nds, dst, str, tra, raß, aße, ße$, e$$} TA ∩ TB = {$$O, lan, and, nds, dst, str, tra, raß, aße, ße$, e$$} TA ∪ TB = {$$O, $Os, Ost, stl, tla, lan, and, nds, dst, str, tra, raß, aße, ße$, e$$, $Ot, Ots, tsl, sla} simQ−Grams (A, B) = 0.5789 2.9 Fazit Im zurückliegenden Kapitel wurden acht Ähnlichkeitsmaße vorgestellt und analysiert. Die Verfahren Soundex und Kölner Phonetik eignen sich nur bedingt nur Berechnung von Matchings, da bei diesen Verfahren als Ähnlichkeitswerte nur 1.0 und 0.0 zurückgegeben werden. Dies geschieht auch nur, wenn der erzeugte Code für beide Eingabestrings identisch ist. Aufgrund der vorgestellten Eigenschaften ist das Soundex-Verfahren großzügiger, was die Auswahl an ähnlichen Strings angeht. Die weiteren, vorgestellten Verfahren eignen sich, um Matchings zu bestimmen. Aufgrund der vorgestellten Eigenschaften der Verfahren ist es von Vorteil, wenn mehrere Verfahren zum Einsatz kommen, da so die Nachteile eines Verfahrens durch ein anderes Verfahren ausgeglichen werden können. An dieser Stelle gilt es, geeignete Kombinationsverfahren für Ähnlichkeitsmaße zu betrachten und zu analysieren. 22 Kapitel 3 Kombination von Algorithmen für die Duplikaterkennung Dieses Kapitel stellt Ideen zur Kombination von Algorithmen vor. Dies ist notwendig, da alle Algorithmen Vor- und Nachteile aufweisen und diese durch eine geschickte Kombination der verschiedenen Algorithmen ausgeglichen werden können. Im folgenden werden drei Ansätze vorgestellt. Die drei Ansätze unterscheiden sich grundsätzlich in der Kombination der verschiedenen Algorithmen. Deshalb ist zuerst eine grundsätzliche Entscheidung zu treffen, in welcher Art und Weise die Algorithmen kombiniert werden. Das Ziel der Ansätze ist für alle dasselbe: es sollen möglichst alle Paare von Matchings gefunden werden, die in der realen Welt dasselbe Objekt beschreiben. 3.1 Hintereinander-Ausführung von Algorithmen Abbildung 3.1 zeigt eine Kombination von Algorithmen, bei der zuerst ein Algorithmus auf der Grundmenge ausgeführt wird. Die daraus resultierenden Ergebnisse werden dann mit mindestens einem weiteren Algorithmus verifiziert. Der erste Algorithmus dient hierbei zur Grobsortierung. Daher ist ein Algorithmus zu wählen, bei dem mögliche Kandidaten erhalten bleiben und Elemente, die für eine Auswahl auf jeden Fall nicht in Betracht kommen, eliminiert werden. Der zweite bzw. alle weiteren Algorithmen dienen zur Verfeinerung der Ergebnisse und kontrollieren gleichzeitig die Ergebnisse des vorherigen Algorithmus. Die Implementation dieses Ansatzes ist relativ einfach, da die Struktur der Eingabe und Ausgabe für alle Algorithmen identisch ist. Zu beachten ist hier, dass für jeden Algorithmus ein geeigneter Schwellenwert für das zu bestimmende Ähnlichkeitsmaß gewählt werden muss. Die Algorithmen können in beliebiger Reihenfolge kombiniert werden und die Kombination hängt nur vor den Eigenschaften des von den Algorithmen berechnetem Ähnlichkeitsmaß ab. Nachteil dieses Ansatz ist, dass Ele- 23 mente, die von einem Algorithmus entfernt werden, nicht für eine weitere Analyse in Betracht kommen. Dies wird dann zum Nachteil, wenn sog. false-negatives“ von einem ” Algorithmus erkannt werden.Aus dem Aspekt, dass ein vorheriger Algorithmus bereits Daten entfernt hat, folgt ebenfalls, dass nicht das komplette Wissen aller Algorithmen genutzt werden kann. Start Tabelle 1 Ähnlichkeitsmaß 1 Tabelle 2 Maß > x1 Ähnlichkeitsmaß 2 Maß > x2 Mögliche Synonyme Abbildung 3.1: Kombination von Ähnlichkeitsmaßen - nacheinander 3.2 Parallele-Ausführung von Algorithmen Abbildung 3.2 zeigt eine Kombination von Algorithmen, bei der die Algorithmen parallel ausgeführt werden. Ausgehend von derselben Datenquelle, berechnet zunächst jeder 24 Algorithmus seine“ Ergebnisse. Dabei wird das Wissen aller verwendeten Algorithmen ” genutzt. Nach der Berechnung der Ergebnisse der einzelnen Algorithmen werden diese Ergebnisse ausgewertet und die entsprechenden Datensätze ausgewählt. Hierfür gilt es, für jeden Algorithmus ein geeigenten Schwellenwert für das jeweilige Ähnlichkeitsmaß zu bestimmen. Durch die parallele Berechnung der einzelnen Algorithmen können alle Algorithmen verwendet werden bzw. kombiniert werden. Daraus folgt, dass die Nachteile und die Fehler der einzelnen Algorithmen durch die anderen Algorithmen ausgeglichen werden und zusätzlich ein breit gefächertes Maß zur Anwendung kommt. Im Gegensatz zum Ansatz aus Kap. 3.1 steht das Ergebnis nicht nach den Berechnung der einzelnen Algorithmen fest, sondern die berechneten Ergebnisse der einzelnen Algorithmen müssen zu einen Gesamtergebnis zusammengeführt werden. Hierfür gilt es eine geeignete Heuristik zu entwickeln, die in Abhängigkeit der verwendeten Algorithmen und berechneten Ergebnissen das Gesamtergebnis berechnet. Start Tabelle 1 Tabelle 2 Ähnlichkeitsmaß 1 Ähnlichkeitsmaß 2 Maß > x1 Maß > x2 Mögliche Synonyme Abbildung 3.2: Kombination von Ähnlichkeitsmaßen - parallel 3.3 Kombination über die Länge von Vektoren Bei diesem Verfahren wird die Kombination der Ähnlichkeitsmaße über die Länge eines Vektors bestimmt. Bei der Verwendung von n Ähnlichkeitsmaßen erfolgt die Betrach- 25 tung im n-dimensionalen Raum. Somit steht jede Dimension für ein Ähnlichkeitsmaß. Für ein Stringpaar wird zunächst unabhängig voneinander der Ähnlichkeitswert für jedes der verwendeten Ähnlichkeitsmaße berechnet. Diese Ähnlichkeitswerte repräsentieren die einzelnen Komponenten des Vektors. Abbildung 3.3 zeigt die generelle Vorgehensweise des Verfahrens. Die Länge des Vektor wird folgendermaßen bestimmt: sei xi der Ähn- Ähnlichkeitsmaß 2 1 Ähnlichkeitsmaß 1 1 Abbildung 3.3: Kombination über die Länge von Vektoren lichkeitswert für ein Stringpaar A und B, der mit dem i-ten Ähnlichkeitsmaß berechnet wurde und n die Anzahl der verwendeten Ähnlichkeitsmaße. Die Länge der Vektoren wird auf die Länge des Einheitsvektors der entsprechenden Dimension normiert. Abbildung 3.4 stellt beispielhaft die Anwendung von zwei Ähnlichkeitsmaßen dar. √∑n x2 √i=1 i simV ektor (A, B) := (3.1) n 3.4 Fazit Abschließend ist als Erstes auszuführen, dass alle drei Ansätze Ergebnisse liefern und diese auch verwendet werden können. Allerdings unterscheidet sich die Struktur der Ergebnisse bei der Verwendung derselben Ähnlichkeitsmaße und Grenzwerte doch stark. 26 Start Tabelle 1 Ähnlichkeitsmaß 1 Tabelle 2 Ähnlichkeitsmaß 2 Berechnung Vektorlänge Maß > x Mögliche Synonyme Abbildung 3.4: Kombination über die Länge von Vektoren Beim Ansatz im Kapitel 3.1 sind die Ergebnisse sehr stark von der Reihenfolge, in der die Ähnlichkeitsmaße kombiniert werden, geprägt. Das im Kapitel 3.2 beschriebene Verfahren führt in der Regel zu zuvielen Ergebnisse, es sei denn, bei den nicht so restritiven Ähnlichkeitsmaßen wird ein geeigneter Grenzwert festgelegt. Die im letzten Abschnitt vorgestellte Technik ist die über alle Algortihmen gesehen fairste“ Variante, da alle ” verwendeten Maße gleichermaße in das Maß eingehen. 27 Kapitel 4 Sorted Neighborhood Methode(SNM) Nachdem die Algorithmen zum Berechnen eines Ähnlichkeitsmaßes und zur Kombination dieser Algorithmen vorgestellt wurden, wird in diesem Kapitel ein Verfahren zur schnelleren Berechnung von Matchings über eine Datenquelle beschrieben. Der einfachste Ansatz wäre die Brute-Force-Strategie. Allerdings ist diese Strategie sehr langsam, da jedes Element mit jedem Element verglichen wird. Daraus definiert sich das Verfahren der Sorted Neighborhood Methode. Das Verfahren der Sorted Neighborhood Methode[LN2007] ist ein Ansatz, um die Berechnung von ähnlichen Datensätzen bei einem bestimmten Schwellenwert zu beschleunigen. Dies bedeutet, dass auf geeignete Art und Weise die Anzahl der Vergleiche, die durchgeführt werden, reduziert wird. Hierzu gilt es eine Vorauswahl zu treffen, mit der die Tupel bestimmt werden, die noch verglichen werden. Ausgangspunkt für diese Reduzierung ist die Brute-Force-Strategie, also der Vergleich jedes Tupels mit jedem Tupel. Wie der Name des Verfahrens schon aussagt, betrachtet man die Tupel, die in der Nachbarschaft liegen und nutzt diese dann als Quelle für die Vergleiche. Hierzu gliedert sich das Verfahren in drei Phasen: 1. Schlüsselbildung 2. Sortierung 3. Vergleiche Im Folgenden werden die Phasen einzeln vorgestellt. In der Phase der Schlüsselbildung gilt es, zunächst einen geeigneten Schlüssel zu wählen. Dieser Schlüssel ist als Sequenz der relevanten Attribute definiert und verweist auf den ursprünglichen Datensatz. Die Wahl des Schlüssels sollte durch einen Experten erfolgen. In der zweiten Phase, 29 der Sortierung, werden die Schlüssel alphabetisch sortiert, so dass ähnliche Datensätze nahe beieinander liegen. Hierfür ist eine geeignete Schlüsselwahl von entscheidender Bedeutung. Der Schlüssel ist so zu wählen, dass nach der Sortierung ähnliche Datensätze möglichst nahe zusammenliegen und nicht ähnliche Datensatz möglichst weitauseinander liegen. Dabei ist zu beachten, dass, wenn Elemente aus dem Schlüssel der Tabelle für den Schlüssel der Sorted-Neighborhood-Methode gewählt werden, die Sortierung sehr stark von diesem Element geprägt ist. Ebenso ist zu beachten, dass die Anzahl der Elemente, die von einem Schlüssel repräsentiert werden, maximal gleich der in der dritten Phase gewählten Fenstergröße ist. In der letzten Phase Vergleiche werden die geeigneten Datensätze ausgewählt. Dazu wird ein Fenster der Größe m mit (2 ≤ m ≤ n) über die Datensätze(Anzahl Datensätze = n) geschoben. Alle Datensätze, die sich innerhalb des Fensters befinden, werden paarweise verglichen. Die Grafik 4.1 verdeutlicht das Vorgehen. Der rote Bereich stellt das Fenster in der Ausgangssituation dar. Der blaue und der grüne Bereich zeigen das Fenster im zweiten bzw. dritten Schritt des Algorithmus. Hierzu 0 … … … 1 … … … 2 … … … 3 … … … 4 … … … 5 … … … 6 … … … 7 … … … 8 … … … 9 … … … 10 … … … 11 … … … 12 … … … 13 … … … 14 … … … Abbildung 4.1: Sorted Neighborhood Methode - Verschieben des Fensters wird ein geeignetes Ähnlichkeitsmaß gewählt, mit dem die entsprechenden Datensätze 30 verglichen werden. Anschließend wird das Fenster um einen Datensatz weiter geschoben. Dies wird solange wiederholt bis die obere Grenze des Fensters den letzten Datensatz erreicht. Der Ablauf des Ansatzes der dritten Phase des Sorted-Neighborhood-Methode lässt sich durch folgenden Codeausschnitt in Pseudo-Code darstellen. 1 vergleiche() { 2 double grenzwert = 0.9; 3 List ergebnis; 4 List tupel \\ Datenbanktabelle 5 for (i = 0 ; i < fensterbreite ; i++) { 6 for (j = i + 1 ; j < fensterbreite ; j++) { 7 if (similarity(tupel.get(i),tupel.get(j)) >= grenzwert) { 8 ergebnis.add(tupel.get(i), tupel.get(j), similarity(tupel .get(i),tupel.get(j))); 9 } 10 } 11 } 12 for (i = fensterbreite ; i < AnzahlDatensätze ; i++) { 13 for (j = i - fensterbreite ; j < i ; j++) { 14 if (similarity(tupel.get(i),tupel.get(j)) >= grenzwert) { 15 ergebnis.add(tupel.get(i), tupel.get(j), similarity(tupel .get(i),tupel.get(j))); 16 } 17 } 18 } 19 } Algorithmus 4.1: Algorithmus der Sorted-Neighborhood-Methode Die Laufzeit des Algorithmus setzt sich aus der Laufzeit der drei Phasen zusammen. In der ersten Phase werden alle Datensätze einmal durchlaufen und in jedem Schritt der entsprechende Schlüssel berechnet. Somit ergibt sich für die erste Phase eine Laufzeit von O(n). (4.1) Die alphabetische Sortierung lässt sich mit Algorithmen, wie z. B. Quicksort, in einer Laufzeit von O(n log n) (4.2) realisieren. In der letzten Phase Vergleiche“ müssen zunächst die ersten m Datensätze ” paarweise verglichen werden. Anschließend wird das Fenster jeweils einen Datensatz weiter geschoben. Somit fällt genau ein Datensatz aus dem Fenster heraus und es wird ein Datensatz neu aufgenommen. Dieser neue Datensatz muss mit den verbliebenen m−1 Datensätzen verglichen werden. Daraus folgt eine Laufzeit von: O(m2 + (n − m) ∗ m) = O(m ∗ n). 31 (4.3) Die Laufzeit des gesamten Algorithmus beträgt O(n + n ∗ log n + m ∗ n). (4.4) Vorteil der Sorted-Neighborhood-Methode ist, dass die Vergleiche der Datensätze in linearer Zeit zu berechnen sind. Nachteil der Sorted-Neighborhood-Methode ist, dass die Qualität der Ergebnisse stark von der Wahl des Schlüssels abhängig ist. Erhalten z. B. zwei eigentlich ähnliche Datensätze einen Schlüssel, bei dem sie nach der Sortierung weit auseinanderliegen, werden sie für einen möglichen Vergleich gar nicht erst in Betracht gezogen. Weitere Vor- und Nachteile ergeben sich aus dem verwendeten Ähnlichkeitsmaß zur Berechnung der Vergleiche. 32 Kapitel 5 Experimente Im diesem Kapitel werden die Algorithmen und möglichen Kombinationen der Algorithmen anhand der verschiedenen Datenquellen getestet und bewertet. Anschließend soll dadurch eine Auswahl der möglichen Strategie für die spätere Implementierung getroffen werden. Im ersten Teil des Kapitels werden Bewertungskriterien für die verschiedenen Experimente vorgestellt und erläutert. Danach folgen die Experimente, ihre Ergebnisse und eine Bewertung der Ergebnisse. 5.1 Bewertungskriterien der Algorithmen Im nachfolgenden Teil werden verschiedene Ansätze für eine mögliche, spätere Implementierung getestet. Um die Ansätze bewerten zu können, werden zwei Kriterien[LN2007] eingeführt, die maßgebend für die Qualität der Ergebnisse seien sollen. Es handelt sich hierbei um die Effektivität und um die Effizienz. Beide Kriterien werden im folgenden dargestellt. Für die Betrachtung der Effektivität werden zwei Maße eingeführt. Es handelt sich hierbei um Precision“ und um Recall“. Abschließend wird noch eine Kombinations” ” möglichkeit der beiden Maße vorgestellt. Die Algorithmen liefern als Ergebnisse Paare von möglichen Matchings, die aufgrund ihrer Ähnlichkeit zueinander erkannt worden sind. Jedes Paar lässt sich in eine der folgenden vier Kategorien einteilen. 1. True-Positives: Paare, die korrekt als Matching erkannt werden. 2. True-Negatives: Paare, die korrekt als Nicht-Matching erkannt werden. 33 3. False-Positives: Paare, die fälschlicherweise als Matching erkannt werden. 4. False-Negatives: Paare, die fälschlicherweise als Nicht-Matching erkannt werden. Der Zusammenhang der verschiedenen Kategorien wird durch die Abbildung 5.1 verdeutlicht. Das erste Maß Precision“ misst den Anteil der vom Algorithmus als Matching ” Algorithmus Matching kein Matching Realität Matching kein Matching true-positive false-positive false-negative true-negativ Tabelle 5.1: Klassen von Paare erkannten Paare. Daraus folgt, dass, je höher der Precision-Wert ist, desto mehr können die vom Algorithmus als Matching erkannte Paare auch als solche angenommen werden. Das Maß ist nach folgender Formel definiert. precision = |true-positives| |true-positives| + |f alse-positives| (5.1) Das zweite Maß Recall“ misst, wie viele Matchings vom Algorithmus erkannt werden, die ” auch in der realen Welt als Matchings definiert sind. Aus der Definition der Formel folgt, dass je höher der Recall-Wert ist, desto mehr tatsächliche Matchings werden erkannt und desto mehr Nicht-Matchings werden erkannt. recall = |true-positives| |true-positives| + |f alse-negatives| (5.2) Ziel ist es, für beide Maße einen möglichst hohen Wert zu erzielen. Dabei ist allerdings zu beachten, dass für beide Maße gilt, dass eine Verbesserung des einen Maßes immer auf Kosten einer Verschlechterung des anderen Maßen erfolgt. Daraus folgt, dass um die Güte des verwendeten Algorithmus zu bestimmen, in der Regel eine Kombination der beiden Maße verwendet wird. Es handelt sich hierbei um das harmonische Mittel des Precision- und des Recall-Wertes. Sie ist auf folgende Art und Weise definiert: f -measure = 2 ∗ recall ∗ precision recall + precision (5.3) Die Effizienz der Algorithmen wird in Abhängigkeit der Laufzeit der Algorithmen sowie in Abhängigkeit der daraus resultierenden Tupel betrachtet. Bei den verwendeten Algorithmen ist vor allem die Anzahl der verwendeten Vergleiche maßgebend. Die Effizienz wird zunächst als erstes Kriterium genommen, da eine viel zu lange Laufzeit für die Implementation nicht zur Anwendung kommen darf. Für Algorithmen, die mit einer hinreichenden Verringerung der Laufzeit arbeiten, wird anschließend auch die Effektivität betrachtet. 34 5.2 Experimente: Analyse der Brute Force Strategie In diesem Abschnitt des Kapitels werden Algorithmen, bzw. Ansätze zur Verwendung dieser Algorithmen bzgl. ihrer Effizienz und ihrer Effektivität getestet und analysiert. Als Erstes soll versucht werden, das Ergebnis mit Hilfe eines Brute-Force-Ansatzes zu berechnen. Hierzu ist erforderlich, dass jedes Tupel mit jedem Tupel anhand eines Ähnlichkeitsmaßes verglichen wird und anschließend die gefundenen Paare anhand eines Grenzwertes ausgewählt werden. Als Datenquelle dient die Tabelle PI.Schlagwort“. Die Datenquelle ” ist nach folgendem relationalem Modell aufgebaut: ( SCHRIF T schrif t, autornull , titel, schrif ttyp, schrif ttyp erg null , (5.4) datumnull , abteilung null , anm1null , anm2null , url1null , url2null , ) doknrnull , erf datumnull ( ) SCHLAGW ORT schrif t → SCHRIF T, schlagwort, personnull , prioritaetnull Als erstes stellt sich die Frage, wie viele Tupel enthält die Tabelle bzw. wie viele einzelne Schlagworte sind zu betrachten? Die Durchführung der SQL-Anfrage 5.1 liefert als Ergebnis, dass die Tabelle 11769 verschiedene Schlagwörter enthält. 1 SELECT count(distinct schlagwort) 2 FROM PI.schlagwort Algorithmus 5.1: Test: Analyse Schlagwort-Tabelle Somit würden sich für einen Brute-Force-Ansatz 138.509.361 Join-Paare ergeben. Für diese Paare müssten anschließend jeweils ein Ähnlichkeitsmaß berechnet werden und abschließend die Ergebnisse nach einem bestimmten Grenzwert gefiltert werden. Zur Analyse der Laufzeit des Brute-Force-Ansatzes wird ein Ausschnitt aus der Schlagworttabelle verwendet. Es handelt sich um 200 Tupel(ca. 1,7 % der Gesamtdaten), die aus der Tabelle ausgewählt worden sind. Somit ergeben sich 40000(ca. 0,03 % der Gesamtdaten) Join-Paare. Anschließend sollen die Ergebnisse auf die gesamte Tabelle hochgerechnet werden. Der Ausschnitt ist nach folgendem relationalem Modell aufgebaut: SM ALLT ABLE (source, key) (5.5) 1 SELECT max(ed) 2 FROM (SELECT t1.source, t2.source, GETEDITDISTANCE(t1.source, t2. source) as ed 3 FROM SMALLTABLE t1, SMALLTABLE t2) Algorithmus 5.2: Test: Analyse Brute-Force-Ansatz - 200 Tupel - 1 Ähnlichkeitsmaß 35 Ähnlichkeitsmaß Edit-Distance Damerau-Levenshtein-Distance N-Gramme Q-Gramme Field Similarity Laufzeit 8,500 sec 21,885 sec 4,906 sec 3,44 sec 6,066 sec Hochrechnung 29433 sec ≈ 490 min. 75782 sec ≈ 1263 min. 16988 sec ≈ 283 min. 11912 sec ≈ 199 min. 21005 sec ≈ 350 min. Tabelle 5.2: Ergebnis: Wie lange dauert die Berechnung des Brute-Force-Ansatzes mit 200 Tupeln für ein Ähnlichkeitsmaß? Die Ausführung des Algorithmus 5.2 liefert für die verschiedenen Ähnlichkeitsmaße die Ergebnisse, die in Tabelle 5.2 dargestellt sind. Da die Berechnung der 40000 Tupel 8,500 sec dauert, ergibt sich als Hochrechnung für die gesamte Tabelle eine Laufzeit von mind. 29433 sec (≈ 490 min.). Diese Laufzeit genügt nicht den Ansprüchen an eine effiziente Berechnung der Ergebnisse. Für die Berechnung mit mehreren Ähnlichkeitsmaßen(Algorithmus 5.3) ist ebenfalls eine mindestens genauso lange, eher längere Laufzeit zu erwarten. 1 SELECT min(ed) 2 FROM (SELECT t1.source, t2.source, sqrt(power(GETEDITDISTANCE(t1. source, t2.source),2) + power(GETNGRAMME(t1.source, t2.source),2) ) / sqrt(2) as ed 3 FROM SMALLTABLE t1, SMALLTABLE t2) Algorithmus 5.3: Test: Analyse Brute-Force-Ansatz - 200 Tupel - 2 Ähnlichkeitsmaße Ähnlichkeitsmaß Edit-Distance + N-Gramme Edit-Distance + Q-Gramme Edit-Distance + Field Similarity Laufzeit 12,897 sec 12,537 sec 14,784 sec Hochrechnung 44659 sec ≈ 744 min. 43412 sec ≈ 723 min. 51193 sec ≈ 853 min. Tabelle 5.3: Ergebnis: Wie lange dauert die Berechnung des Brute-Force-Ansatzes mit 200 Tupeln mit zwei Ähnlichkeitsmaßen? Wie in Tabelle 5.3 erkennbar, steigt die Laufzeit der Algorithmen erwartungsgemäß. Für die Verwendung der verschiedenen Ähnlichkeitsmaße ergibt sich, dass sich die Laufzeit eines Algorithmus mit mehr als einem Ähnlichkeitsmaß aus der Addition der Laufzeit der Algorithmen mit der Verwendung von einem Ähnlichkeitsmaß ergibt. Aus beiden Experimenten folgt, dass die Brute-Force-Strategie nicht effizient genug ist. Ist gilt daher, die Anzahl der Vergleiche zu reduzieren, um die Laufzeit der Algorithmen zu minimieren. Die Anzahl der Vergleiche lässt sich reduzieren, in dem man die zu vergleichenden Tupel vor dem eigentlich Vergleich nach bestimmten Kriterien sortiert. Die folgenden Experimente zeigen die Anwendung von verschiedenen Kriterien. Als Ähnlichkeitsmaß kommt bei allen Experimenten die Edit-Distance zur Anwendung, da bei 36 der Verwendung der Edit-Distance die kürzestes Laufzeit aller Ähnlichkeitsmaße erzielt wird. Als Datenquelle wird auch bei diesen Experimenten ein kleinerer Ausschnitt aus der Tabelle PI.SCHLAGWORT verwendet. 1. Es werden nur Strings mit gleichem Anfangsbuchstaben verglichen. 2. Es werden nur Strings verglichen, bei denen die ersten zwei Buchstaben identisch sind. 3. Es werden nur Strings mit der selben Länge verglichen. 4. Es werden nur Strings verglichen, deren Länge sich um +/- 1 unterscheiden. 5. Es werden nur Strings verglichen, die durch den selben Soundex repräsentiert werden. Die folgenden Experimente zeigen die Anwendung der oben erwähnten Strategien. 1 select max(ed) 2 from ( 3 select t1.source, t2.source, GETEDITDISTANCE(t1.source, t2.source) as ed 4 from SMALLTABLE t1, SMALLTABLE t2 5 where substr(t1.source,1,1) = substr(t2.source,1,1)) Algorithmus 5.4: Es werden nur Strings mit gleichem Anfangsbuchstaben verglichen. 1 select max(ed) 2 from ( 3 select t1.source, t2.source, GETEDITDISTANCE(t1.source, t2.source) as ed 4 from SMALLTABLE t1, SMALLTABLE t2 5 where substr(t1.source,1,2) = substr(t2.source,1,2)) Algorithmus 5.5: Es werden nur Strings verglichen, bei denen die ersten zwei Buchstaben identisch ist. 1 select max(ed) 2 from ( 3 select t1.source, t2.source, GETEDITDISTANCE(t1.source, t2.source) as ed 4 from SMALLTABLE t1, SMALLTABLE t2 5 where length(t1.source) = length(t2.source)) Algorithmus 5.6: Es werden nur Strings mit derselben Länge verglichen. 37 1 select max(ed) 2 from ( 3 select t1.source, t2.source, GETEDITDISTANCE(t1.source, t2.source) as ed 4 from SMALLTABLE t1, SMALLTABLE t2 5 where (length(t1.source) - 1 = length(t2.source) or length(t1.source ) + 1= length(t2.source) or length(t1.source) = length(t2.source) or length(t1.source) = length(t2.source) - 1 or length(t1.source ) = length(t2.source) + 1) Algorithmus 5.7: Es werden nur Strings verglichen, deren Länge sich um +/- 1 unterscheidet. 1 select max(ed) 2 from ( 3 select t1.source, t2.source, GETEDITDISTANCE(t1.source, t2.source) as ed 4 from SMALLTABLE t1, SMALLTABLE t2 5 where soundex(t1.source) = soundex(t2.source)) Algorithmus 5.8: Es werden nur Strings verglichen, die durch denselben Soundex repräsentiert werden. Bei allen diesen Ansätzen ist, unabhängig von der Effizienz, auch die Effektivität zu betrachten, denn bei den Kriterien findet auf der einen Seite eine sehr strikte Trennung von Strings statt und auf der anderen Seite werden weiterhin Strings miteinander verglichen, die höchstwahrscheinlich nie als Matching angesehen werden. Beim Vergleich über den Anfangsbuchstaben(bzw. die ersten 2 Anfangsbuchstaben) werden Strings miteinander verglichen, die, außer dem ersten Zeichen, nichts gemeinsam haben. Ähnliches gilt für Vergleiche über die Länge(bzw. Länge +/- 1), da auch hier Strings verglichen werden, die zwar dieselbe Länge , aber z. B. kein gemeinsames Zeichen haben. Analog verhält sich der Vergleich mit dem Soundex als Kriterium. Dazu kommt, dass aufgrund der restriktiven Auswahl ähnliche Strings aufgrund eines Fehlers/Unterschiedes nicht verglichen werden. Dieser Nachteil gilt ebenfalls für alle genannten Kriterien. 38 5.3 Experimente: Analyse der Sorted Neighborhood Methode Als Datenquelle für die Analyse der Sorted Neighborhood Methode wird ebenfalls die Tabelle PI.SCHLAGWORTE verwendet. Auch hier wird nur ein Ausschnitt dieser Quelle analysiert. Die Sorted Neighborhood Methode besteht aus drei Phasen: Schlüsselerzeugung, Sortierung und Vergleich. Die zweite Phase, die Sortierung, wird in den Testfällen nicht betrachtet, da hier Algorithmen bzw. Implementationen vorhanden sind, die die Sortierung in ausreichender Zeit erledigen. Betrachtet man die erste Phase, so ist für die Bildung eines guten“ Schlüssels entscheidend, dass ähnliche Tupel nach der Sortierung ” nach den Schlüsseln möglichst nahe zusammenliegen und unähnliche Tupel möglichst weit auseinanderliegen. Die Tabelle PI.SCHLAGWORTE enthält 11769 verschiedene Schlagworte. Die Tabelle 5.4 zeigt, wie viele verschiedene Schlüssel aus den Daten der Tabelle PI.SCHLAGWORTE erzeugt werden. Tabelle 5.4 zeigt, dass es starke UnterArt der Schlüsselerzeugung Anzahl verschiedener Schlüssel Soundex 2240 Kölner Phonetik 10834 Anfangsbuchstaben(die Ersten vier) 2750 Endbuchstaben(die Letzten vier) ???? Tabelle 5.4: Wie viele verschiedene Schlüssel entstehen bei der Schlüsselerzeugung aus der Tabelle PI.SCHLAGWORTE? schiede bei der Anzahl der erzeugten Schlüssel gibt. Der Vorteil von vielen Schlüsseln ist, dass eine Sortierung besser ist, da so eine feine Sortierung erfolgen kann. Durch eine größere Anzahl an Schlüsseln lässt sich die Mindestgröße des Fenster für die Vergleichsphase verringern. Die Mindestfenstergröße wird mit der im Algorithmus 5.9 dargestellten SQL-Anfrage bestimmt. Dabei enthält die Tabelle ALGORITHMSOURCETABLE“ ” die zu untersuchenden Daten und die Spalte KEY COLUMN“ enthält den erzeugten ” Schlüssel für das entsprechende Tupel. 1 select max(count(KEY_COLUMN)) from ALGORITHMSOURCETABLE group by KEY_COLUMN Algorithmus 5.9: Bestimmung des minimalen Fensterns So liefert zum Beispiel das Verfahren der Kölner Phonetik eine Mindestfenstergröße von 16, wohin gegen das Soundex-Verfahren eine Größe von 324 und das Verfahren mit den ersten vier Buchstaben als Schlüssel eine Größe von 298. Die Mindestfenstergröße besagt, dass mindestens alle Elemente, die von einem Schlüssel repräsentiert werden, innerhalb eines Fenster liegen müssen. Andererseits beeinflusst die Fenstergröße die Laufzeit der Sorted Neighbothood Methode massiv, da die Laufzeit nur von der Fenstergröße und 39 Tupelanzahl der Quelldaten abhängt. Ein zwanzigmal größeres Fenster führt zu einer zwanzigmal längeren Laufzeit. In der zweiten Phase der Sorted Neighborhood Methode bedarf die Implementierung der Sortierung keiner weiteren Analyse, da diese fest in die verwendete Oracle Datenbank integriert ist. Es kommt hier die alphabetische Sortierung zur Anwendung. Zu betrachten ist hier die Güte der erzeugten Schlüssel, also liegen ähnliche Begriffe wirklich nahe beieinander und unähnliche Begriffe weit auseinander. Für alle genannten Verfahren zur Schlüsselbildung gilt, dass die Verfahren sehr anfällig für Fehler am Anfang bzw. im ersten Teil des Strings sind. Für das Verfahren der Endbuchstaben gilt dies analog für das Ende der Zeichenkette. Daraus ergibt sich ebenfalls, dass die Verfahren anfälliger für kurze Zeichenketten(3-5 Zeichen) als für längere sind. Allerdings trifft dieser Nachteil nicht auf alle Zeichen zu, denn sollten zwei Zeichen durch das selbe Codesymbol codiert werden, liegen die dazugehörigen Zeichenketten trotzdem nebeneinander. Als Beispiel gelten hier die Zeichenketten agent“ und agents“. Beim Verfahren der Kölner Phonetik ” ” liegen zwischen diesen beiden offensichtlich sehr ähnlichen Zeichenketten dreizehn weitere Zeichenketten. Bei der Analyse der dritten Phase, Vergleiche, der Sorted Neighborhood Methode werden die Aspekte Effektivität und Effizienz betrachtet. Zunächst lässt sich bzgl. der Effizienz bei konstanter Datenquelle folgende Gesetzmäßigkeit formulieren: Je größer das Fenster ist, desto größer ist die Anzahl der Vergleiche und desto länger ist die Laufzeit (5.6) Dies folgt direkt aus der Definition und der Analyse der Sorted Neighborhood Methode. Bei der Sorted Neighborhooh Methode wird im Vergleich zur Brute-Force-Strategie die Anzahl der Vergleiche massiv reduziert. Wie in Tabelle 5.5 erkennbar ist, kann die Anzahl der Vergleiche für eine Fenstergröße kleiner als 120 auf unter 1 % gesenkt werden. Dies führt zu einer ebenfalls massiven Senkung der Laufzeit. Im nächsten Abschnitt soll dies Effektivität der Sorted Neighborhood Methode betrachtet werden. Hierzu wird zunächst ein Ausschnitt aus der Tabelle PI.Schlagwort gewählt. Der Ausschnitt umfasst 200 Tupel, die nach der zweiten Phase nebeneinander sind. Die Schlüssel wurden mit Hilfe des Verfahrens der Kölner Phonetik konstruiert. Die Tupel werden zufällig ausgewählt. Die Analyse wird für eine feste Fenstergröße von 16 durchgeführt. Hierbei handelt es sich um die Mindestfenstergröße des Verfahrens. Zur besseren Übersicht der Abbildungen werden folgenden Abkürzungen eingeführt. ed = Edit-Distance ng = N-Gramme qg = Q-Grams dk = Damerau-Levenshtein-Distance f s = Field Similarity 40 (5.7) Fenstergröße Anzahl Vergleiche 5 58845 10 117690 20 235380 30 353070 40 470760 50 588450 60 706140 70 823830 80 941520 90 1059210 100 1176900 110 1294590 120 1412280 11769(Brute-Force-Strategie) 138.509.361 Prozent 0,0425% 0,0850% 0,1699% 0,2549% 0,3399% 0,4248% 0,5098% 0,5948% 0,6798% 0,7647% 0,8497% 0,9347% 1,0196% 100% Tabelle 5.5: Vergleich der Anzahl der Vergleiche Die Berechnung des Ähnlichkeitsmaßes erfolgt nach den Ansätzen in Kap. 3.3. Bei der Verwendung von mehr als einem Ähnlichkeitsmaß steht z. B. die Abkürzung edng“ für ” die Kombination des Verfahrens der Edit-Distance und des Verfahrens der N-Gramme. Analog erfolgt die Bildung der Abkürzungen für weitere Kombinationen. Die Abbildungen 5.1 bis 5.6 zeigen die Ergebnisse, die im einzelnen betrachtet werden. Abbildung 5.1 zeigt den Vergleich, inwieweit sich die Anzahl der Ergebnistupel im Bezug auf einen bestimmten Grenzwert ändert. Die erste Beobachtung zeigt, dass erwartungsgemäß die Anzahl der Tupel mit steigendem Grenzwert sinkt. Auffällig ist jedoch, dass das Verfahren der Damerau-Levenshtein-Distance für einen Grenzwert im Bereich von 0.7 bis 0.85 bis zu sechsmal soviele Tupel liefert, wie die Edit-Distance. Ebenfalls erwähnenswert ist hierbei, dass beim Verfahren der Damerau-Levenshtein-Distance und einem Grenzwert von 0.7 ca. 1200 Tupel gefunden werden. Dies ist erstaunlich, da das Verfahren 3760 Vergleiche durchführt und somit ≈ 30 % der Vergleiche zu einem positiven Ergebnis führen. Dies unterstreicht die Effizienz und damit auch die Güte der Schlüsselbildung, da somit eher ähnliche Tupel nahe beieinander liegen als weniger ähnliche. In Abbildung 5.2 wird die benötigte Laufzeit des Programms betrachtet. Die Betrachtung findet, wie bereits im vorherigen Experiment, in Abhängigkeit eines bestimmten Grenzwertes für verschiedene Ähnlichkeitsmaße statt. Auffällig ist hier, dass die Laufzeit nahezu konstant für alle Grenzwerte ist. Dies führt zu der Erkenntnis, dass das Einfügen der Ergebnisse in die Ergebnistabelle der Datenbank keinen entscheidenden Faktor an der Laufzeit aufweist. Somit ist für die Laufzeit lediglich die Anzahl der Vergleiche maßgebend, die für alle Durchläufe, unabhängig vom gewählten Grenzwert, konstant ist. Der Unterschied in der Laufzeit der einzelnen Verfahren wird erst für größere Datenmengen von Bedeutung. Die Differenz in der Laufzeit liegt im Bereich von 0.1 sec bis 0.4 sec für 55225 41 1400 1200 ed ng dk fs qg Anzahl Tupel 1000 800 600 400 200 0 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 Grenzw ert Abbildung 5.1: Sorted Neighborhood Methode - Grenzwert 0.70 bis 0.99 für 1 Ähnlichkeitsmaß - Tupel Vergleiche. Bei den folgenden Experimenten soll die Erweiterung der Berechnung des 2,5 2 Laufzeit 1,5 1 0,5 ed ng qg dk fs 0 0,7 0,71 0,72 0,73 0,74 0,75 0,76 0,77 0,78 0,79 0,8 0,81 0,82 0,83 0,84 0,85 0,86 0,87 0,88 0,89 0,9 0,91 0,92 0,93 0,94 0,95 0,96 0,97 0,98 0,99 1 Grenzw ert Abbildung 5.2: Sorted Neighborhood Methode - Grenzwert 0.70 bis 0.99 für 1 Ähnlichkeitsmaß - Zeit Ähnlichkeitsmaß auf die Anwendung von mehreren Ähnlichkeitsmaßen als Kombination betrachtet werden. In Abbildung 5.3 werden die Ergebnisse aus der Kombination von jeweils zwei Ähnlichkeitsmaßen dargestellt. Die Kombination der Ähnlichkeitsmaße erfolgt mit dem Verfahren der Vektorlänge. Es handelt sich hierbei um die Analyse der Frage, wie viele Tupel von den verschiedenen Kombinationen in Abhängigkeit eines bestimm- 42 ten Grenzwerts berechnet werden. Erwartungsgemäß liegt die Anzahl an Ergebnistupel im Bereich zwischen den beiden verwendeten Ähnlichkeitsmaßen. Dies soll am Beispiel der Edit- und der Damerau-Levenshtein-Distance erläutert werden. Die Kombination der beiden Ähnlichkeitsmaße liegt daher oberhalb der Edit-Distance und Unterhalb der Damerau-Levenshtein-Distance. Die Abbildung 5.4 zeigt die Resultate bzgl. der Analyse 450 400 350 Anzahl Tupel 300 250 edfs edng eddk edqg 200 150 100 50 0 0.7 0.72 0.74 0.76 0.78 0.8 0.82 0.84 0.86 0.88 0.9 0.92 0.94 0.96 0.98 1.0 Grenzwert Abbildung 5.3: Sorted Neighborhood Methode - Grenzwert 0.70 bis 0.99 für die Kombination von 2 Ähnlichkeitsmaßen - Tupel der Laufzeit. Angegeben ist die Laufzeit in Abhängigkeit der Kombination von zwei Ähnlichkeitsmaßen sowie einem bestimmten Grenzwert. Die Ergebnisse zeigen, dass sich die Laufzeit der Algorithmen erwartungsgemäß aus der Laufzeit der einzelnen Algorithmen addiert. Die in Abbildung 5.5 und in Abbildung 5.6 dargestellten Messwerte bestätigen die Ergebnisse aus den vorherigen Experimenten. Somit lässt sich sagen, dass die Sorted Neighborhood Methode Ergebnisse in einer angemessen Zeit berechnen kann. An dieser Stelle gilt es nun zu betrachten, inwieweit die berechneten Ergebnisse den Anforderungen genügen. Also handelt es sich bei den gefunden Stringpaaren tatsächlich um echte Matchings. Hier wird im folgenden Abschnitt die Güte der Ergebnisse betrachtet. Hierzu werden Ergebnisse nach den Kriterien aus Kap. 5.1 analysiert und bewertet. 43 2,75 2,65 2,55 2,45 edfs edng eddk edqg Laufzeit 2,35 2,25 2,15 2,05 1,95 1,85 1,75 0,7 0,71 0,72 0,73 0,74 0,75 0,76 0,77 0,78 0,79 0,8 0,81 0,82 0,83 0,84 0,85 0,86 0,87 0,88 0,89 0,9 0,91 0,92 0,93 0,94 0,95 0,96 0,97 0,98 0,99 1 Grenzw ert Abbildung 5.4: Sorted Neighborhood Methode - Grenzwert 0.70 bis 0.99 für 2 Ähnlichkeitsmaße - Zeit 450 400 350 edngfs edqgfs edfsdk ngqgfs Anzahl Tupel 300 250 200 150 100 50 0 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 Grenzw ert Abbildung 5.5: Sorted Neighborhood Methode - Grenzwert 0.70 bis 0.99 für die Kombination von 3 Ähnlichkeitsmaßen - Tupel 44 4,5 4,3 4,1 3,9 Laufzeit 3,7 edngfs edqgfs edfsdk ngqgfs 3,5 3,3 3,1 2,9 2,7 2,5 0,7 0,71 0,72 0,73 0,74 0,75 0,76 0,77 0,78 0,79 0,8 0,81 0,82 0,83 0,84 0,85 0,86 0,87 0,88 0,89 0,9 0,91 0,92 0,93 0,94 0,95 0,96 0,97 0,98 0,99 1 Grenzw ert Abbildung 5.6: Sorted Neighborhood Methode - Grenzwert 0.70 bis 0.99 für 3 Ähnlichkeitsmaße - Zeit 45 Zur Bewertung der Ergebnisse gilt es, zunächst per Hand Matchings aus der Datenquelle zu bestimmen. In den 235 Tupel der Datenquelle befinden sich 45 Tupelpaare, die auf jeden Fall als Matching erkannt werden müssen. Beide Tabellen sind im Anhang zu finden. Nun wurde die Sorted Neighborhood Methode für verschiedene Kombinationen von Ähnlichkeitsmaßen und verschiedene Grenzwerte durchgeführt. Anschließend werden die Ergebnisse des Algorithmus mit den per Hand bestimmten Tupelpaaren verglichen. In Abbildung 5.7 wird gezeigt wie viele True-Positives durch die Algorithmen gefunden werden. Hierbei fällt sofort auf, dass keiner der genannten Algorithmen alle 45 gewählten Matchings findet. Die Abbildung 5.8 und die Abbildung 5.9 zeigen analog zur Abbildung 5.7 wie viele Matchings von den Algorithmen erkannt werden, die als False-Negatives bzw. False-Positives zu kategorisieren sind. Aus der Definition der Kriterien(Kap. 5.1) folgt, dass die Anzahl der True-Positives möglichst groß sein soll, sowie, dass die Anzahl der False-Negatives und False-Positives möglichst gering seien soll. Nicht näher betrachtet werden True-Negatives, da die Algorithmen im Hinblick auf die Erkennung von Matchings betrachtet werden und nicht auf das Finden von Nicht-Matchings. 40 38 36 34 32 30 28 26 22 20 18 16 14 12 10 8 6 4 2 Abbildung 5.7: True-Positives 46 90 88 K K ED FS D 86 K ED FS D 84 K FS D ED 80 FS D ED 78 G ED G ED Ähnlichkeitsm aß + Grenzw ert Q FS 87 Q FS 85 ED FS 83 FS ED 89 87 91 FS ED FS FS 85 FS 94 K FS 92 D 74 K D 72 G Q Q G 70 79 G G N Q 89 87 85 77 G N ED ED ED 83 0 ED Anzahl 24 47 Ähnlichkeitsm aß + Grenzw ert Abbildung 5.9: False-Positives ED ED ED FS D FS D K K K K 90 88 86 84 80 78 87 85 83 91 89 87 85 94 92 74 72 Q FS FS D 79 77 89 87 85 83 70 Q FS FS D G G ED ED ED FS ED FS ED FS ED FS FS FS FS K D K G G G D Q Q Q G N G N ED ED ED ED Anzahl ED ED ED K K FS FS FS FS FS FS FS D D Q G Q G 85 83 91 89 87 85 94 92 74 72 70 79 77 89 87 85 83 ED 87 G Q FS 78 G Q F ED S 8 0 FS D ED K 8 4 FS D ED K 8 6 FS D ED K 8 8 FS D K 90 ED G G Q G N N ED ED ED ED Anazhl 28 26 24 22 20 18 16 14 12 10 8 6 4 2 0 Ähnlichkeitsmaß + Grenzwert Abbildung 5.8: False-Negatives 30 28 26 24 22 20 18 16 14 12 10 8 6 4 2 0 Um die Ergebnisse der Algorithmen nun zu bewerten, werden die Maße Precision“ und ” Recall“ berechnet. Man strebt hier einen möglichst hohen Wert für beide Maße an. In ” 1,000 0,900 Precision 0,800 0,700 0,600 0,500 0,400 90 88 K ED FS D 86 K ED FS D 84 K ED FS D 80 K ED FS D 78 G ED G ED Q FS 87 Q FS 85 FS ED 83 FS ED ED 91 FS 89 FS 87 FS 94 85 FS FS 92 K D 74 K D 72 G Q Q G 70 79 G Q N G 77 89 G N 87 ED 85 ED ED ED 83 0,300 Ähnlichkeitsm aß + Grenzw ert Abbildung 5.10: Precision 1,000 0,900 0,800 Recall 0,700 0,600 0,500 0,400 90 88 K ED FS D 86 K ED FS D 84 K ED FS D 80 K FS D ED 78 G ED G ED Q FS 87 Q FS 85 FS ED 83 FS ED ED FS 91 FS 89 FS 87 94 85 FS FS 92 K D 74 K D 72 G Q Q G 70 79 G Q G N N G 77 89 ED 87 ED 85 ED ED 83 0,300 Ähnlichkeitsm aß + Grenzw ert Abbildung 5.11: Recall Abbildung 5.12 ist die Kombination der beiden Maße dargestellt. Die beste Kombination der Maße Precision“ und Recall“ ergibt sich bei den ausgewählten Kombinationen ” ” aus der Anwendung der Kombination der Ähnlichkeitsmaße Edit-Distance, Q-Grams und Field-Similarity mit einem Grenzwert von 0,7. Hier ergibt sich ein f-measure von 0,86. Zum Schluss der Analyse der Sorted Neighborhood Methode lässt sich sagen, dass 48 0,900 0,800 F-Measure 0,700 0,600 0,500 0,400 87 G Q FS 78 G Q F ED S 8 0 FS D ED K 8 4 FS D ED K 8 6 FS D ED K 8 8 FS D K 90 85 ED FS ED ED 83 FS ED 91 FS 89 87 ED FS FS 94 85 FS FS D K 92 74 K D 72 Q G 70 Q G 79 Q G 77 G N 87 85 89 G N ED ED ED ED 83 0,300 Ähnlichkeitsmaß + Grenzwert Abbildung 5.12: F-Measure diese Methode geeignet ist, um hinreichend gute Matchings aus einer Datenquelle zu berechnen. Zu beachten sind die Einschränkungen, die in den Experimenten analysiert und ausgewertet wurden. Die Sorted Neighborhood Methode spielt ihre Vorteile vor allem bei großen Datenquellen aus, da sie die Laufzeit massiv senkt. 49 5.4 Experimente: Analyse der vorhandenen Datenquellen In diesem Abschnitt werden die vorhanden Datenquellen mit den in der Implementierung vorkommenden Algorithmen analysiert. Hierzu wird jeweils die verwendete Datenquelle bzgl. des Schemas, nach dem sie aufgebaut ist, vorgestellt. Zur Anwendung kommen die folgenden Datenquellen. In der Datenbank PI ist die Datenbank der Bibliothek des Fachgebiet Datenbanken und Informationssysteme hinterlegt. Bei der Datenquelle Openstreetmap handelt es sich um Karten Daten, die unter freier Lizenz zur Verfügung stehen. Bei den Quellen ATKIS und KVD handelt es sich um amtliche Straßendaten. Die Quelle MovieDB enthält eine Filmdatenbank. Bei der Analyse kommt jeweils nur ein Ausschnitt der Datenquellen zur Anwendung. Die folgenden Experimente sollen zeigen, wie viele Objekte innerhalb der Datenquelle als Matching erkannt werden. Hierzu wird der folgende Ansatz aus den vorhandenen Algorithmen ausgeführt: zur Anwendung kommt die Sorted Neighborhood Methode und als Ähnlichkeitsmaße kommen die Edit-Distance, Filed Similarity, N-Gramme, DamerauLevenshtein sowie Q-Grams zum Einsatz, die mit Hilfe des Vektormodells kombiniert werden. Der Grenzwert ist auf 0.8 festgelegt worden. Für die vorhandenen Datenquellen wird dann jeweils ein Experiment mit diesen Rahmenbedingungen durchgeführt. Im ersten Experiment kommt die Datenquelle PI zur Anwendung. Der verwendete Ausschnitt ist nach folgendem relationalem Schema aufgebaut: ( SCHRIFT schrif t, autornull , titel, schrif ttyp, schrif ttyp erg null , (5.8) datumnull , abteilung null , anm1null , anm2null , url1null , url2null , ) doknrnull , erf datumnull ) ( SCHLAGWORT schrif t → SCHRIF T, schlagwort, personnull , prioritaetnull ( FLIT schrif t → SCHRIF T, literaturkuerzel, isbn, verlag, instorg, ort, auf lage, sprache, hrsg, vzweck, deskriptoren, cr, standort, anzahlnull , siganatur, zeitschreihe, ausgabennr, band, seite, vorversion, ref erenz, erscheinungsjahr) Die Ergebnisse bzgl. dieser Datenquelle werden in der Tabelle 5.6 dargestellt. Betrachtet wird dabei die Laufzeit, die Anzahl der Elemente, die ein Matching mit mindestens einem anderen Element bilden, sowie die Anzahl der vollständigen bzw. nicht vollständigen Matchings. Nun soll die Datenquelle MovieDB analysiert werden. Die Quelle ist nach dem relatio- 50 Ähnlichkeitsmaß ed ng qg dk fs edng edqg eddk edfs ngqg ngdk ngfs qgdk qgfs dkfs qgdkfs eddkng eddkqg eddkfs Laufzeit in sec 246 90 89 230 130 223 163 272 189 148 205 162 252 164 297 330 268 266 367 Anzahl ähnliche Elemente 2979 37 17 1549 466 1406 189 1245 371 3 0 0 1175 310 1789 1549 146 12 1086 vollständige Matchings 1005 18 9 600 219 583 89 604 188 2 0 0 521 148 763 655 66 7 521 nicht vollständige Matchings 189 8 3 144 78 62 12 64 25 1 0 0 34 12 71 55 15 0 50 Tabelle 5.6: Analyse der Datenquelle PI.Schlagwort Ähnlichkeitsmaß ed ng qg fs edng edqg edfs qgng fsng fsqg Laufzeit in sec 26 070 60 90 11 1 12 90 1 1 Anzahl ähnliche Elemente 379 8 0 22 0 0 0 0 0 0 vollständige Matchings 126 5 0 15 0 0 0 0 0 0 nicht vollständige Matchings 18 0 0 0 0 0 0 0 0 0 Tabelle 5.7: Analyse der Datenquelle PI.Flit nalen Modell, das in den Formeln 5.9 und 5.10 dargestellt ist, strukturiert: ( ) MOVIE movie, title, type, yearnull , runningtimenull ( PERSON person, name, realnamenull , sexnull , heightnull , birth datenull , birth country null , birth locationnull , (5.9) ) death datenull , death country null , death locationnull ) ( PART part, movie → M OV IE, person → P ERSON, mentioned, creditposnull ( ) CHARACTER part → P ART, character ( ) 51 REMARK part → P ART, remark LINK (movie1 → M OV IE, movie2 → M OV IE, link) LANGUAGE (movie → M OV IE, language) GENRE (movie → M OV IE, genre) KEYWORD (movie → M OV IE, keyword) COUNTRY (movie → M OV IE, country) ( ) LOCATION movie → M OV IE, country null , location AKA (movie → M OV IE, country, aka) RELEASE (movie → M OV IE, country, release) RATING (movie → M OV IE, rating, votes) BUDGET (movie → M OV IE, budget, currency) QUOTE (movie → M OV IE, dialog, line, quote) (5.10) Die Datenquelle MovieDB soll bzgl. Namensvettern untersucht werden. Aufgrund der hohen Zahl an Tupeln in der Tabelle Person“, wird dei Analyse nur für einen kleinen ” Ausschnit durchgeführt. Die gesamte Tabelle enthält ca. 550000 Datensätze und der verwendete Ausschnitt besteht aus ca. 8000 Tupeln. Die Ergebnisse bzgl Laufzeit, gefundene Elemente, volsständige sowie nicht vollständige Matchings sind in Tabelle 5.8 dargestellt. Als nächstes kommt die Datenquelle Openstreetmap zur Anwendung. Die Datenquelle Ähnlichkeitsmaß ed ng qg fs edng edqg edfs qgng fsng fsqg Laufzeit in sec 173 43 41 8 67 67 78 64 67 67 Anzahl ähnliche Elemente 2446 9 1 512 0 0 0 0 0 0 vollständige Matchings 345 4 1 156 0 0 0 0 0 0 nicht vollständige Matchings 205 4 0 156 0 0 0 0 0 0 Tabelle 5.8: Analyse der Datenquelle MovieDB.Person ist nach dem relationalen Modell, das in Formel 5.11 dargestellt ist, aufgebaut. NODE (id, lat, lon) (5.11) WAY (id, isArea) RELATION (id) ( ) WAY REF way id → W AY, node id → N ODE, ordernull RELATION REF (relation id → RELAT ION, object id → OBJECT 1 , ) type, ref, role, ordernull ( ) TAG NODE id → N ODE, key, value ( ) TAG WAY id → W AY, key, value ( ) TAG RELATION id → RELAT ION, key, value 52 Aufgrund der sehr hohen Anzahl an Informationen, die in dieser Datenquellen enthalten sind, findet eine Vorauswahl der Quelldaten statt. Aus den Quelldaten wird ein Ausschnitt ausgewählt, der Namen von Straßen enthält. Zudem wird nicht die OSMWeltdatenbank verwendet, sondern nur alle Daten für Niedersachsen. Die Vorauswahl wird über das Tag highway“ getroffen, da es sich dann um ein Element handelt, das ” eine Straße repräsentiert. Der als Quelle für das Experiment verwendete Ausschnitt enthält 911 Tupel. Die für das Experiment benötigte Rechenzeit beträgt 70 sec. Durch das Programm wurden 25 Klassen erkannt, die sich in 24 vollständige Matchings und in 1 einfaches Matching aufteilen. Mit Hilfe der Datenquelle OSM wären noch weitere Analysen, zum Beispiel bzgl. Ortsnamen, möglich. Da es sich bei den Quellen ATKIS und KVD um amtliche Daten handelt, ist davon auszugehen, dass sich innerhalb der Quellen keine Matchings finden lassen. Somit kommt hier nur der Vergleich mit anderen Datenquellen in Betracht. Zunächst soll kurz der Aufbau der beiden Quellen betrachtet werden. Dazu wird für beide Quellen das relationale Modell aufgestellt. Es ist in den Formeln 5.12 und 5.13 verdeutlicht. ( ) HAN25 OBJEKTGEOMETRIEN objektid, objektart, objektgeometrie (5.12) ( ) HAN25 OBJEKTE objektinr, objektart, objektgeometrie ( HAN25 OBJEKTATTRIBUTE objektid → HAN 25 OBJEKT GEOM ET RIEN, ) typ, wert ( ) HAN25 OBJEKTNAMEN objektnr → HAN 25 OBJEKT E, typ, name BESTEHT AUS (objektid → HAN 25 OBJEKT GEOM ET RIEN, objektnr → HAN 25 OBJEKT E) ( ) HANNOVER KVD g id, g group, g key, geometry, text, g prio (5.13) Da sich in beiden Quellen Straßendaten befinden, bietet sich hier jeweils ein Vergleich mit der Datenquelle Openstreetmap an. Mit dieser Analyse ließen sich die in OSM vorliegenden Daten verifizieren und somit die Eingaben der Anwender bestätigen. Die Analyse ergab das Ergebnis, das in Tabelle 5.9 dargestellt ist. Ähnlichkeitsmaß ed fs edfs Laufzeit in sec 279 112 15 Anzahl ähnliche Elemente 3915 300 0 vollständige Matchings 1187 136 0 nicht vollständige Matchings 347 60 0 Tabelle 5.9: Analyse der Datenquellen KVD und OSM 1 Dieses Objekt repräsentiert die Relationen NODE, WAY und RELATION. Durch das Attribut type wird festgelegt, um welche Relation es sich handelt. 53 Kapitel 6 Implementierung In diesem Kapitel wird die Implementierung dargestellt. Die in den vorherigen Kapiteln genannten Ansätze werden in einem Java-Programm implementiert. Im 1. Teil (Anforderungen) werden die Anforderungen an das Programms beschrieben. Es wird an dieser Stelle festgelegt, was das Programm als Ergebnis liefern soll und auf welchem Weg dies erfolgen soll. Im nächsten Abschnitt wird der generelle Aufbau(Kap. 6.2) dargestellt. Anschließend folgt die Beschreibung der Architektur der Implementierung im Kapitel 6.3. Im Kapitel Benutzeroberfläche werden die Eigenschaften sowie das Aussehen der Benutzeroberfläche vorgestellt. Ebenfalls vorgestellt wird der Programmablauf, den ein Anwender bei der Ausführung des Programms antrifft. Im vorletzten Abschnitt, Installation und Deinstallation, werden Installation und Deinstallation präsentiert und erläutert. Zuletzt wird die Art und Weise in der die Ergebnisse berechnet und abgelegt werden. Dies geschieht im Abschnitt Installation und Deinstallation. 6.1 Anforderungen Ziel dieser Arbeit ist die Berechnung eines Matchings von Datenbankobjekten, d.h. es soll als Ergebnis eine Tabelle vorliegen, in deren Spalten Klassen von Matchings enthalten sind. Als ein Matching wird ein Paar von Strings angesehen, bei denen das verwendete Ähnlichkeitsmaß einen Wert größer oder gleich eines bestimmten Grenzwertes berechnet. Anschließend sollen diesen Paaren Klassen zugeordnet werden. Diese Klassen enthalten alle Matchings, für die gilt, dass alle in der Klasse enthaltenen Strings das selbe Objekt in der realen Welt repräsentieren. Es wird kein Repräsentant einer Klasse bestimmt, daher sind alle Strings in einer Klasse gleichbedeutend. Die Auswahl eines Repräsentanten ist Aufgabe des Anwenders und somit nicht mehr Ziel dieser Arbeit. Es soll aber überprüft werden, ob es sich bei den Objekten innerhalb einer Klasse um ein vollständiges Matching, also ob es ein Matching von jedem zu jedem Objekt innerhalb einer Klasse 55 gibt, handelt. 6.2 Programmaufbau In der Implementation sind mehrere Ansätze zur Berechnung von Matchings realisiert worden. Zunächst ist der Ablauf für alle Ansätze gleich. Nach der Anmeldung bei einer Oracle Datenbank, wählt der Anwender die zu betrachtenden Tabellen und Spalten aus. Die Suche kann hier sowohl innerhalb einer Tabelle als auch über mehrere Tabellen(maximal zwei) erfolgen. Dem Anwender stehen dabei alle Daten zur Verfügung, auf die er mit seinen Zugangsrechten seines Datenbankzugangs zugreifen darf. Nach dieser Auswahl folgt die grundsätzliche Entscheidung, mit welcher Strategie der Anwender arbeiten möchte. Hier stehen die Brute-Force“-Strategie sowie die Sorted Neighborhood ” ” Methode(SNM)“(Kap. 4)zur Verfügung. Bei der Sorted Neighborhood Methode werden zunächst zwei Schritte ausgeführt, die in der Brute-Force-Strategie nicht vorkommen. Zunächst muss der Anwender das Verfahren zur Generierung der Schlüssel festlegen. Hierzu stehen die im Kapitel 4 vorgestellten Verfahren zur Verfügung. Nächster Schritt ist die Auswahl der Fenstergröße. Der Algorithmus berechnet eine Mindestfenstergröße, die dann wiederum vom Anwender vergrößert werden kann. Der nächsten Schritten laufen in beiden Verfahren analog ab. Daher gilt für beide Verfahren, dass der Anwender die verwendeten Ähnlichkeitsmaße selbst auswählen kann. Es wurden die in Kapitel 2 vorgestellten Algorithmen implementiert. Anschließend entscheidet der Anwender über die Kombination der Ähnlichkeitsmaße, also wie der Ähnlichkeitswert für die einzelnen Strings gebildet wird. Letzter Schritt ist die Festlegung eines Grenzwertes(im Intervall von 0.0 bis 1.0), ab dem ein Paar als gefundenes Matching erkannt wird. 6.3 Architektur Das Programm ist in fünf Packages gegliedert. Die eigentliche Anwendung ist im Package model, im Package view sowie im Package controller implementiert. Diese Packages sind nach dem MVC-Pattern1 aufgebaut und angeordnet. Den allgemeinen Aufbau zeigt die Grafik 6.1. Der Aufbau nach dem MVC-Pattern bewirkt eine Trennung der Repräsentation der Daten, dem Zugriff auf die Datenquellen sowie der Programmablaufkontrolle. Im Package dbfunctions sind die Elemente angeordnet, die in der zu nutzenden Oracle Datenbank abgelegt werden. Im folgenden werden die einzelnen Packages vorgestellt und die Funktionsweise der wichtigsten Klassen erläutert. Das Package model beinhaltet den Datenbankzugriff sowie nahezu alle lokal ausgeführten Berechnungen. Es besteht aus den Packages dbaccess“, bruteforce“, displaytable“, ” ” ” 1 Model-View-Controller-Pattern 56 Abbildung 6.1: Programmaufbau represent“ und snm“. Die Grafik 6.2 zeigt das Klassendiagramm2 der in den Packages ” ” enthaltenen Klassen. Abbildung 6.2: Packageübersicht des Package model 2 Klassendiagramm gemäß UML-Definition 57 Im Package dbaccess“ ist der Datenbankzugriff implementiert und wird die vorhandene ” Verbindung zur Oracle Datenbank dem gesamten Programm zur Verfügung gestellt. Alle anderen Objekte nutzen diese Verbindung, um SQL-Statements abzuschicken bzw. zu verarbeiten. Im Package bruteforce“ liegen alle Klassen zur Ausführung der Brute Force ” Strategie. Entsprechend sind im Package snm“ die Klassen zur Ausführung der Sorted ” Neighborhood Methode angeordnet. Im Package represent“ wird für alle Strategien die ” abschließend Berechnung der Ergebnisse implementiert. Das displaytable“ enthält die ” Elemente zur Anzeige einer Tabelle. Die Klassendiagramme sind in den Grafiken 6.3 bis dargestellt 6.7. Abbildung 6.3: Packageübersicht des Package model.bruteforce 58 Abbildung 6.4: Packageübersicht des Package model.dbfunctions Abbildung 6.5: Packageübersicht des Package model.displaytable 59 Abbildung 6.6: Packageübersicht des Package model.represent 60 Abbildung 6.7: Packageübersicht des Package model.snm 61 Das Package view enthält alle Elemente, die zur Erzeugung der GUI erforderlich sind. Das Anmeldefenster ist in der Klasse Start“ implementiert. In der Klasse MainApp” ” let“ ist das Hauptfenster implementiert. Die Klasse LoadTables“ erzeugt das Fenster ” zum Auswählen der Quelltabellen. Die Klasse StartSNM“ modelliert das Fenster zur ” Steuerung der Sorted Neighborhood Methode, sowie die Klasse StartBruteForce“ er” zeugt das Fenster zur Steuerung der Brute-Force-Strategie. Die Klasse DisplayTable“ ” dient zum Anzeigen einer Tabelle aus der verwendeten Datenbank. Die Grafik 6.7 zeigt das Klassendiagramm des Packages. Abbildung 6.8: Packageübersicht des Package view 62 Das Package controller enthält die Objekte zur Steuerung des Programmablaufs. Die Klasse Controller “ erzeugt die Instanzen des Models und der View. In den Packages ” loadtables“, mainapplet“, bruteforce“, displatable“, start“ und snm“ sind die Beob” ” ” ” ” ” achter der verschiedenen Schalter und Elemente der Fenster implementiert. Im Package loadtables“ liegen die Klasse für die Elemente des Fenster zum Laden der Datenquel” len, im Package mainapplet“ die für das Hauptfenster und im Package snm“ die für ” ” das Fenster zur Kontrolle des Sorted Neighborhood Algorithmus. Die Klassendiagramme sind in den Grafiken 6.9 bis dargestellt 6.15. Abbildung 6.9: Packageübersicht des Package controller 63 Abbildung 6.10: Packageübersicht des Package controller.bruteforce 64 Abbildung 6.11: Packageübersicht des Package controller.loadtables 65 Abbildung 6.12: Packageübersicht des Package controller.displaytable Abbildung 6.13: Packageübersicht des Package model.represent 66 Abbildung 6.14: Packageübersicht des Package controller.snm Abbildung 6.15: Packageübersicht des Package controller.start 67 Das Package dbfunctions enthält Elemente, die als Java-Objekte in der Datenbank abgelegt sind. Die von den verschiedenen Klassen implementierte Funktionalität wird mit Hilfe von PL/SQL-Prozeduren aufgerufen. Das Package similarity“ enthält die Im” plementation der verschiedenen Algorithmen zur Berechnung der Ähnlichkeitsmaße. Im Package snm“ liegt die Implementierung des Sorted Neighborhood Algorithmus. Er wird ” durch die Klasse Phase3DB“ realisiert. Es handelt sich hierbei um die dritte Phase des ” Sorted Neighborhood Algorithmus. Dies gilt analog für die Brute-Force-Strategie. Ebenfalls enthalten sind die Klassen DeleteTables“ und ReverseLastLetters“. Mit Hilfe der ” ” Klasse DeleteTables“ lassen sich die vom Programm angelegten Tabellen wieder aus der ” Datenbank entfernen. Die Klasse ReverseLastLetters“ dient zur Berechnung der i letz” ten Buchstaben eines Eingabestrings. Das fünfte und letzte Package main“ enthält die ” Abbildung 6.16: Packageübersicht des Package dbfunctions Main-Methode des gesamten Programms und dient somit zum Aufruf des Programms. 6.4 Benutzeroberfläche Nach dem Start des Programms erscheint das in Abbildung 6.21 dargestellt Fenster. Der Anwender muss hier zuerst mit seinen Zugangsdaten anmelden. Hierzu erforderlich sind die URL der Datenbank, sein Benutzername und sein Passwort. Die Anmeldung an der Datenbank wird durch einen Klick auf die Schaltfläche Verbinden“ ausgelöst. Ist ” die Anmeldung erfolgreich, überprüft das Programm sofort, ob alle für das Programm notwendigen Datenbank Elemente erzeugt und vorhanden sind. Ist dies auch der Fall, erscheint eine Hinweis im Mitteilungsfeld und der Hintergrund des Feldes färbt sich grün. 68 Abbildung 6.17: Packageübersicht des Package dbfunctions.snm Abbildung 6.18: Packageübersicht des Package dbfunctiions.similarity Stellt das Programm bei ordnungsgemäßer Anmeldung fest, dass nicht alle Elemente in der Datenbank vorhanden sind, wird im selben Fensterein Hinweis angezeigt, dass die Installation ausgeführt werden muss. Näheres hierzu siehe Kap. 6.3. Ist die Anmeldung nicht erfolgreich, wird der Anwender darauf hingewiesen und muss die Anmeldung noch einmal probieren. Sind Anmeldung und falls notwendig Architektur erfolgreich ab- 69 Abbildung 6.19: Packageübersicht des Package dbfunctions.bruteforce Abbildung 6.20: Packageübersicht des Package main Abbildung 6.21: Anmeldefenster geschlossen, wird die weiter“-Schaltfläche benutzbar. Ein Klick schließt das aktuelle ” Fenster und öffnet das in Abbildung 6.22 dargestellte Fenster. Dieses Fenster besteht aus zwei Teilen. Im oberen befindet sich die Auswahl der Datenquellen und im unteren die Auswahl des zu verwendenden Algorithmus. Dies Auswahl des Algorithmus ist nach Auswahl der Datenquellen möglich. Als nächstes muss der Anwender auf die Tabellen ” auswählen“-Schaltfläche klicken und es öffnet sich das in Abbildung 6.23 dargestellte Fenster. In diesem Fenster wählt der Anwender die Datenquellen, die er verwenden möchte. Dazu wählt der Anwender die enstprechenden Tabelle mit Hilfe der angzeigten Dropdown-Listen. Die Auswahl der Tabellen muss in folgender Reihenfolge erfolgen: zuerst muss der Benutzer“, dann die entsprechende Tabelle“ und zum Schluß die zu” ” verwendenden Spalten“ festgelegt werden. Der Inhalt der Listen für die Tabellen und ” Spalten errechnet sich jeweils aus der Auswahl der vorherigen Liste. Sind beide Quellen ausgewählt, ist die Ok“-Schaltfläche benutzbar und mit einem Klick darauf, werden die ” Quellen festgelegt. Mit dem Zurück“-Button gelangt der Anwender zurück zum vorheri” 70 Abbildung 6.22: Hauptfenster vor der Tabellenauswahl Abbildung 6.23: Tabellenauswahl gen Fenster. Hierbei wird keine der bisherigen getroffenen Auswahlen übernommen. Mit Hilfe der Zurücksetzen“-Schaltfläche kann der Anwender die aktuelle Auswahl wieder ” 71 zurücksetzen und die Auswahl von neuem beginnen. Wurden die Datenquellen erfolgreich Abbildung 6.24: Hauptfenster nach der Tabellenauswahl gesetzt, ist der Anwender wieder beim vorherigen Fenster(Abbildung 6.24). Allerdings werden nun die ausgewählten Tabellen grün hinterlegt angezeigt. Die hinter diesen Anzeigefeldern liegenden Schaltflächen sind nun aktiv und der Anwender kann hierüber die ausgewählten Tabellen betrachten. Ebenfalls aktiv sind die sich im unteren Bereich befindenden Schaltflächen zur Wahl des verwendeten Algorithmus. Ab diesem Punkt variiert der Programmablauf in Abhängigkeit der gewählten Strategie. Mit einem Klick auf die Schaltfläche SNM“ wählt der Anwender die Sorted Neighborhood Methode als Stra” tegie aus und das Fenster(siehe Abbilding 6.25) zur Steuerung der Sorted Neighborhood Methode öffnet sich. Das Fenster(siehe Abbilding 6.25) gliedert sich im oberen Bereich in fünf Spalten. Diese Spalten sind vom Anwender jeweils und nacheinander zu durchlaufen, um alle notwendigen Parameter zum Start der Sorted Neighborhood Methode zu übergeben. Zuerst gilt das zu verwendende Verfahren zur Erzeugung der Schlüssel zu bestimmen. Der Anwender muss genau eins der angegebenen Verfahren auswählen. Anschließend muss der Anwender die Schaltfläche Schlüssel setzen“ betätigen, um somit ” das Verfahren zur Schlüsselerzeugung festzulegen. Hat der Anwender mehr oder weniger als ein Verfahren gewählt, erscheint eine Fehlermeldung und der Anwender muss seine Wahl korrigieren. Nachdem das Verfahren erfolgreich bestimmt wurde, berechnet das Programm die Mindestfenstergröße und zeigt diese, wie Abbildung 6.26 verdeutlicht, im oberen Textfeld der zweiten Spalten an. Der Anwender kann nun wählen, ob er die Mindestgröße beibehalten möchte oder ein größeres Fenster wählen möchte. Zum Beibehalten der Mindestfenstergröße genügt ein Klick auf die Schaltfläche Fenstergröße setzen“. ” Möchte der Anwender den vorgegebenen Wert ändert, so muss er auf die Schaltfläche Fenstergröße selber bestimmen“ klicken, anschließend einen Wert größer oder gleich dem ” bisherigen Wert eingeben und abschließend auf die Schaltfläche Fenstergröße selber be” stimmen“ klicken. Der Anwender ist nun in der dritten Spalte angelangt(siehe Abbilding 72 Abbildung 6.25: Sorted Neighborhood Methode - Wahl des Verfahrens zur Schlüsselgenerierung Abbildung 6.26: Sorted Neighborhood Methode - Wahl der Fenstergröße 6.27). Hier gilt es mindestens ein Ähnlichkeitsmaß auszuwählen. Es können beliebig viele Maße aus den vorgegebenen Verfahren ausgewählt werden. Die ausgewählten Verfahren werden mit einem Klick auf die Schaltfläche Ähnlichkeitsmaß setzen“ bestätigt und der ” Anwender gelangt in die nächste Spalte. Wählt der Anwender keine Spalte, erscheint eine Fehlermeldung. In der vierten Spalte(siehe Abbilding 6.28) wählt der Anwender, wie die von ihm gewählten Ähnlichkeitsmaße kombiniert werden. Auch hier gilt, dass genau ein Verfahren ausgewählt werden muss, da sonst eine Fehlermeldung erscheint. Durch einen Klick auf die Schaltfläche Kombination setzen“ erfolgt die Bestätigung ” durch den Anwender und er gelangt in die letzte Spalte. In der letzten bestimmt der 73 Abbildung 6.27: Sorted Neighborhood Methode - Wahl des/der Ähnlichkeitsmaß/es Abbildung 6.28: Sorted Neighborhood Methode - Wahl der Kombination der Ähnlichkeitsmaße Anwender den bzw. die zu verwendenden Grenzwert/e in Abhängigkeit der Wahl der Kombination der Ähnlichkeitsmaße. Die Abbildung 6.29 zeigt die Situation, in der die Vektorlänge zur Kombination der Ähnlichkeitsmaße gewählt wurde. Hier gilt es für den Anwender, den einen notwendigen Grenzwert zu bestimmen. Wurde dagegen eins der beiden anderen Verfahren gewählt, sieht das Fenster wie Abbildung 6.30 aus. Hier muss der Anwender für jedes der Ähnlichkeitsmaße einen Grenzwert angeben. Beim Klicken auf die Schaltfläche Grenzwert setzen“ werden die benötigen Vorgaben überprüft und ” falls sie vorhanden sind, wird die Schaltfläche zum Starten der Sorted Neighborhood Methode aktiviert. Diese Situation ist in Abbildung 6.31 dargestellt. Mit einem letz- 74 Abbildung 6.29: Sorted Neighborhood Methode - Wahl des Grenzwertes - Kombination über die Vektorlänge Abbildung 6.30: Sorted Neighborhood Methode - Wahl des Grenzwertes ten Klick auf die Schaltfläche SNM starten“ startet die Sorted Neighborhood Methode. ” Nach Abschluss des Algorithmus öffnet sich ein neues Fenster und die Ergebnisse können betrachtet werden. Als nächstes wird die Wahl der zweiten Strategie, die Brute-Force-Strategie, vorgestellt. Das Programm befindet sich aktuell im Zustand, der in der Abbildung 6.24 dargestellt ist. Um die Brute-Force-Strategie zu wählen, klickt der Anwender auf die entsprechende Schaltfläche. Es öffnet sich darauf das in Abbildung 6.32 aufgezeigte Fenster. Analog zur Sorted Neighborhood Methode wählt der Anwender die zu benutzenden Ähnlichkeits- 75 Abbildung 6.31: Sorted Neighborhood Methode - Start Abbildung 6.32: Brute-Force-Strategie - Wahl des/der Ähnlichkeitsmaß/es maße aus. Anschließend folgt die Wahl der Kombination der Ähnlichkeitsmaße und das Festlegen der entsprechenden Grenzwerte. Diese Schritte verlaufen ebenfalls analog zur Sorted Neighborhood Methode und sind in den Abbildungen 6.33 , 6.34 und 6.35 dargestellt. Abschließend erfolgt der Start über die Schaltfläche Start BFS“. Nach Abschluss ” des Algorithmus öffnet sich ein neues Fenster und die Ergebnisse können betrachtet werden. Für beide Strategien gilt, dass der Anwender über die Schaltfläche zurück“ zurück zum ” Hauptfenster gelangt. Mit Hilfe der Schaltfläche Ende“ lässt sich der Ablauf des Pro” gramms beenden. 76 Abbildung 6.33: Brute-Force-Strategie - Wahl der Kombination der Ähnlichkeitsmaße Abbildung 6.34: Brute-Force-Strategie - Wahl des Grenzwertes - Kombination über die Vektorlänge 6.5 Installation und Deinstallation Damit das Programm lauffähig ist, werden einige Elemente benötigt, die nicht zum Standardfunktionsumfang einer Oracle Datenbank gehören. Alle diese Elemente befinden sich in Package dbfunctions. Wie bereits im Kapitel Programmaufbau erläutert, überprüft das Programm nach erfolgreicher Anmeldung an der Oracle Datenbank, ob alle notwendigen Elemente, die zusätzlich erforderliche sind, bereits installiert sind. Hierzu gehören die einzelnen Klassen, die die Berechnung des Ähnlichkeitsmaß für zwei Strings implemen- 77 Abbildung 6.35: Brute-Force-Strategie - Wahl des Grenzwertes Abbildung 6.36: Ergebnisfenster tieren, die für die Schlüsselerzeugung notwendigen Klassen zur Bestimmung der letzten i“ Buchstaben und zur Erzeugung von Codes nach dem Ansatz der Kölner Phonetik, ” sowie die Implementierung der dritten Phase der Sorted Neighborhood Methode und der 78 Brute-Force-Strategie. Die Installation gliedert sich dabei in drei Phasen. In der ersten Phase werden die entsprechen Java Klassen in die Datenbank geladen. In der zweiten Phase werden die Klassen innerhalb der Datenbank compiliert und in der dritten Phase wird eine PL/SQLFunktion bzw. PL/SQL-Prozedur als sog. Java Stored Procedures erzeugt. Mit Hilfe dieser Funktionen und Prozeduren werden dann die Inhalt der Java Klassen aufgerufen. Selbstverständlich ist, dass für Ausführung der Deinstallation eine Verbindung zur Datenbank bestehen muss. Nach dem Aufruf läuft die Deinstallation selbstständig ab und bedarf keines weiteren Interaktion mit dem Anwender. Während der Deinstallation werden alle Elemente, die vom Programm in der Datenbank installiert wurden, wieder entfernt. Hier zu gehören alle Java Klassen, die innerhalb des Package dbfunctions und die dazu gehörigen Classfiles, die aus den entsprechenden Klassen innerhalb der Datenbank erzeut wurden. Weiterhin werden die nach dem Prinzip der Java Stored Procedure aufgebauten Funktionen und Prozeduren wieder entfernt. Letzter Abeschnitt der Deinstallation sind die vom Programm angelegten Tabellen innerhalb der Schemata des Anwenders. Um die Installation, wie auch die Deinstallation, auszuführen, ist es nötig eine SQL-Datei im SQL-Developer zu öffnen und mit Hilfe des Befehls Skript ausführen“ zu starten. ” Nach Abschluss des Skriptes sind Installation bzw. Deinstallation abgeschlossen. Die Skriptdateien sind folgendermaßen benannt: • Installation: installation.sql • Deinstallation: deinstallation.sql 6.6 Ergebnisse Wie in den Anforderungen beschrieben, soll das Programm Matchings berechnen und diese entsprechende Klassen zu ordnen. Die Matchingpaare werden entweder durch die Sorted Neighborhood Methode oder durch die Brute-Force-Strategie ermittelt und liegen in Tabellen(Beispiel: siehe Tabelle 6.1) vor. Die Tabellen bestehen dabei aus drei Spalten. Hierbei handelt es sich um die beiden als Matching identifizierten String in jeweils einer Spalte und den errechneten Ähnlichkeitswert in einer weiteren Spalte. Um nun die verschieden Matchings in Klassen einzuordnen, wird aus der Ergebnistabelle eine Graphstruktur berechnet. Dies ist vor allem von Nutzen, da so nach der Einteilung in Klassen, es auch möglich ist, zu verifizieren, ob es sich bei den in einer Klassen vorhandenen Objekten um ein vollständiges Matching handelt. Dies bedeutet, liegt in ein Objekt innerhalb einer Klasse, so gibt es Matchings mit diesem Objekt zu allen anderen Objekten der selben Klasse. Es handelt bei dem verwendeten Graphen um einen ungerichteten 79 Objekt 1 A A C E D G Objekt 2 B C B D F H Grenzwert 0.9 0.8 0.96 0.86 0.89 0.82 Tabelle 6.1: Beispiel einer Ergebnistabelle Graphen ohne Mehrfachkanten. Die Struktur des Graphen ist folgendermaßen aufgebaut. Jedes Objekt wird durch einen Knoten dargestellt. Kommt eine Objekt mehrmals vor, so wird es immer nur durch denselben Knoten repräsentiert. Zwischen zwei Knoten existiert eine Kante genau dann, wenn es zwischen den Objekten, die durch diese beiden Knoten repräsentiert werden, ein Matching gibt. In der Implementierung wird der Graph durch Adjazenzliste repräsentiert. Der in Abbildung 6.37 dargestellte Graph resultiert aus den Abbildung 6.37: Beispielgraph für die in Tabelle 6.1 dargestellten Matchings Daten in Tabelle 6.1. Hierbei bilden die Knoten A, B, und C, D, E und F sowie G und H jeweils eine Klasse. Die Klassen mit den Knoten A, B, und C sowie den Knoten G und H bilden ein vollständiges Matching, da sie vollständig zusammenhängen. Die Knoten D, E und F bilden kein vollständiges Matching, trotzdem ähneln sich die in dieser Klasse liegenden Objekte, so dass dieser zumindest einer Betrachtung durch den Anwender bedürfen. Das endgültige Ergebnis ist dann in einer zweispaltigen Tabelle abgelegt. In der ersten Spalte ist vermerkt, ob es sich um eine vollständiges Matching handelt oder nicht und in der zweiten sind die einzelnen Klassen aufgelistet. Für das aktuelle Beispiel zeigt die Tabelle 6.2 wie ein mögliches Ergebnis aussehen würde. Der Aufbau der ErgebMatching full path full Klasse A, B, C D, E, F G, H Tabelle 6.2: Ergebnistabelle nisse ist unabhängig von der verwendeten Struktur im Programmablauf. Dies bedeutet 80 natürlich nur, dass das Schema der Tabelle für alle Varianten gleich ist, wohingegen sich die Inhalte wesentlich unterscheiden können. 81 Kapitel 7 Erweiterung auf Datenbankobjekte In der bisherigen Arbeit wurden immer nur Teile, ein Attribut einer Tabelle, eines Datenbankobjektes verwendet. Dies soll nun geändert werden und es sollen nun ganze“ ” Datenbankobjekte betrachtet werden. Hierzu soll in diesem Kapitel der bisherige Stand der Arbeit auf Datenbankobjekte erweitert werden. Zu Beginn des Kapitels wird beschrieben, inwieweit zwei Datenbankobjekte als ähnlich angesehen werden. Im nächsten sollen erste Experimente die Anwendung dieser Überlegeungen darstellen. Zum Schluss folgt die Vorstellung der Erweiterung der Implementation. 7.1 Ähnlichkeit von Datenbankobjekten Zunächst gilt es festzulegen, wann zwei Datenbankobjekte als ähnlich angesehen werden. Bisher fand die Betrachtung nur für ein Attribut statt und zwei Attributwerte wurden als ähnlich angesehen, wenn die Berechnung des Ähnlichkeitsmaßes einen bestimmten Grenzwert überschreitet. Da es sich bei den Datenbankobjekten in der Regel um mehr als ein Attribut handelt, gilt es zu bestimmen, wie diese Attribute betrachtet und bewertet werden. Bei der Bewertung der Attribute stehen mehrere Möglichkeiten zur Verfügung. Als Erstes soll die Möglichkeit betrachtet werden, dass die Werte jedes Attributes tupelweise zu einem String zusammengefasst werden. Zu beachten ist, dass die Kombination für alle Tupel in derselben Reihenfolge erfolgen muss. Dies gilt bei der Analyse innerhalb einer Datenquelle sowie bei der Verwendung von zwei Datenquellen. Bei der Verwendung von zwei Datenquellen muss der Anwender die Attribute in der Reihenfolge angeben, in der sie miteinander verglichen werden sollen. Damit bei einer späteren Analyse wieder Rückschlüsse auf die Ausgangsdaten gezogen werden können, werden die einzelnen Attributwerte durch ein bestimmtes Zeichen oder eine bestimmte Zeichenkombination getrennt. Anschließend lässt sich die Ähnlichkeit, wie bei der Betrachtung für einzelne Attribute, berechnen, also als einfacher Vergleich zweier Strings. 83 Das Einfügen der Zeichen zur Trennung der Attribute beeinflusst die Berechnung der Ähnlichkeitsmaße nur im geringen Maße. Es folgt daraus, dass bei zwei identischen Datenbankobjekten die Ähnlichkeitsmaße einen Wert von 1.0 liefern. Bei unterschiedlichen Datenbankobjekten, die aber dasselbe Objekt in der realen Welt beschreiben, führen die länger werdenden Strings dazu, dass der berechnete Ähnlichkeitswert im Vergleich zur Kombinationen der Attributwerte größer wird. Allerdings gilt dies konstant für alle Verfahren und Kombinationen. Eine weitere Möglichkeit wäre, dass die einzelnen Attribute separat betrachtet werden. Es würde also für jedes Attribut analysiert werden, ob es sich um ähnliche Tupel handelt. Anschließend ist festzulegen, wie viele Ausprägungen von Attributen als ähnlich angesehen werden müssen, damit zwei Datenbankobjekte als ähnlich angesehen werden. In der Regel werden dies alle vom Anwender zur Betrachtung gewählten Attribute sein. Analog gelten hier dieselben Einschränkungen, wie bei der Wahl der Spalten, wie sie im ersten Ansatz bereits erläutert wurden. An dieser Stelle sollen die Schwächen beider Ansätze betrachtet werden. Beide Ansätze sind sehr anfällig gegenüber Nullwerten. Enthält ein Attribut Nullwerte, so führt dies dazu, dass beim Ansatz der zusammengesetzten Strings die Datenbankobjekte aufgrund der daraus resultierenden großen Unterschiede als unähnlich angesehen werden. Beim Ansatz der Betrachtung der einzelnen Attribute führt der Vergleich eines Tupels mit Nullwert und eines Tupels mit irgendeinem Nicht-Nullwert immer zu einem Ähnlichkeitswert von 0.0 und somit zu einem unähnlich Datenbankobjekt. Bei der Auswahl der einzelnen Spalten ist zu beachten, dass keine Schlüsselspalten oder Spalten, in denen mit Hilfe von Integritätsbedingungen keine Duplikate vorliegen, ausgewählt werden, da sonst eine Bestimmung der Matchings nicht möglich ist, da diese Spalten, je nach ihrer Länge, für einen wesentlich niedrigeren Ähnlichkeitswert sorgen. Dies gilt ins Besondere für Elemente, die bei einer Sortierung nach dem Schlüssel weit auseinander liegen. 7.2 Fortgeschrittene Experimente In diesem Kapitel sollen Experimente betrachtet werden, bei denen Datenbankobjekte verwendet werden. Es sollen also mehrere Attrribute der Datenquelle ausgewählt werden und so die Kombination dieser Attribute als ein Datenbankobjekt angesehen werden. Zur Anwendung kommt hier die Tabelle PI.Schrift und es werden die Attribute Titel“ und ” Schrifttyp“ betrachtet. Die Ergebnisse sind in der Tabelle 7.1 dargestellt. ” 84 Ähnlichkeitsmaß ed ng qg fs edng edqg edfs qgng fsng fsqg Laufzeit in sec 625 195 195 315 618 614 664 327 382 376 Anzahl ähnliche Elemente 2785 19 0 1017 0 0 0 0 0 0 vollständige Matchings 1092 9 0 478 0 0 0 0 0 0 nicht vollständige Matchings 72 2 0 46 0 0 0 0 0 0 Tabelle 7.1: Analyse der Datenquelle PI.Schrift bzgl. Matchings von Datenbankobjekten 7.3 Erweiterung der Implementation Die bisherige Implementation können nur Werte innerhalb eines Attributes verwendet werden. Um nun auch komplette Datenbankobjekte vergleichen zu können, wird die Implementation um den Ansatz der Kombination der einzelnen Strings zu einem String erweitert. Dies ist relativ einfach möglich, da so nur vor der Ausführung der Sorted Neighborhood Methode sowie auch der Brute Force Strategie die Attribute zu einem String zusammengesetzt werden müssen und anschließend der bisherige Programmablauf ausführbar ist. Abschließend muss noch eine Erweiterung folgen, die nach Abschluss der Berechnung der Matchings, die einzelnen Attribute wieder trennt. Dies erfolgt anhand eines fest definierten Trennzeichenstrings. Aufgrund der Verwendung der Verfahren der bisherigen Implementation, verfügt auch das Verfahren nach der Erweiterung über die Vor- und Nachteile des bisherigen Verfahrens. Zu beachten ist, dass gerade bei der Sorted Neighborhood Methode die Phase der Sortierung stark abhängig von den ersten Zeichen der Strings ist. Dies kommt natürlich auch bei der Erweiterung der Implementation zum Tragen. Hierbei gilt, dass die Sortierung von der gewählten Reihenfolgen, in der die Attribute zu einem String zusammengefasst werden, anhängig ist. Allerdings bleibt dies im selben Umfang wie es in der bisherigen Implementierung zum Tragen kommt. Aufgrund der Erweiterung auf Datenbankobjekten ist es nötig, dass die Struktur der Ergebnisausgabe geändert werden muss. In der bisherigen Implementation werden die einzelnen Strings einer Klasse zu einem String zusammengefasst, so wie es in Tabelle 6.2 dargestellt ist. Dies soll nun erweitert werden, so dass die Struktur der Datenbankobjekte erhalten bleibt. Daraus ergibt sich, dass die Ergebnistabelle alle Attribute der Quelldaten enthält. Hierbei handelt es sich um dieselbe Anzahl an Attributen, da dies als Voraussetzung für die Ausführung des Algorithmus notwendig ist. Hinzu kommt eine Spalte, die die Klassenzuordnung beschreibt. Die Klassen werden durchnummeriert und Tupel einer Klasse mit der selben Zahl gekennzeichnet. Die zweite zusätzliche Spalte be- 85 Klasse Matching 1 full 1 full 1 full 2 path 2 path 2 path 3 full 3 full Attribut 1 Attribut 2 ... Attribut N A1 A2 ... AN B1 B2 ... BN C1 C2 ... CN D1 D2 ... DN E1 E2 ... EN F1 F2 ... FN G1 G2 ... GN H1 H2 ... HN Tabelle 7.2: Ergebnistabelle Datenbankobjekte schreibt, ob es sich bei der Klasse, in der das Tupel liegt, um ein vollständiges Matching handelt. In der Tabelle 7.2 wird die Vorgehensweise verdeutlicht. Die Tupel A, B, C, D, E, F, G und sind die Tupel, die vom Algorithmus in Klassen von Matchings zusammen gefasst worden sind. A1 bezeichnet den Wert des ersten Attributes vom Tupel A. 86 Kapitel 8 Ausblick In diesem Kapitel sollen Erweiterungsmöglichkeiten der Implementierung sowie Anwendungsgebiete beschrieben werden. Das Kapitel gliedert sich in drei Abschnitt. Im ersten Abschnitt wird auf die Erweiterungsmöglichkeiten der Ähnlichkeitsmaße im Vergleich zum Stand der Implementierung eingegangen. Im mittleren Abschnitt werden weitere Verfahren zur Reduzierung der Anzahl von Vergleichen vorgestellt. Im letzten Abschnitt erfolgt die Beschreibung von Anwendungsmöglichkeiten, für die in der Implementierung verwendeten Algorithmen. 8.1 Ähnlichkeitsmaße Bzgl. der Ähnlichkeitsmaße ist zu sagen, dass in der bisherigen Implementierung die zu vergleichenden Strings, nicht aufgrund von ähnlich Strukturen verglichen werden, sondern nur auf Basis ihrer Aussprache oder auf Basis ihres Zeichenvorrates, also das z.B. ein ß“ und ein ss“ als unähnlich angesehen werden. Wie man unschwer erkennen kann, ” ” handelt es sich hierbei um eine sprachspezifische Eigenschaft. Allein für die Deutsche Sprache sind hier noch weitere Beispiele denkbar, wie zum Beispiel die Erkennung von Umlauten, wie ä, ö und ü. Ebenfalls möglich ist eine Erweiterung zur Erkennung von Objekten, die in verschiedenen Sprache definiert sind. Voraussetzung hierfür ist, dass es ein Wörterbuch mit einer genauen Zuordnung von einem Wort der einen Sprachen zu einem Wort der anderen Sprache gibt. Gesucht würde dann nach Wörter, die jeweils als ähnlich der beiden Repräsentanten angesehen werden. Eine weitere Möglichkeit der Erweiterung wäre die Betrachtung von domänenspezifischen Abkürzungen. Als Beispiel hierfür fungiert das Abkürzen von Straße“ zu Str.“. ” ” Allerdings ist diese Variante sehr schwer zu realisieren, da so sehr viele Spezialfälle implementiert werden müssten, da es für jede Abkürzung mindestens eine Regel zur 87 Erkennung eines Matchings geben muss. Zudem ist hierfür das Wissen eines Experten der entsprechenden Domäne erforderlich, da nicht jeder, die in dieser Domäne üblichen Abkürzungen kennen kann. Allerdings muss diese Aufgabe nur einmal erfüllt werden, denn danach ist das Wissen für weiteren Anwendungen in der Domäne verfügbar. 8.2 Anzahl der Vergleiche In der bisherigen Implementierung wird die Anzahl der Vergleiche bei der Verwendung der Sorted Neighborhood Methode stark reduziert. Allerdings wird dabei nur auf die Schreibweise der Repräsentanten der Objekte eingegangen. Hier wäre es möglich, die Anzahl der Vergleiche über in der Datenbank vorhanden Information bereits im voraus zu reduzieren. Beispielweise, wenn alle Objekte über Geometrische-Informationen verfügen, ließe sich die Anzahl der Vergleiche reduzieren, in dem nur Objekte miteinander verglichen werden, die auch bzgl. ihrer geometrischen Positionierung nahe beieinander liegen. Allerdings muss hier nicht nur die Bestimmung über Koordinaten zur Anwendung kommen, sondern die Positionierung kann ebenfalls über amtliche Informationen wie Staaten, Bundesländer, Kreise, Gemeinden, Städte oder Postleitzahlen erfolgen. Allerdings verlangen auch diese Ansätze zusätzliches Wissen über die vorhandene Datenbank, um sicherzustellen, dass sich die Daten auf dasselbe System beziehen. Zu beachten ist hier, dass Koordinaten in verschiedenen Formen angegeben werden können und sich zusätzlich auf verschiedene Koordinatensysteme beziehen können. Bei den amtlichen Daten ist zu beachten, dass sich die Daten häufig nur auf einen bestimmten Bereich beziehen; zum Beispiel sind Postleitzahlen immer nur innerhalb eines Staates vergleichbar. 8.3 Anwendungsgebiete Hauptanwendungsgebiet des in der Implementation dargestellten Programms ist die Integration von Datenbanken. Nachdem die einzelnen Schemta integriert worden sind, ist festgelegt, welche Daten wo zu finden sind. An dieser Stelle kann das Programm zur Anwendung gebracht werden und die Integration der Daten durchgeführt werden. Hierfür ist erforderlich, dass die Daten nach der Schemaintegration in Tabellenform vorliegen. Es werden dann Matchings berechnet, die für eine mögliche Fusion in Frage kommen. Konkret wird hier also die Frage beantwortet, ob es Elemente in beiden Datenquellen gibt, die dasselbe Element in der realen Welt beschreiben. Ein weiteres Anwendungsgebiet ist der Bereich der Ähnlichkeitsanfragen. Hier gilt es, für einen gesuchten Begriff geeignete Matchingpartner zu finden. An dieser Stelle lassen sich die Eigenschaften der Sorted Neighborhood Methode ausnutzen, um eine sehr effektive Suche zu implementieren. In der Datenquelle, in der nach passenden Matchings 88 gesucht werden soll, liegen bereits für alle Elemente die erzeugten Schlüssel vor. Für das zu suchende Elemente wird zunächst sein Schlüssel erzeugt. Anschließend erfolgt die Suche nur in den für diesen Schlüssel umliegenden Bereichen(Fenstern). Daraus folgt, dass das Element nicht mit jedem anderen verglichen werden muss, sondern nur mit einer kleinen Auswahl. Ein weiterer Vorteil entsteht durch die Verwendung der Ähnlichkeitsmaße, da so auch Elemente erkannt werden, die nicht vollständig mit dem Suchbegriff übereinstimmen, aber vielleicht durch den Anwender gemeint waren und dieser sich bei der Eingabe nur vertippt hat. 89 Anhang A SQL und PL/SQL Algorithmus A.1: PL/SQL-Blöcke zur Verwendung einer Java-Klasse in einer Oracle-DB 1 create or replace java source named ’’Soundex’’ as 2 3 public class <<classname>> { 4 ... 5 } 6 / 1 alter java source ’’Soundex’’ compile; 1 create or replace function get_soundex_sim( a_string in varchar2, b_string in varchar2 ) 2 return number is language java name ‘SoundexDB.soundex_sim(java.lang .String, java.lang.String) return double’; 1 SELECT a.title, b.title, get_soundex_sim(a.title, b.title) FROM MOVIEDB.production a, MOVIEDB.production b; 91 Anhang B XSLT 1 2 3 4 5 6 7 8 9 10 11 12 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="osm"> <xsl:result-document href="NODE.txt"> <xsl:for-each select="node"> "<xsl:value-of select="@id" />","<xsl:value-of select="@lat" />"," <xsl:value-of select="@lon" />",</xsl:for-each> </xsl:result-document> <xsl:result-document href="WAY.txt"> <xsl:for-each select="way"><xsl:if test="nd[position()=1]/@ref=nd[ position()=last()]/@ref">"<xsl:value-of select="@id" />","true"</ xsl:if><xsl:if test="nd[position()=1]/@ref!=nd[position()=last() ]/@ref">"<xsl:value-of select="@id" />","false"</xsl:if>,</ xsl:for-each> 13 </xsl:result-document> 14 15 <xsl:result-document href="RELATION.txt"> 16 <xsl:for-each select="relation">"<xsl:value-of select="@id" />",< /xsl:for-each> 17 </xsl:result-document> 18 19 <xsl:result-document href="REF.txt"> 20 <xsl:for-each select="way"><xsl:variable name="wayid" select="@id "/><xsl:for-each select="nd">"<xsl:value-of select="$wayid" /> ","<xsl:value-of select="@ref" />","<xsl:value-of select=" position()" />",</xsl:for-each></xsl:for-each> 93 21 </xsl:result-document> 22 23 24 <xsl:result-document href="TAG.txt"> 25 <xsl:for-each select="node()"><xsl:variable name="nodeName" select="name()"/> 26 <xsl:variable name="ids" select="@id"/><xsl:for-each select="tag" >" <xsl:value-of select="$ids" />","<xsl:value-of select="$ nodeName" />","<xsl:value-of select="@k" />","<xsl:value-of select="@v" />",</xsl:for- each></xsl:for-each> 27 </xsl:result-document> 28 29 <xsl:result-document href="MEMBER.txt"> 30 <xsl:for-each select="relation"><xsl:variable name="relationid" select="@id"/><xsl:for-each select="member">"<xsl:value-of select="$relationid"/>","<xsl:value-of select="@type" />","< xsl:value-of select="@ref" />","<xsl:choose><xsl:when test=" string-length(@role)=0">null</xsl:when><xsl:otherwise>< xsl:value-of select="@role"/></xsl:otherwise></xsl:choose>","< xsl:value-of select="position()" />",</xsl:for-each></ xsl:for-each> 31 </xsl:result-document> 32 </xsl:template> 33 34 </xsl:stylesheet> Algorithmus B.1: XSLT-Transformation der Datenquelle Openstreetmap 94 Anhang C Experimente Bei der Tabelle C.1 handelt es sich um einen Ausschnitt aus der Tabelle PI.Schlagworte, der bei der Analyse der Sorted Neighborhood Methode zur Anwendung kommt. Die Tabelle enthält eine Spalte, die zur besseren Übersicht nebeneinander dargestellt ist. SOURCE object-oriented methods object-oriented multimedia object oriented software development object-oriented software development object-oriented software design object oriented software design object-oriented software specification object-oriented systems object-oriented specification object hierarchy object hierarchy diagram object design object as unit of design object as unit of structure and behaviour object association object aspect object as process object history queries 95 SOURCE object history constraints object histories object occurrence state object description object descriptions as units of design object descriptor object bahaviour object behaviour object behavior Object/Behavior Diagrams object-behaviour model (OBM) object paradigm object base object-based, OO paradigm object based databases object-based data models object-based programming object-based programming environment SOURCE object based view object-based language object-based models object-based specification language object base environment for simulation object base instance object-bases object base scheme objectbase schema Object-Pascal object property object preservation object preserving operation object-preserving operation object preserving operator semantics object preserving join object preserving query object DBS object-feature logic object view object view hierarchy object views object filter object variable object version object versioning object visualization object vs. value object-generating operation object generating query object query language object query language (OQL) object graph object ggregation object cooperation object collaborations object calculus object community object communities object communication object communication model Object Communication Diagram object composition SOURCE object context object concept object constraint object constraint language (OCL) object life cycle object lifecycle object life-cycles object life cycles object logic object logics object logic (OBLOG) object model object-module design object modelling object modeling object modeling technique Object Modeling Technique (OMT) object-model-diagrams object model for spatial objects object models object metamodel for object diagram object metamodel for relational databases object metamodel for state diagram object methods object-migration object migration object migration and classification object migration inventory object migration pattern object machine object management object management system object manager architecture object naming object morphism object merging object normalforms object refinement object request broker object-relation model object relation network object relationa concepts object-relational 96 SOURCE object relational object-relational database object-relational databases object-relational databases (ORDBS) object-relational database system object-relational database systems object-relational database schema objectrelational data model object-relational data model object-relational DB design object-relational DBMS object-relational DBMS (ORDBMS) object-relational DBMS architecture objectrelational DBS object-relational DBS object-relational DBS (ORDBS) objectrelational DBS (ORDBS) object-relational DB schema design object-relational query optimization objectrelational MMDBS object relational sql object relationship object-relationship model object-relationship model (ORM) object relationships object-role model object-role modelling object role models object-role models object roles object transformation Object Transformer Generator object reorganization Object-Z object Z object subclass hierarchy (OSH) object signature object semantics object-centric system object sharing object servers object society object societies SOURCE object society specification object specification object specification and verification object specification library object specification logic object specification logic (OSL) object specification language object specification language (OSL) object specifications object specialization object specialization vs. type specialization object splitting object state object state event object storage object storage structures object structure object structure model object structure server Object SQL Object SQL (OSQL) object clipping object class object classification object class interface object classes object clustering object creation object creation and destruction object creating join HiPAC features objects vs. processes objects vs. the target system objects vs. values ObjectSQL objectsql HiPAC knowledge model objectchart objectcharts ObjectScript AP5 (dependend language etc.) OBD (object-behaviour diagrams) update update-operation 97 SOURCE update operation updatable record field update propagation Update propagation update propagation algorithm update problem update program update dependencies updated constraint update transactions update translation update equivalence update control in logic programs update constraints update expansion update logic update language update languages update modification update-in-place update-independent triggers update independence updating tables updating views updating / recording / correcting information update reversibilty update related problems update rules Tabelle C.1: Ausschnitt aus der Tabelle PI.Schlagwort 98 SOURCE1 SOURCE2 object oriented software development object-oriented software development object-oriented software design object oriented software design object description object descriptor object bahaviour object behaviour object bahaviour object behavior object behaviour object behavior object base object-bases object base scheme objectbase schema object preserving operation object-preserving operation object view object views object version object versioning object query language object query language (OQL) object community object communities object life cycle object lifecycle object life cycle object life-cycles object life cycle object life cycles object lifecycle object life-cycles object lifecycle object life cycles object life-cycles object life cycles object logic object logics object model object models object modelling object modeling object modeling technique Object Modeling Technique (OMT) object-migration object migration object-relational object relational Tabelle C.2: Händisch ausgewällte Matchings - Teil 1 Die Tabelle C.2 zeigt die für die Analyse der Sorted Neighborhood Methode notwendigen per Hand bestimmten Matchings. 99 SOURCE1 SOURCE2 object-relational database object-relational databases object-relational database object-relational databases (ORDBS) object-relational database system object-relational database systems objectrelational data model object-relational data mode object-relational DBMS object-relational DBMS (ORDBMS) objectrelational DBS object-relational DBS objectrelational DBS object-relational DBS (ORDBS) objectrelational DBS objectrelational DBS (ORDBS) object-relational DBS object-relational DBS (ORDBS) object-relational DBS objectrelational DBS (ORDBS) object-relational DBS (ORDBS) objectrelational DBS (ORDBS) object relationship object relationships object-role model object role models object-role model object-role models object role models object-role models Object-Z object Z object society object societies object specification logic object specification logic (OSL) object specification language object specification language (OSL) Object SQL Object SQL (OSQL) object specification object specifications object class object classes objectchart objectcharts update-operation update operation update propagation Update propagation update language update languages Tabelle C.3: Händisch ausgewällte Matchings - Teil 2 100 Abbildungsverzeichnis 2.1 Abstand der Tasten R und B auf einer Tastatur . . . . . . . . . . . . . . 9 3.1 Kombination von Ähnlichkeitsmaßen - nacheinander . . . . . . . . . . . . 24 3.2 Kombination von Ähnlichkeitsmaßen - parallel . . . . . . . . . . . . . . . 25 3.3 Kombination über die Länge von Vektoren . . . . . . . . . . . . . . . . . 26 3.4 Kombination über die Länge von Vektoren . . . . . . . . . . . . . . . . . 27 4.1 Sorted Neighborhood Methode - Verschieben des Fensters . . . . . . . . . 30 5.1 Sorted Neighborhood Methode - Grenzwert 0.70 bis 0.99 für 1 Ähnlichkeitsmaß - Tupel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Sorted Neighborhood Methode - Grenzwert 0.70 bis 0.99 für 1 Ähnlichkeitsmaß - Zeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Sorted Neighborhood Methode - Grenzwert 0.70 bis 0.99 für die Kombination von 2 Ähnlichkeitsmaßen - Tupel . . . . . . . . . . . . . . . . . . 43 Sorted Neighborhood Methode - Grenzwert 0.70 bis 0.99 für 2 Ähnlichkeitsmaße - Zeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Sorted Neighborhood Methode - Grenzwert 0.70 bis 0.99 für die Kombination von 3 Ähnlichkeitsmaßen - Tupel . . . . . . . . . . . . . . . . . . 44 Sorted Neighborhood Methode - Grenzwert 0.70 bis 0.99 für 3 Ähnlichkeitsmaße - Zeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5.7 True-Positives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.8 False-Negatives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 5.9 False-Positives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 5.10 Precision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 5.11 Recall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 5.12 F-Measure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 5.2 5.3 5.4 5.5 5.6 101 6.1 Programmaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 6.2 Packageübersicht des Package model . . . . . . . . . . . . . . . . . . . . 57 6.3 Packageübersicht des Package model.bruteforce . . . . . . . . . . . . . . 58 6.4 Packageübersicht des Package model.dbfunctions . . . . . . . . . . . . . . 59 6.5 Packageübersicht des Package model.displaytable . . . . . . . . . . . . . 59 6.6 Packageübersicht des Package model.represent . . . . . . . . . . . . . . . 60 6.7 Packageübersicht des Package model.snm . . . . . . . . . . . . . . . . . . 61 6.8 Packageübersicht des Package view . . . . . . . . . . . . . . . . . . . . . 62 6.9 Packageübersicht des Package controller . . . . . . . . . . . . . . . . . . 63 6.10 Packageübersicht des Package controller.bruteforce . . . . . . . . . . . . . 64 6.11 Packageübersicht des Package controller.loadtables . . . . . . . . . . . . . 65 6.12 Packageübersicht des Package controller.displaytable . . . . . . . . . . . . 66 6.13 Packageübersicht des Package model.represent . . . . . . . . . . . . . . . 66 6.14 Packageübersicht des Package controller.snm . . . . . . . . . . . . . . . . 67 6.15 Packageübersicht des Package controller.start . . . . . . . . . . . . . . . . 67 6.16 Packageübersicht des Package dbfunctions . . . . . . . . . . . . . . . . . 68 6.17 Packageübersicht des Package dbfunctions.snm . . . . . . . . . . . . . . . 69 6.18 Packageübersicht des Package dbfunctiions.similarity . . . . . . . . . . . 69 6.19 Packageübersicht des Package dbfunctions.bruteforce . . . . . . . . . . . 70 6.20 Packageübersicht des Package main . . . . . . . . . . . . . . . . . . . . . 70 6.21 Anmeldefenster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 6.22 Hauptfenster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 6.23 Tabellenauswahl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 6.24 Hauptfenster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 6.25 Sorted Neighborhood Methode - Wahl des Verfahrens zur Schlüsselgenerierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 6.26 Sorted Neighborhood Methode - Wahl der Fenstergröße . . . . . . . . . . 73 6.27 Sorted Neighborhood Methode - Wahl des/der Ähnlichkeitsmaß/es . . . . 74 6.28 Sorted Neighborhood Methode - Wahl der Kombination der Ähnlichkeitsmaße . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 6.29 Sorted Neighborhood Methode - Wahl des Grenzwertes - Kombination über die Vektorlänge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 102 6.30 Sorted Neighborhood Methode - Wahl des Grenzwertes . . . . . . . . . . 75 6.31 Sorted Neighborhood Methode - Start . . . . . . . . . . . . . . . . . . . . 76 6.32 Brute-Force-Strategie - Wahl des/der Ähnlichkeitsmaß/es . . . . . . . . . 76 6.33 Brute-Force-Strategie - Wahl der Kombination der Ähnlichkeitsmaße . . 77 6.34 Brute-Force-Strategie - Wahl des Grenzwertes - Kombination über die Vektorlänge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 6.35 Brute-Force-Strategie - Wahl des Grenzwertes . . . . . . . . . . . . . . . 78 6.36 Ergebnisfenster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 6.37 Beispielgraph für die in Tabelle 6.1 dargestellten Matchings . . . . . . . . 80 103 Tabellenverzeichnis 2.1 Matrix für das o.g. Edit-Distance-Beispiel . . . . . . . . . . . . . . . . . 7 2.2 Gewichte t(i, j) für das Maß des Abstandes auf der Tastatur . . . . . . . 10 2.3 Damerau-Levenshtein-Distance-Beispiel . . . . . . . . . . . . . . . . . . . 11 2.4 Kodierung Soundex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.5 Kodierung Kölner Phonetik . . . . . . . . . . . . . . . . . . . . . . . . . 14 5.1 Klassen von Paare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 5.2 Ergebnis: Wie lange dauert die Berechnung des Brute-Force-Ansatzes mit 200 Tupeln für ein Ähnlichkeitsmaß? . . . . . . . . . . . . . . . . . . . . 36 Ergebnis: Wie lange dauert die Berechnung des Brute-Force-Ansatzes mit 200 Tupeln mit zwei Ähnlichkeitsmaßen? . . . . . . . . . . . . . . . . . . 36 Wie viele verschiedene Schlüssel entstehen bei der Schlüsselerzeugung aus der Tabelle PI.SCHLAGWORTE? . . . . . . . . . . . . . . . . . . . . . . 39 5.5 Vergleich der Anzahl der Vergleiche . . . . . . . . . . . . . . . . . . . . . 41 5.6 Analyse der Datenquelle PI.Schlagwort . . . . . . . . . . . . . . . . . . . 51 5.7 Analyse der Datenquelle PI.Flit . . . . . . . . . . . . . . . . . . . . . . . 51 5.8 Analyse der Datenquelle MovieDB.Person . . . . . . . . . . . . . . . . . 52 5.9 Analyse der Datenquellen KVD und OSM . . . . . . . . . . . . . . . . . 53 6.1 Beispiel einer Ergebnistabelle . . . . . . . . . . . . . . . . . . . . . . . . 80 6.2 Ergebnistabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 7.1 Analyse der Datenquelle PI.Schrift bzgl. Matchings von Datenbankobjekten 85 7.2 Ergebnistabelle Datenbankobjekte . . . . . . . . . . . . . . . . . . . . . . 86 C.1 Ausschnitt aus der Tabelle PI.Schlagwort . . . . . . . . . . . . . . . . . . 98 C.2 Händisch ausgewällte Matchings - Teil 1 . . . . . . . . . . . . . . . . . . 99 5.3 5.4 105 C.3 Händisch ausgewällte Matchings - Teil 2 . . . . . . . . . . . . . . . . . . 100 106 Algorithmus 2.1 Algorithmus zur Bestimmung der Edit-Distance . . . . . . . . . . . . . . 7 2.2 Algorithmus zur Bestimmung des Soundex . . . . . . . . . . . . . . . . . 12 2.3 Algorithmus zur Bestimmung der Jaro-Distance . . . . . . . . . . . . . . 16 2.4 Algorithmus zur Bestimmung der Field-Similarity-Distance . . . . . . . . 17 4.1 Algorithmus der Sorted-Neighborhood-Methode . . . . . . . . . . . . . . 31 5.1 Test: Analyse Schlagwort-Tabelle . . . . . . . . . . . . . . . . . . . . . . 35 5.2 Test: Analyse Brute-Force-Ansatz - 200 Tupel - 1 Ähnlichkeitsmaß . . . . 35 5.3 Test: Analyse Brute-Force-Ansatz - 200 Tupel - 2 Ähnlichkeitsmaße . . . 36 5.4 Es werden nur Strings mit gleichem Anfangsbuchstaben verglichen. . . . 37 5.5 Es werden nur Strings verglichen, bei denen die ersten zwei Buchstaben identisch ist. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 5.6 Es werden nur Strings mit derselben Länge verglichen. . . . . . . . . . . 37 5.7 Es werden nur Strings verglichen, deren Länge sich um +/- 1 unterscheidet. 38 5.8 Es werden nur Strings verglichen, die durch denselben Soundex repräsentiert werden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Bestimmung des minimalen Fensterns . . . . . . . . . . . . . . . . . . . . 39 A.1 PL/SQL-Blöcke zur Verwendung einer Java-Klasse in einer Oracle-DB . . 91 B.1 XSLT-Transformation der Datenquelle Openstreetmap . . . . . . . . . . 93 5.9 107 Literaturverzeichnis [LN2007] U. Leser, F. Naumann: Informationsintegration, dpunkt.verlag, 1. Auflage, Heidelberg, 2007. [KS2005] N. Koudas, D. Srivastava: Approximate Joins: Concepts and Techniques, in: Proceedings of the International Conference on Very Large Databases (VLDB), S. 1363, 2005. [EIV2007] A. K. Elmagarmid, P. G. Ipeirotis, V. S. Verykios: Duplicate Record Detection: A Survey, in: IEEE Transactions on Knowledge and Data Engineering, Vol. 19, No. 1, Januar 2007. [ZLBL2004] J. Zhang, T. W. Ling, R. M. Bruckner, H. Liu: PC-Filter: A Robust Filtering Technique for Duplicate Record Detection in Large Databases, In F. Galindo, M. Takizawa, R. Traunmüller (eds.), Database and Expert Systems Applications 15th International Conference, DEXA 2004, Zaragoza, Spain, August 30 September 3, 2004, LNCS, Springer-Verlag, Berlin, 2004 [SLP2002] S. Y. Sung, Z. Li, S. Peng: A fast ltering scheme for large database cleansing, In K. Kalpakis (ed.), Proceedings of the Eleventh International Conference on Information and Knowledge Management, CIKM 2002 : November 4 - 9, 2002, McLean, Virginia, USA, ACM Press, New York, NY, 2002 [ME1996] E. Monge, C. Elkan: The Field Matching Problem: Algorithms and Applications, In E. Simoudis, J. Han, U. M. Fayyad (eds.), Proceedings of the Second International Conference on Knowledge Discovery and Data Mining, AAAI Press, Menlo Park, Calif., 1996 [BRA2007] M. Bramer: Principles of Data Mining Springer-Verlag, London, 2007 [HS1995] M. A. Hernández, S. J. Stolfo: The Merge/Purge Problem for Large Databases, In M. Carey, D. Schneider (eds.), Proceedings of the 1995 ACM SIGMOD International Conference on Management of Data, San Jose, May 22-25, 1995, SIGMOD Record 2, ACM Press, New York, 1995 [HS1998] M. A. Hernández, S. J. Stolfo: Real-world Data is Dirty: Data Cleansing and The Merge/Purge Problem, Data Mining and Knowledge Discovery 2:1 (1998), 9-37. 109 [MB2006] A. Mazeika, M. H. Böhlen: Cleansing Databases of Misspelled Proper Nouns, In Proceedings of the First Int. VLDB Workshop on Clean Databases, CleanDB 2006, September 11, 2006, Seoul, Korea, 2006. [Le0809] U. Leser: Vorlesung Informationsintegration, Humboldt Universität, Wintersemester 2008/2009, Kap. 24 Duplikaterkennung. [Wo2009] P. Wolski: Entwicklung von Werkzeugen zur Datenbereinigung in relationalen Datenbanken, Bachelorarbeit, Leibniz Universität Hannover, 2009. [Pa2010] R. Parchmann: Skript zur Vorlesung Zeichenkettensuche, Leibniz Universität Hannover, Sommersemester 2010. 110 Erklärung Hiermit versichere ich, dass ich die vorliegende Arbeit und die zugehörige Implementierung selbststandig verfasst und dabei nur die angegebenen Quellen und Hilfsmittel verwendet habe. Hannover, 03. Mai 2012 Andreas Prante 111