ISSN 1436-056X CLUE-Arbeitsberichte Nummer 4 CLUE Technical Reports Number 4 Thomas Künneth Datenbankgestützte Speicherung von Korpora CLUE Friedrich-Alexander-Universität Erlangen-Nürnberg Institut für Germanistik Abteilung für Computerlinguistik Prof. Dr. Roland Hausser, Ph. D. Künneth, Thomas: Datenbankgestützte Speicherung von Korpora / Thomas Künneth – 1. Aufl. – Erlangen: Abt. f. Computerlinguistik (CLUE), Friedrich-AlexanderUniversität Erlangen-Nürnberg, 2001 [CLUE-Arbeitsberichte / CLUE Technical Reports, 4; Hrsg. Leidner] ISSN 1436–056X Thomas Künneth 1999–2001. First published 2001. Friedrich-Alexander-Universität Erlangen-Nürnberg Institut für Germanistik Abteilung für Computerlinguistik (CLUE) Bismarckstraße 12 91054 Erlangen Bundesrepublik Deutschland Gesetzt mit LATEX in 11 pt Times und News Gothic. Printed in Germany. v. Jochen Vorwort des Herausgebers Der vorliegende Band ist die vierte Veröffentlichung in der Reihe CLUEArbeitsberichte/CLUE Technical Reports, die wissenschaftliche Arbeiten aus der Computerlinguistik der Forschergemeinschaft in deutscher oder englischer Sprache zur Verfügung stellen und dadurch Aktivitäten der Abteilung für Computerlinguistik (CLUE) der Friedrich-Alexander-Universität Erlangen-Nürnberg dokumentieren möchte. Die zugrundeliegende Magisterarbeit wurde im September 1999 an der Philosophischen Fakultät II (Sprach- und Literaturwissenschaften) eingereicht und angenommen. Thomas Künneth berichtet hier von S AN R EMO, seinem Ansatz zur Verwendung relationaler Datenbank-Managementsysteme (DBMS) für die Speicherung von Korpora. Der Ansatz resultiert aus den Erfahrungen des Systems von Zierl (1997, Band 1 dieser Reihe), das sehr leistungsfähig ist, aber dessen Serverkomponente schwer zu warten und zu portieren war. Hier sollen nunmehr Wartungsarbeiten den RDMBS-Herstellern überlassen werden. Der Autor stellte seine LATEX-Quellen zur Verfügung. Michael Piotrowski entwickelte das Layout dieser Serie und besorgte den Satz auf seiner HP-9000Workstation unter UNIX. Prof. Dr. Roland Hausser, Ph. D. stellte freundlicherweise die finanziellen Mittel für den Druck bereit. Jochen Leidner, M. A. 〈[email protected]〉 Über den Autor. Thomas Künneth wurde am 29. August 1970 in Nürnberg geboren. Nach seinem Abitur studierte er an der Friedrich-AlexanderUniversität Erlangen-Nürnberg Linguistische Informatik, Germanistische Linguistik und Neuere deutsche Literaturgeschichte. Im Anschluß an sein Studium übernahm er die Stelle eines wissenschaftlichen Angestellten an der Abteilung für Computerlinguistik der Universität Erlangen-Nürnberg. Dort bereitet er zur Zeit seine Promotion über Speicherung und Abfrage umfangreicher annotierter Korpora vor (Betreuung: Professor Hausser). iii iv Inhaltsverzeichnis Vorwort des Herausgebers 1 2 iii Einleitung 1 1.1 Korpuslinguistik und Korpusdatenbanken . . . . . . . . . . . 1 1.2 Ziel der Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Gliederung . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Definitionen 5 2.1 Korpora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1.1 Der Korpusbegriff . . . . . . . . . . . . . . . . . . . 5 2.1.2 Inhalt und Struktur . . . . . . . . . . . . . . . . . . . 6 2.1.3 Type-Token-Unterscheidung . . . . . . . . . . . . . . 7 2.1.4 Formaler Aufbau . . . . . . . . . . . . . . . . . . . . 7 2.1.5 Vorstellung einiger Korpora . . . . . . . . . . . . . . 8 Datenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.2.1 Datenbasis, DBMS, Datenbank . . . . . . . . . . . . 9 2.2.2 Datenbanksprachen . . . . . . . . . . . . . . . . . . . 10 2.2.3 Datenbank-Operationen . . . . . . . . . . . . . . . . 11 2.2.4 Das relationale Datenmodell . . . . . . . . . . . . . . 13 2.2.5 Die Anfragesprache SQL . . . . . . . . . . . . . . . . 14 2.2 2.3 Korpusdatenbanken . . . . . . . . . . . . . . . . . . . . . . 16 2.3.1 Begriffsbestimmung . . . . . . . . . . . . . . . . . . 16 2.3.2 Operationen auf Korpora . . . . . . . . . . . . . . . . 17 2.3.3 Anforderungen an Korpusdatenbanken . . . . . . . . 18 2.3.4 Komponenten einer Korpusdatenbank . . . . . . . . . 19 2.3.5 Vorstellung verfügbarer Systeme . . . . . . . . . . . . 21 v 3 Die Korpusdatenbank SanRemo 23 3.1 Konzepte zur Speicherung von Korpora . . . . . . . . . . . . 23 3.1.1 Eigenentwicklungen . . . . . . . . . . . . . . . . . . 23 3.1.2 Relationale Datenbanksysteme . . . . . . . . . . . . . 24 3.1.3 Notwendige Ergänzungen . . . . . . . . . . . . . . . 25 SanRemo im Überblick . . . . . . . . . . . . . . . . . . . . . 26 3.2.1 Vorstellung des Systems . . . . . . . . . . . . . . . . 26 3.2.2 Die Komponenten im Überblick . . . . . . . . . . . . 27 3.2.3 Zur Wahl einer geeigneten Programmiersprache . . . . 28 3.2.4 Hardware-Basis und Voraussetzungen für den Betrieb . 28 3.2 4 5 6 Das Tabellenmodell von SanRemo 31 4.1 Allgemeine Überlegungen zur Tabellenstruktur . . . . . . . . 31 4.2 Abbildung von Korpuspositionen auf Attribute . . . . . . . . 31 4.3 Der 2-Tabellen-Ansatz . . . . . . . . . . . . . . . . . . . . . 33 4.3.1 Die Normalisierung von Tabellen . . . . . . . . . . . 33 4.3.2 Bewertung der 2-Tabellen-Struktur . . . . . . . . . . 34 4.4 n-Tabellen-Struktur . . . . . . . . . . . . . . . . . . . . . . . 35 4.5 Speicherung textbezogener Informationen . . . . . . . . . . . 36 4.5.1 Zugehörigkeit eines Textes zu einem Korpus . . . . . 37 4.5.2 Speicherung hierarchischer textbezogener Informationen 37 4.6 Zuordnung der beteiligten Tabellen zu einem Korpus . . . . . 38 4.7 Optimierung von Suchanfragen . . . . . . . . . . . . . . . . 39 4.8 Registrierung der Korpora in der Datenbank . . . . . . . . . . 41 4.9 Zusammenfassung der Tabellenstruktur . . . . . . . . . . . . 41 Filter 45 5.1 Allgemeine Bemerkungen . . . . . . . . . . . . . . . . . . . 45 5.2 SGML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.3 Exportfilter . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.4 Importfilter . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 5.4.1 Generelle Überlegungen . . . . . . . . . . . . . . . . 47 5.4.2 Importfilter für das BNC . . . . . . . . . . . . . . . . 48 Korpusanfragen 51 6.1 Korpusanfragen in SQL . . . . . . . . . . . . . . . . . . . . 51 6.1.1 SQL als Benutzeranfragesprache . . . . . . . . . . . . 51 6.1.2 SQL als Basis für Korpusanfragen . . . . . . . . . . . 51 6.1.3 KWIC-Listen . . . . . . . . . . . . . . . . . . . . . . 52 Allgemeine Anforderungen . . . . . . . . . . . . . . . . . . 52 6.2 vi 7 6.3 SgmlQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 6.4 Grafische Benutzeroberflächen . . . . . . . . . . . . . . . . . 53 Zusammenfassung 55 7.1 SanRemo im praktischen Einsatz . . . . . . . . . . . . . . . 55 7.1.1 Import des BNC . . . . . . . . . . . . . . . . . . . . 55 7.1.2 Anfragen . . . . . . . . . . . . . . . . . . . . . . . . 55 7.1.3 Einfügevorgänge . . . . . . . . . . . . . . . . . . . . 56 7.2 Zusammenfassung und Bewertung der Praxistauglichkeit . . . 56 7.3 Mögliche Erweiterungen . . . . . . . . . . . . . . . . . . . . 56 vii viii Abbildungsverzeichnis 2.1 Beziehung zwischen Type und Token . . . . . . . . . . . . . . 7 3.1 Schema einer RDBMS-basierten Korpusdatenbank . . . . . . 25 4.1 Beziehung zwischen den Tabellen types und tokens . . . . . . 34 4.2 Beispiel einer n-Tabellen-Struktur . . . . . . . . . . . . . . . 36 4.3 Darstellung von Kategorien in der Tabelle info . . . . . . . . . 38 4.4 An der n-Tabellen-Struktur beteiligte Tabellen . . . . . . . . . 42 ix x 1 Einleitung 1.1 Korpuslinguistik und Korpusdatenbanken Traditionell beschäftigen sich linguistische Untersuchungen mit der Struktur von Sprache. Hierbei stehen die Elemente sprachlicher Kommunikation sowie ihre Beziehung zueinander, insbesondere das Verknüpfen von kleineren Einheiten zu komplexeren Konstruktionen, im Mittelpunkt. Die Korpuslinguistik untersucht Sprache aus einem anderen Blickwinkel: Sie analysiert die tatsächliche Verwendung von Sprache in bestimmten Situationen, wobei sowohl lexikalische wie syntaktische Einheiten Gegenstand der Untersuchung sein können. Basis aller korpuslinguistischen Arbeiten sind Textsammlungen, die nach bestimmten Kriterien zusammengestellt wurden. Solche Korpora bieten einen Ausschnitt sprachlicher Kommunikation, an dem bestimmte linguistische Phänomene untersucht werden können. Die Verwendung von Korpora ist nicht an den Einsatz von Computern gebunden. Schon vor der allgemeinen Verfügbarkeit von Computern wurde korpuslinguistische Forschung betrieben. Allerdings stellen Rechner bei der Arbeit mit Korpora eine enorme Arbeitserleichterung dar. Zudem wären viele der heute verfügbaren Korpora ohne leistungsfähige Computeranlagen alleine aufgrund ihrer Größe nicht zu warten. Die Steigerung der Leistungsfähigkeit der Maschinen läßt sich an der Größe bekannter Computerkorpora belegen. Bestand ein Korpus, das 1964 an der Brown University entwickelt wurde, aus 500 Texten mit jeweils ungefähr 2000 Wörtern, enthielt die Bank of English am 20.7.1998 329 Millionen Wörter. Hierbei spiegelt die Größe des Brown Corpus die Informationsmenge wieder, die sich zur Zeit dessen Entstehung mit Rechnern zu vertretbaren Kosten verarbeiten ließen. Zwar spielen Faktoren wie Rechengeschwindigkeit sowie die Kapazität der Massenspeicher aufgrund der Entwicklung der elektronischen Datenverarbeitung in den letzten dreißig Jahren nunmehr eine zu vernachlässigende Rolle, allerdings läßt sich eine solche Menge an Informationen nur mit geeigneten, spezialisierten Werkzeugen sinnvoll verarbeiten. 1 Programmsysteme, die eine Korpusanalyse ermöglichen, werden oft als Korpusdatenbanken (engl.: Corpus Query Systems) bezeichnet. Die vorhandenen Systeme basieren zumeist auf eigens entwickelten Datenbankkernen mit proprietärer Anfragesprache und uneinheitlicher Bedienung. Deren Implementierung und Wartung is aufwendig, eine Übertragung auf andere RechnerSysteme häufig problematisch. Aus diesen Gründen erscheint eine Suche nach Alternativen gerechtfertigt. 1.2 Ziel der Arbeit Gegenstand dieser Arbeit ist die Untersuchung der Verwendbarkeit von herkömmlichen relationalen Datenbanksystemen für die Speicherung und Abfrage umfangreicher Korpora. Im Verlauf der Arbeit wurde eine experimentelle Korpusdatenbank entwickelt, die auf der Basis eines geeigneten Tabellenmodells Korpusdaten sowie Annotationen speichern kann. In der Programmiersprache Perl geschriebene Werkzeuge erlauben das Einfügen von Korpora in die Datenbank sowie rudimentäre Anfragen an das System. Die Korpusdatenbank trägt den Namen S AN R EMO. Das Akronym steht für corpus analysis based on the relational model. Um eine grundsätzliche Praxistauglichkeit des verwendeten Tabellenmodells sowie der entwickelten Komponenten zu überprüfen, wurden Teile des British National Corpus in die Korpusdatenbank eingelesen. 1.3 Gliederung Diese Magisterarbeit beschäftigt sich mit den für die maschinelle Speicherung und Verarbeitung von Korpora notwendigen linguistischen und informationstechnischen Konzepten, die die Basis für die Implementierung einer Korpusdatenbank unter Verwendung eines relationalen Datenbanksystems bilden, und stellt Erkenntnisse, die sich im Rahmen der Implementierung von S AN R EMO ergaben, vor. Das zweite Kapitel beschäftigt sich mit den Themenkomplexen Korpora, Datenbanken und Korpusdatenbanken. Hierbei werden Begriffe aus dem Bereich Korpuslinguistik diskutiert. Ferner werden relationale Datenbanksysteme vorgestellt sowie Anforderungen und Komponenten von Korpusdatenbanken erörtert. Kapitel 3 diskutiert Eigenentwicklungen im Vergleich zu relationalen Datenbanksystemen als Basis für Korpusdatenbanken. Anschließend wird S AN R E MO und dessen Aufbau sowie die verfügbaren Komponenten vorgestellt. Das vierte Kapitel stellt Ansätze für die Speicherung von Korpusdaten in SQLTabellen vor und beschreibt die in S AN R EMO verwendeten Tabellen und Attribute. Kapitel 5 führt das in S AN R EMO verwendete Filter-Konzept ein und diskutiert dessen Vorteile. Ferner wird die Implementierung eines Importfilters für das Einlesen von Korpusdaten des British National Corpus vorgestellt. 2 Das sechste Kapitel widmet sich dem Komplex der Anfragesprachen und Interaktion mit dem Anwender und diskutiert allgemeine Anforderungen an Anfragesprachen. Kapitel 7 faßt die Ergebnisse der Magisterarbeit zusammen, beschreibt Erfahrungen im praktischen Einsatz von S AN R EMO und nennt Problemfelder sowie mögliche Ergänzungen der vorgestellten Korpusdatenbank. 3 4 2 Definitionen Dieses Kapitel thematisiert die Bereiche Korpuslinguistik und Datenbanken. Ferner werden spezielle Datenbanksysteme für die Speicherung und Abfrage von Korpora beschrieben. In diesem Zusammenhang werden Anforderungen an solche Systeme diskutiert sowie verfügbare Programme vorgestellt. 2.1 Korpora 2.1.1 Der Korpusbegriff Der Begriff Korpus findet in unterschiedlichen Bedeutungen Verwendung. In seiner allgemeinen Form bezeichnet er Sammlungen von Texten, die aus formalen oder inhaltlichen Gründen als zusammen gehörig angesehen werden. Beispielsweise bildet das Werk eines Schriftstellers oder ein Teil davon ein Korpus. Die Zugehörigkeit eines Textes zu diesem Korpus ergibt sich aus der Urheberschaft des Verfassers.1 In der Korpuslinguistik wird der Begriff enger gefaßt. Korpora werden gezielt zusammengestellt, wobei die Auswahl der Texte aufgrund ihrer Zugehörigkeit zu einer bestimmten Kategorie oder Domäne erfolgt. Aus diesem Grund decken Korpora immer einen (durch die Auswahl der Texte vorgegebenen) Ausschnitt einer Sprache ab. Francis definiert ein Korpus als „a collection of texts assumed to be representative of a given language, dialect, or other subset of a language, to be used for linguistic analysis“2 . Die Auswahl von Texten kann auch aufgrund nichtsprachlicher Kriterien erfolgen oder durch außersprachliche Faktoren beeinflußt werden, allerdings geschieht eine entsprechende Auswahl stets vor dem Hintergrund des intendierten Zwecks eines Korpus. Dies läßt sich am Beispiel des Brown Corpus aufzeigen. Es wurde von W. Nelson Francis und Henry Kucera an der Brown University zusammengestellt 1 2 Siehe hierzu [Aston 1998, S. 4] [Svartvik 1992, S. 17] 5 und 1964 erstmals zugänglich gemacht. Das Korpus enthält englischsprachige Prosa, die in den USA während des Kalenderjahres 1961 gedruckt wurde. 3 Neben der auf dem Inhalt basierenden Einteilung in Kategorien sind für eine Auswahl eines potentiellen Textes auch textexterne Kriterien wie dessen Erscheinungsjahr von Belang. Die Erstellung oder Bearbeitung von Korpora ist im Prinzip nicht an die Verwendung von Computern gebunden, allerdings gestatten Rechner einen äußerst flexiblen und schnellen Zugriff auf den Datenbestand. Aston und Burnard bemerken hierzu: „It is worth noting however that there is very little in the practice of corpus linguistics which could not equally well be done in principle by non-automatic means. However, in general, corpora are understood to be computer-processable corpora.“ 4 Zudem hat sich die durchschnittliche Größe von Korpora, die sich aus der Zahl der Wortformen aller Texte sowie zusätzlich gespeicherten Informationen ergibt, in den letzten 30 Jahren vervielfacht. Das Brown Corpus besteht beispielsweise aus 500 Texten zu jeweils ca. 2000 Wörtern. Das Mitte der Neunziger fertiggestellte British National Corpus (BNC) hingegen besteht aus über 100 Millionen laufender Wortformen. Erscheint die Erschließung des Brown Corpus ohne Rechnerunterstützung zumindest theoretisch noch möglich, ist dies im Falle des BNC auszuschließen. Solch enorme Datenmengen lassen sich nur mit spezialisierten Werkzeugen effizient verarbeiten, die eine zumindest teilweise Automatisierung von Analysen ermöglichen. 2.1.2 Inhalt und Struktur Ziel bei der Erstellung von Korpora ist die Dokumentierung eines bestimmten Ausschnitts oder Aspekts einer Sprache. Dieser ist bei der Auswahl der Texte zu berücksichtigen. Ferner sind Überlegungen, die die Anzahl der einzubeziehenden Texte sowie die Zahl der Wortformen je Text betreffen, anzustellen. Solche Anforderungen werden in der Design-Phase formuliert. Hierbei ist auch zu entscheiden, ob ein Korpus nach der Auswahl der Texte als abgeschlossen gilt, ob Texte zyklisch ausgetauscht werden oder der Textbestand stetig erweitert wird. Sinclair unterscheidet in diesem Zusammenhang zwischen sample corpora und monitor corpora.5 Sample corpora können nach der Auswahl der Texte als abgeschlossene Projekte gelten. Korrekturen am Korpusmaterial sind möglich, etwa um Fehler zu beseitigen, die während der Übertragung eines Textes in elektronische Form entstanden sind und erst nach Fertigstellung des Korpus gefunden wurden. Neue Texte werden allerdings nicht eingebracht. Solche Korpora dokumentieren den Zustand einer Sprache bzw. eines durch das Korpus abgedeckten sprachlichen Phänomens zu einem durch die Auswahl der Texte festgelegten Zeitpunkt bzw. Zeitabschnitt. Das British National Corpus sowie das Brown Corpus sind Beispiele für sample corpora. Monitor corpora hingegen werden laufend erweitert und spiegeln daher den aktuellen Zustand einer Sprache wider. Da durch die regelmäßigen Aktuali3 4 5 6 Siehe hierzu [Francis 1964] [Aston 1998, S. 5] [Sinclair 1991, S. 23f] sierungen umfangreiche Datenmengen anfallen, stellen monitor corpora hohe Anforderungen an das verwendete System in Bezug auf verfügbaren Speicherplatz sowie Rechengeschwindigkeit. Das 1991 durch die University of Birmingham und COBUILD gestartete Projekt Bank of English 6 ist mit 329 Millionen Wortformen ein sehr umfangreiches monitor corpus. Häufig enthalten Korpora Informationen, die zusätzlich zu den eigentlichen Texten abgespeichert werden. Solche Daten können sich auf ganze Texte sowie einzelne Wortformen beziehen. Erstere beinhalten Angaben zu Herkunft, Verfasser oder etwaigen Copyright-Bestimmungen der Texte eines Korpus. Solche Informationen können bei Anfragen sinnvoll sein, um etwa den Suchraum gezielt einzuschränken. Von großer Bedeutung sind auch Korpus-Annotationen, die etwa die Klassen der gespeicherten Wortformen enthalten oder Hinweise auf die Grundform eines Wortes geben. Im Idealfall liegen diese Informationen für jede Wortform vor. Allerdings können sich solche Informationen auch auf Ebenen zwischen Text und Wortform beziehen, etwa, wenn spezielle Markierung Anfang oder Ende von Überschriften, Absätzen oder Kapiteln kennzeichnen. Computer-basierte Korpora sollten in jedem Fall Zugriff auf solche Informationen ermöglichen. Gerade die Suche nach sprachlichen Phänomenen, die sich nicht nur in Wortformen manifestieren, machen Korpora für die linguistische Analyse wertvoll. 2.1.3 Type-Token-Unterscheidung Das linguistische Konzept der Unterscheidung zwischen Types und Tokens wurde durch den amerikanischen Philosophen C. S. Peirce (1839–1914) eingeführt. Tokens sind konkrete Realisierungen einer (abstrakten) Form, dem Type. Im Falle des Wortes linguistics entspricht jedes Auftreten einer solchen Zeichenkette einem Token. Alle Token, die der gleichen Zeichenkette entsprechen, verweisen auf ein Type. Abbildung 2.1 verdeutlicht diesen Sachverhalt. Abbildung 2.1: Beziehung zwischen Type und Token Type Text Token Dieser Text besteht aus Tokens. Ein weiterer Text. 2.1.4 Formaler Aufbau Jedes Korpus besteht aus einer Menge von Texten, deren Länge im Prinzip beliebig variieren kann. Allerdings wird man in der Regel auf eine annähernd identische Textgröße achten, um eine ausgewogene Verteilung der Wortformen zu gewährleisten. Bei den Wortformen eines Korpus handelt es sich um konkrete Realisierungen, also Tokens. Die Gesamtmenge aller Token eines Korpus ergibt eine Abfolge von n Korpuspositionen. Hierbei wird jeder Position eine bestimmte Zahl 6 〈http://www.cobuild.collins.co.uk/boe_info.html〉 7 positionaler Attribute zugeordnet. Christ und Schulze definieren positionale Attribute als solche, „bei der jeder Corpusposition eine Zeichenkette zugeordnet ist. Insbesondere zählt die Sequenz der Wörter, aus denen das Corpus aufgebaut ist, zu den positionalen Attributen“ 7 . Weitere mögliche positionale Attribute sind grammatische Kategorien (beispielsweise part of speech tags) sowie die Grundformen der Wörter eines Textes. Jedes positionale Attribut erhält einen eindeutigen Bezeichner, der den Zugriff auf die an einer bestimmten Korpusposition gespeicherten Informationen ermöglicht. Für die obligatorische Wortsequenz wird im allgemeinen der Attributname word verwendet, die grammatische Kategorie part of speech wird mit POS gekennzeichnet. Sei m die Zahl der positionalen Attribute eines Korpus, dann enthält jede Korpusposition i mit 1 ≤ i ≤ n genau m Name-WertPaare. Die Größe n entspricht hierbei der Gesamtzahl der im Korpus abgelegten Token und bestimmt sich aus der Zahl der Texte, die ein Korpus enthält, sowie der Zahl der Wortformen je Text. Wurde ein Korpus mit grammatischen Kategorien annotiert, ergibt die Menge aller verwendeten Kategorie-Ettiketten das sog. tag set. Wie im letzten Abschnitt dargelegt wurde, enthält ein Korpus zumeist textbezogene Informationen, die Auskunft über Ursprung, Verfasser, Sparte oder Domäne eines Textes geben. Solche Angaben lassen sich nicht bestimmten Korpuspositionen zuordnen. Ein Korpusdatenbanksystem sollte dem Anwender jedoch die Möglichkeit geben, vorhandene Informationen abzufragen und ggf. fehlende Informationen zu ergänzen. 2.1.5 Vorstellung einiger Korpora Die Bedeutung computerbasierter Korpora für die linguistische Forschung hat in den letzten Jahren stark zugenommen. Ein Grund hierfür ist die Verfügbarkeit von Korpora mit mehr als 50 Millionen Wortformen. Diese ermöglichen eine Forschung in Bereichen, die sich durch kleine Korpora nicht erschließen lassen. Sinclair bemerkt hierzu: „The received wisdom of corpus linguistics is that fairly small corpora, of one million words or even fewer, are adequate for grammatical purposes, since the frequency of occurrence of so-called grammatical or functional words is quite high. [...] However, the availability nowadays of much larger corpora makes it possible to evaluate conventional grammatical statements.“ 8 2.1.5.1 The Brown Corpus Das Brown Corpus wurde ab 1961 von W. Nelson Francis und Henry Kucera an der Brown University speziell für den Einsatz mit Computern entwickelt. Als erstes computerbasiertes Korpus hat es nicht nur im Hinblick auf Umfang, Auswahl der Kategorien und allgemeinen Aufbau Vorbildcharakter. 7 8 8 [Christ 1994, S. 2f] [Sinclair 1991, S. 100] Die Erstellung des LOB (Lancaster-Oslo-Bergen) Korpus, das Aufbau und Struktur des Brown Corpus in Verbindung mit britisch englischen Texten übernimmt, sowie des LIMAS Korpus als Beispiel für ein deutschsprachiges Korpus verdeutlichen die Bedeutung des Brown Corpus. Das Korpus wurde mehrfach redigiert und kann daher als fehlerfrei betrachtet werden. 2.1.5.2 The British National Corpus Das British National Corpus (BNC) wurde zusammengestellt, um das gegenwärtig gebräuchliche britische Englisch möglichst umfassend zu dokumentieren. Es besteht zu 90 Prozent aus geschriebener Sprache. Die Texte wurden anhand der drei Kriterien Domäne, Jahr der Entstehung sowie Form der Veröffentlichung ausgewählt. Jedes Auswahlkriterium wurde ferner in verschiedene Kategorien unterteilt, für die ein prozentualer Anteil am Gesamtkorpus festgelegt wurde. 2.1.5.3 The Bank of English Ein Beispiel für ein sehr umfangreiches englisches Monitorkorpus ist die Bank of English (BoE). Das 1991 an der Universität Birmingham begonnene Projekt umfaßte im Juli 1998 329 Millionen laufende Wortformen. Das Korpus wird laufend um Textauszüge aus den unterschiedlichsten Quellen, etwa Zeitungen, Zeitschriften, Broschüren oder Flugblättern erweitert. Wie das BNC enthält die BoE gesprochene Sprache, die in transkribierter Form aufgenommen wird. Um auch gesprochene Sprache erfassen zu können, werden die Texte vor einer Übernahme in das Korpus transkribiert. 2.2 Datenbanken 2.2.1 Datenbasis, DBMS, Datenbank Der Begriff Datenbank wird häufig verallgemeinernd als Synonym für Datenbasis und Datenbanksystem gebraucht. Gerade die Gleichsetzung der Begriffe Datenbasis und Datenbanksystem ist aus technischer Sicht nicht zu rechtfertigen. Die Beziehung zwischen den genannten Termini soll daher in diesem Abschnitt dargestellt werden. Eine sehr allgemeine Umschreibung des Begriffs Datenbank geben Elmasri und Navathe: „A database is a collection of related data.“ 9 . Da auch die Wörter auf den Seiten eines Buches zueinander in Beziehung stehen, müßte ein solches Schriftstück als Datenbank angesehen werden, wenn man dieser allgemeinen Beschreibung folgt. Da dies zu verneinen ist, schreiben Elmasri und Navathe einer Datenbank mehrere indirekte Eigenschaften zu: „[...]a database has some source from which data are derived, some degree of interaction with events in the real world, and an 9 [Elmasri 1989, S. 3] 9 audience that is actively interested in the contents of the database.“10 . Der Zugriff auf die in einer Datenbank gespeicherten Informationen muß nicht zwingend in der Reihenfolge stattfinden, in der sie abgelegt wurden. Das Konzept einer Datenbank läßt sich keineswegs nur mit Computern realisieren. Adreßbücher und die aus Bibliotheken bekannten Karteikarten zur Verwaltung des Zeitschriften- und Bücherbestands genügen den skizzierten Anforderungen. Allerdings bieten Rechner zahlreiche Vorteile gegenüber einer manuellen Verwaltung. Beispielsweise können geeignete Programme auch umfangreiche Datenbestände in kurzer Zeit durchsuchen. Ferner können die Informationen auf unterschiedlichste Weise sortiert werden. Im Rahmen dieser Arbeit ist unter dem Begriff Datenbank ein computergestütztes System zu verstehen, sofern nicht ausdrücklich auf eine andere Bedeutung hingewiesen wird. Neben den eigentlichen Daten gehören dann eine geeignete Rechenanlage sowie spezielle Software zu einer Datenbank. Werkzeuge, die das Anlegen und Pflegen von Datenbeständen ermöglichen, bilden zusammen das Datenbasis-Management-System, das oft auch als Datenbanksystem, Datenbankverwaltungssystem, Database Management System oder DBMS bezeichnet wird. Dieses operiert auf der Datenbasis. Sie ist definiert als eine „Sammlung strukturierter Daten in einem entsprechend organisierten Speicher, zusammen mit denjenigen Daten, welche die Datenmodelle, die zugehörigen Datenstrukturen und die entsprechende Speicherorganisation beschreiben und zueinander in Bezug setzen“11 . Die Datenbasis enthält die zu speichernden Informationen in strukturierter Form. Sie wird mit dem DBMS aufgebaut und kontrolliert. Mit Hilfe einer Datenbeschreibungssprache (data description language) wird festgelegt, wie sich die Struktur der Daten dem Benutzer darstellt. Die Repräsentation der Daten auf dem Massenspeicher kann sich völlig von dieser logischen Sichtweise unterscheiden. Mit Hilfe der Datenbeschreibungssprache werden Satztypen sowie die ihnen zugeordneten Datenfelder benannt, und die Beziehungen zwischen einzelnen Sätzen festgelegt. 12 2.2.2 Datenbanksprachen Der Begriff Datenbanksprache faßt die Termini Datenbeschreibungssprache, Datendefinitionssprache und Datenmanipulationssprache zusammen. Die durch die Trennung der Begriffe suggerierte Unabhängigkeit der einzelnen Sprachen wird in der Praxis häufig durchbrochen. Beispielsweise enthält die noch ausführlich vorzustellende Sprache SQL sowohl Elemente einer Datenbeschreibungs- als auch einer Datenmanipulationssprache. Mit der Datenbeschreibungssprache wird, wie im vorangehenden Abschnitt erläutert wurde, die logische Struktur einer Datenbank festgelegt. Die Daten10 [Elmasri 1989, S. 4] 1997, →Datenbasis] 12 nach [Schneider 1997, →Datenbeschreibungssprache] 11 [Schneider 10 definitionssprache gestattet in generalisierten Datenbanksystemen die Definition von Schemata, die einen freien Zugriff auf beliebige Informationsbereiche ermöglichen. Schemata sind „Formale und in den meisten Fällen deskriptive (deklarative) Definitionen der in der Datenbank zugelassenen Typen von Datenstrukturen“13 . Die Datenmanipulationssprache (engl.: Data Manipulation Language, DML) dient dem Ausführen grundlegender Datenbank-Operationen. Dabei kann eine DML entweder in eine höhere Programmiersprache eingebettet oder als eigenständige Sprache realisiert werden. In diesem Fall wird sie häufig als Abfragesprache (engl.: Query Language) bezeichnet. 14 2.2.3 Datenbank-Operationen Durch das Generieren einer neuen Datenbasis werden die Voraussetzungen für spätere Zugriffe auf die Daten geschaffen, indem beispielsweise Speicher reserviert und die Zuordnung zwischen der durch eine Datenbeschreibungssprache vorgegebenen logischen Struktur und der physikalischen Repräsentation der Daten auf dem Massenspeicher hergestellt wird. Im allgemeinen gehen der Einrichtung einer Datenbasis umfangreiche Überlegungen zu Umfang, Zusammensetzung und Inhalt der Daten voraus, da die Struktur der Datenbank großen Einfluß auf die Antwortzeiten des Systems bei Anfragen hat und umfassende Änderungen am Aufbau der Datenbank im laufenden Betrieb nur mit großem Aufwand möglich sind. Ein weiterer grundlegender Vorgang ist das Einbringen neuer Daten in die Datenbank. Dies kann sowohl mit Elementen der DML erfolgen als auch durch spezielle Werkzeuge des DBMS. Der Vorteil bei der Verwendung einer Datenmanipulationssprache liegt in der gleichen Handhabung auf jedem Datenbanksystem, das die DML unterstützt. Allerdings stößt ihre Verwendbarkeit an Grenzen, wenn umfangreiche Datenmengen in die Datenbank eingefügt werden müssen. Eigene Versuche, die im Rahmen dieser Arbeit durchgeführt wurden, zeigen, daß die für das Einfügen einer bestimmten Menge an Daten benötigte Zeit bei Verwendung von Elementen der Anfragesprache SQL erheblich größer ist als bei Verwendung DBMS-spezifischer Dienstprogramme. Die Möglichkeit, im Datenbestand zu suchen, wird durch eine DML bereitgestellt und dient neben dem Auffinden abgelegter Informationen auch als Auswahl- oder Verknüpfungskriterium für weitere Operationen auf der Datenbasis. In diesem Zusammenhang sind verschachtelte Suchanfragen zu nennen, aber auch kombinierte Such- und Löschoperationen. Bei einer verschachtelten Suchanfrage wird ein Auswahlkriterium benutzt, um aus der Datenbasis Informationen zu erhalten. Ein weiteres Kriterium wird dann auf die durch den ersten Vorgang ermittelten Daten angewendet. Neben dem Einbringen und Suchen von Daten steht als weitere grundlegende Operation das Löschen von Informationen zur Verfügung. Löschvorgänge können mit Suchanfragen verknüpft werden. In diesem Fall werden diejenigen Daten gelöscht, die dem angegeben Auswahlkriterium genügen. Beispielsweise ließen sich aus einer Datenbank, die Bestellungen verwaltet, alle Aufträge 13 [Schneider 14 nach 1997, →Schema] [Schneider 1997, →Datenmanipulationssprache] 11 löschen, die bereits ausgeführt wurden oder deren Eingang mehr als drei Jahre zurück liegt. Neben den vorgestellten Operationen stellen Datenbanksysteme zumeist zusätzliche administrative Funktionen zur Verfügung, die etwa das Anlegen von Sicherungskopien der Datenbank gestatten, Konsistenzprüfungen des Datenbestands durchführen oder eine Zugriffskontrolle ermöglichen. 12 2.2.4 Das relationale Datenmodell Das relationale Modell bildet die formale Grundlage für viele Datenbanksysteme. Drei Teilbereiche befassen sich dabei mit der Frage nach • der Struktur von Daten • deren Integrität • der Möglichkeit ihrer Manipulation Im relationalen Datenmodell werden Informationen als eine Menge von Relationen gespeichert. Dabei entsprechen solche Relationen im Wesentlichen den Tabellen der Datenbanksprache SQL. Die theoretischen Grundlagen des relationalen Modells formulierte E. F. Codd 1970 in seinem Artikel A Relational Model of Data for Large Shared Data Banks. Date bemerkt in Bezug auf die Bedeutung der Veröffentlichung: „The entire field of relational database technology has its origins in that paper.15 .“ Systeme, die auf den Prinzipien des relationalen Modells basieren, werden im allgemeinen als relationale Datenbanksysteme bezeichnet. Eine Domäne (engl.: domain) faßt atomare Elemente gleichen Typs zusammen. Solche elementaren Objekte lassen sich im Sinne des relationalen Modells nicht weiter zerlegen. Date bezeichnet sie daher auch als Skalare 16 . Dabei wird einer Domäne ein Name, ein Datentyp sowie ein Format zugewiesen. Elmasri und Navathe nennen als Beispiele möglicher Domänen unter anderem die Menge aller gültigen 10-stelligen Telefonnummern in den Vereinigten Staaten, die Menge aller gültigen 9-stelligen Sozialversicherungsnummern, oder die (Teil-)Menge von Personennamen. 17 Ein möglicher Name für die Domäne US-amerikanischer Rufnummern wäre USAPhoneNumbers, als Format ließe sich die Zeichenkette (ddd)ddd-dddd angeben, wobei d eine Ziffer repräsentiert.18 An diesem Beispiel wird auch deutlich, daß Domänen und Datentypen keineswegs immer gleichzusetzen sind. Im Sinne des Datentyps gültige Skalare müssen keineswegs den durch die Domäne vorgegebenen Einschränkungen genügen. Beispielsweise ergibt nicht jede aus drei Ziffern bestehende Zahl einen in den Vereinigten Staaten gültigen area code. Domänen werden in Verbindung mit Attributen verwendet. Jedem Attribut wird neben einem Namen eine Domäne zugeordnet, die festlegt, welche Werte das Attribut annehmen kann. Da die Domäne eines Attributs dessen mögliche Inhalte charakterisiert, bestimmt die Menge der verwendeten Attribute die inhaltliche Struktur einer Relation. Eine solche Attributmenge heißt Relationsschema. Der Begriff Relation bezeichnet die tatsächliche Realisierung eines Relationsschemas (das häufig auch heading genannt wird) in Verbindung mit einer als body bezeichneten Menge von n-Tupeln. Ein n-Tupel enthält Attribut-WertPaare, deren Anzahl von den im Relationsschema angegebenen Attributen abhängig ist. Die Werte eines Attributs sind zwingend Elemente der dem Attribut 15 [Date 1997, S. 4] 1990, S. 251] 17 [Elmasri 1989, S. 136] 18 a. a. O. 16 [Date 13 zugewiesenen Domäne, haben also einen festen Wertebereich. Relationen haben stets folgende Eigenschaften: Tupel können nicht mehrfach auftreten, ihre Reihenfolge ist unbestimmt, ebenso die Abfolge der Attribut-Werte-Paare innerhalb eines Tupels. Ferner sind die Werte aller Attribute stets atomar. Aus der ersten Eigenschaft ergibt sich, daß jede Relation einen primären Schlüssel enthält. Diese sind Attribute, die zu keiner Zeit in mehr als einem Tupel den gleichen Wert enthalten können. Der Grad (degree) einer Relation entspricht der Zahl der Elemente der Relationsschemas. Er ist für eine Relation konstant. Die Kardinalität (cardinality) einer Relation gibt die Zahl der einer Relation zugeordneten n-Tupeln an. Sie ist zeitabhängig. 19 Veränderungen an der Zahl der Tupel einer Relation ergeben sich aus Operationen, die auf die Relation angewendet werden können. Die relationale Algebra definiert acht solche Operatoren, die eine oder zwei Relationen als Operanden haben, und eine neue Relation als Ergebnis liefern: RESTRICT, PROJECT, PRODUCT, UNION, INTERSECT, DIFFERENCE, JOIN, DIVIDE. Das Verknüpfen dieser Basisoperationen zu komplexen Ausdrücken kann aus unterschiedlichsten Gründen erfolgen. Date nennt als Beispiel unter anderem die Vergabe von Zugriffsrechten. 20 . In jedem Fall erlauben Ausdrücke aus der relationalen Algebra den sowohl lesenden (abfragenden) als auch schreibenden (manipulierenden) Zugriff auf Relationen, letztlich also den Datenbestand einer Datenbasis. 2.2.5 2.2.5.1 Die Anfragesprache SQL Entstehung und Entwicklung der Sprache Die Datenbankanfragesprache SQL hat Einzug in zahlreiche kommerziell vermarktete Datenbanksysteme gehalten und ist ferner ein durch die Gremien ANSI (American National Standards Institute) und ISO (International Organization for Standardization) normierter Standard. Ursprünglich wurde der Name SQL als Akronym für Structured Query Language interpretiert, zumindest in der standardisierten Form der Sprache steht er mittlerweile für sich selbst. 21 1974 definierte Donald Chamberlin am IBM Forschungslaboratorium in San Jose, Kalifornien, die Sprache SEQUEL (Structured English Query Language). Sie wurde als Prototyp (SEQUEL-XRM) implementiert. 1976/77 entstand SEQUEL/2, wurde aus rechtlichen Gründen jedoch in SQL umbenannt. 1977 wurde System R fertiggestellt, ein weiterer Prototyp, der einen großen Teil von SQL unterstützte. Der große Erfolg von System R – IBM hatte das System nicht nur intern eingesetzt, sondern auch an ausgewählte Kunden weitergegeben – veranlaßte neben IBM selbst auch andere Firmen, SQL-basierte Produkte zu entwickeln.22 2.2.5.2 Anwendungsmöglichkeiten SQL bietet die Möglichkeit, Daten bzw. deren Struktur zu definieren, auf sie lesend und schreibend zuzugreifen sowie sie anderweitig zu manipulieren. Dabei können Konstrukte zum einen direkt eingegeben werden, zum anderen besteht die Möglichkeit, SQL-Befehle in Programme einer höheren Programmiersprache einzubetten. Im ersten Fall stellt das Datenbanksystem eine Kom19 nach [Date 1990, S. 257ff] 1990, 314] 21 siehe hierzu [Date 1997, S. 3f] 22 ebenda 20 [Date 14 mandozeile zum Eingeben der Befehle zur Verfügung. Unmittelbar nach der Eingabe wird das System die Anfrage ausführen und das Ergebnis auf dem Bildschirm ausgeben. Der unmittelbare Dialog zwischen Benutzer und Maschine hat den Vorteil, daß sehr leicht verschiedene Anfragestrategien getestet werden können. Auf der anderen Seite erfordern gerade komplexe Suchmuster zahlreiche SQL-Schlüsselwörter, was die Eingabe der Suchanfrage langwierig und fehleranfällig macht. Außerdem werden ausgegebene Tabellen häufig elektronisch weiter verarbeitet. Das Einbetten von SQL-Konstrukten in eine höhere Programmiersprache gestattet dem Programmierer eben diese Weiterbearbeitung auf effiziente Weise. Hierzu werden die Ergebnisse von Suchanfragen unmittelbar an Variablen gebunden, die für weitere Berechnungen ausgewertet werden können. Im folgenden werden einige ausgewählte SQL-Befehle vorgestellt. SQL Anweisungen sind formatfrei, die Einrückungen dienen ausschließlich einer besseren Lesbarkeit. 23 Grundlage für die Arbeit in SQL sind Tabellen. Sie sind im wesentlichen Entsprechungen der Relationen des durch Codd eingeführten Modells. Der Befehl CREATE TABLE generiert eine solche Basistabelle (base table). Die Parameter der Anweisung legen die Namen der Tabelle und der Attribute sowie deren Datentyp fest. CREATE TABLE bestimmt demzufolge die Struktur der Daten. Im Gegensatz zu views24 werden Basistabellen in einem Massenspeicher abgelegt. Views hingegen werden zwar wie Basistabellen behandelt, spiegeln aber nur eine bestimmte Sichtweise von Daten wider. Sie werden beispielsweise eingesetzt, um nur einen Teil der abgelegten Informationen verfügbar zu machen. Views haben allerdings keine physikalische Entsprechung, bestehen letztlich aus Daten von Basistabellen. 2.2.5.3 Einfache SQL-Konstrukte Aufgrund der Normierung von SQL durch die ISO sind die folgenden Beispiele auf jedem relationalen Datenbanksystem, das die direkte Eingabe von SQLKonstrukten gestattet, ausführbar, wenn das System vollständig installiert wurde und durch den Datenbank-Administrator eine Datenbank eingerichtet wurde. Hierfür findet häufig die Anweisung CREATE DATABASE Verwendung. CREATE TABLE korpus ( word VARCHAR (64) NOT NULL , PRIMARY KEY(word ) ) Die Eingabe dieses Befehls generiert eine Basistabelle mit dem Namen korpus. Sie beinhaltet das Attribut word, das Zeichenketten bis zu 64 Zeichen Länge aufnehmen kann. Das Schlüsselwort NOT NULL 25 erzwingt eine Wertzuweisung, es kann keine Zeile der Tabelle leer sein. PRIMARY KEY schließlich legt word als primären Schlüssel fest. Dieser erzwingt, daß kein Wort (als Wert von word) mehrfach vorkommen kann. 23 Die vorgestellten Beispiele sind vollständig und funktionsfähig. Es sei aber darauf hingewiesen, daß nicht alle möglichen oder sinnvollen Parameter berücksichtigt werden können. Beispielsweise würde in aller Regel bei CREATE TABLE der Tabellenbereich (engl.: tablespace) angegeben, in dem die Tabelle generiert werden soll; hierauf wird aus Gründen der leichteren Verständlichkeit verzichtet. 24 auch virtuelle Tabellen oder Sichten genannt, Anm. d. Hsrg. 25 Die beiden Wortformen bilden eine semantische Einheit. 15 Der Befehl INSERT fügt einer Tabelle neue Zeilen (die den Tupeln des theoretischen Modells entsprechen) hinzu. Im Rahmen dieses Einfügevorgangs werden Konsistenzprüfungen durchgeführt, die sich beispielsweise aus dem CREATE TABLE ergeben. So wird das Kommando INSERT INTO korpus VALUES ( ’ Ein ’ ),( ’ minimales ’ ),( ’ Korpus ’ ) beim erstmaligen Aufruf ohne Fehlermeldung ausgeführt. Jeden weiteren Einfügeversuch (mit den gleichen Wortformen) wird das Datenbanksystem zurückweisen, da die entsprechenden Wortformen in der Tabelle bereits gespeichert wurden, als primäre Schlüssel jedoch nur einmal vorkommen können. Die UPDATE Anweisung dient dazu, bereits abgelegte Daten zu verändern. Das folgende Beispiel ersetzt das Wort minimales durch kleines. UPDATE korpus SET word = ’ kleines ’ WHERE word = ’ minimales ’ Der lesende Zugriff auf abgelegte Daten erfolgt durch den SELECT Befehl. So listet SELECT ∗ FROM korpus alle Zeilen der Tabelle auf. Einschränkungen des Ergebnisraumes sind durch das WHERE Konstrukt möglich. SELECT ∗ FROM korpus WHERE word = ’ minimales ’ Ergebnisse von Anfragen an das System mittels SELECT sind ebenfalls Tabellen, die Ausgangspunkt für weitere Suchanfragen sein können. Der letzte hier vorzustellende grundlegende SQL-Befehl ist DELETE. Er dient dem Entfernen von Zeilen aus einer Tabelle. Wie SELECT läßt er sich durch ein WHERE Konstrukt einschränken. DELETE FROM korpus WHERE word = ’ Ein ’ Die Sprache SQL gestattet einen umfassenden Zugriff auf relationale Daten. Gerade aufgrund ihrer Flexibilität ist allerdings eine fundierte Kenntnis ihrer Syntax nötig. 2.3 Korpusdatenbanken 2.3.1 Begriffsbestimmung Datenbanksysteme stellen Dienstprogramme zur Verfügung, um auf einer Datenbasis bestimmte Operationen wie Einfügen, Löschen oder Suchen durchführen zu können. Korpora, die in elektronischer Form vorliegen, entsprechen strukturierten Daten, auf die sich diese Funktionen ebenfalls anwenden lassen. Im folgenden soll deshalb unter dem Begriff Korpusdatenbank ein Programmsystem verstanden werden, das neben dem Import von Korpora auch die Bearbeitung der gespeicherten Informationen sowie die Recherche im Datenbestand ermöglicht. Dabei entspricht das Korpus einschließlich aller zusätzlich gespeicherten Informationen der Datenbasis, auf der bestimmte Werkzeuge operieren. Korpusdatenbanken können als klassische Datenbanksysteme angesehen werden, die für die Verarbeitung von linguistischen Daten optimiert sind. 16 2.3.2 2.3.2.1 Operationen auf Korpora Frequenzlisten Frequenzlisten geben Auskunft darüber, wie oft ein bestimmtes Token in einem Text vorkommt. Jeder Wortform wird eine Zahl zugeordnet, die der Häufigkeit ihres Auftretens entspricht. Dabei läßt sich das Datenmaterial auf unterschiedliche Weise sortieren. Ein mögliches Kriterium ist die erste Fundstelle einer Wortform. Eine so erzeugte Liste zeigt die Wortformen eines Textes in der Reihenfolge ihres ersten Vorkommens. Frequenzlisten können auch alphabetisch sortiert werden. In diesem Fall entscheidet der Anfangsbuchstabe über die Position innerhalb der Liste. 26 Eine derart aufbereitete Liste läßt sich mit dem etwa aus Fachbüchern bekannten Index vergleichen. Schließlich lassen sich Frequenzlisten nach der Häufigkeit der Fundstellen sortieren. 27 Die Generierung von Frequenzlisten mit Hilfe des Computers bietet zahlreiche Vorteile. So lassen sich leicht Mehrfachsortierungen durchführen, etwa eine Liste, die primär alphabetisch sortiert wird und auf Buchstabenebene nach der Häufigkeit, in der die einzelnen Wortformen auftreten. Ferner erfolgt eine solche Operation auch in umfangreichen Texten sehr schnell. Zudem sind dem Rechner die bei Menschen beobachteten Flüchtigkeitsfehler unbekannt. Allerdings fehlt der Maschine die Fähigkeit, kleinere Fehler im Datenbestand zu korrigieren. Wurden innerhalb eines Wortes etwa zwei Buchstaben vertauscht, kann der Rechner nur mit erheblichem Aufwand eine korrekte Zuordnung vornehmen. Frequenzlisten liefern wertvolle statistische Informationen. Von besonderer Bedeutung sind diese vor allem in Verbindung mit weiteren Suchanfragen. 2.3.2.2 Konkordanzen Nach Sinclair ist eine Konkordanz die Auflistung aller Fundstellen einer bestimmten Wortform. Im einfachsten Fall generiert ein Programm einen Index, der jede Wortform erfaßt und alle Stellen ausweist, an denen das indizierte Wort in einem Text vorkommt.28 Für die Arbeit am Text weitaus praktischer ist allerdings die Darstellung im sogenannten KWIC-Format. Das Akronym bedeutet hierbei keyword in context. Die Fundstellen werden hierzu zeilenweise ausgegeben, wobei die gesuchte Wortform in der Zeilenmitte erscheint. Links und rechts davon stehen Wortformen, die der gesuchten vorangehen, bzw. ihr folgen. Wie groß das anzuzeigende Umfeld ist, hängt von der konkreten Suchsituation ab und sollte daher vom Anwender einstellbar sein.29 2.3.2.3 Anfragen Die von Korpusdatenbanken generierten Konkordanzen sind das Ergebnis von Suchanfragen, die der Anwender an das System stellt. Im einfachsten Fall 26 Bei gleichen Anfangsbuchstaben wird der jeweils nächste Buchstabe in die Sortierung einbezogen. 27 nach [Sinclair 1991, S. 30f]. 28 nach [Sinclair 1991, S. 32] 29 nach [Sinclair 1991, S. 32f]. 17 handelt es sich hierbei um eine einzelne Wortform. Werden mehrere Wörter eingegeben, liefert das Programm nur diejenigen Textstellen, die alle eingegebenen Wörter in der gleichen Reihenfolge enthalten. Wurde ein Korpus mit zusätzlichen Informationen annotiert, sollte die Korpusdatenbank die Möglichkeit bieten, solche Daten als Kriterien in die Suchanfrage einzubeziehen. In welcher Form Anfragen an das System erfolgen, ist Korpusdatenbank-spezifisch. 2.3.3 Anforderungen an Korpusdatenbanken Heute lassen sich die technischen Voraussetzungen für die Speicherung umfangreicher Korpora mit vertretbarem Aufwand erfüllen. Allerdings muß eine Korpusdatenbank auch Anforderungen genügen, die sich aus der Struktur der gespeicherten Informationen und dem Verwendungszweck ergeben. 2.3.3.1 Technische Aspekte Eine Beschränkung der Korpusgröße aufgrund implementierungsspezifischer Einschränkungen erscheint nicht vertretbar, ebensowenig lange Bearbeitungszeiten von Suchanfragen. Instabilitäten in der Form von unerwarteten Programmabbrüchen bei der Verarbeitung von großen Datenmengen sind in jedem Fall zu vermeiden. Ferner sollte sich eine Korpusdatenbank auf möglichst vielen Hardware-Architekturen einsetzen lassen, oder eine Portierbarkeit soweit wie möglich vereinfachen. Das System muß in der Lage sein, mehrere umfangreiche Korpora zu verwalten. 30 Dabei sollte die Korpusdatenbank keine Annahmen in Bezug auf die logische Struktur eines Korpus, dessen Aufbau oder Annotationen machen. 31 Dies läßt sich erreichen, indem das System eine geeignete Schnittstelle zur Verfügung stellt, die zusätzlichen Komponenten den Zugriff auf die Datenbasis ermöglicht. Idealerweise gestattet das System den Aufbau eines Korpus im laufenden Betrieb. Dies ist von Vorteil, wenn die Zusammenstellung oder Bearbeitung von Texten nicht abgeschlossen ist, an bereits vorhandenem Material aber Untersuchungen durchgeführt werden sollen. 2.3.3.2 Anforderungen an die Anfragesprache Suchanfragen sollten auf bestimmte Teilkorpora beschränkt werden können, wobei es in diesem Zusammenhang wünschenswert ist, daß der Anwender selbständig logische Einheiten definieren kann, die sich bei Anfragen gezielt aktivieren oder ausschließen lassen. Die Auswahl der Texte sollte hierbei auch mit Hilfe bibliographischer Angaben erfolgen können, die der Anwender jederzeit einsehen kann. Ferner erscheint es geboten, die einzelnen Texte eines Korpus beliebigen Kategorien zuordnen zu können. Solche Kategorien sollten Grundlage für die Auswahl eines Textes sein können. Die bereits vorgestellte Sprache SQL verlangt das Voranstellen des Schlüsselwortes SELECT vor jede Suchanfrage. Anfragen an Korpusdatenbanken sollten 30 Eine Grenze kann sich aus der zur Verfügung stehenden Hardware ergeben. impliziert, daß die Korpusdatenbank sowohl annotierte Korpora als auch solche ohne zusätzliche Informationen verwalten kann. 31 Dies 18 weitestgehend ohne sprachspezifische Schlüsselwörter möglich sein. Desweiteren erscheint es geboten, auf komplizierte syntaktische Konstrukte zugunsten einer leichten Erlernbarkeit und effizienten Handhabbarkeit zu verzichten. Ferner sollte die Anfragesprache nicht nur Zugriff auf die Textdaten erlauben, sondern auch Analysen hinsichtlich grammatischer Phänomene oder dem sprachlichen Umfeld einer Suchanfrage zulassen. In Zusammenhang mit Suchanfragen nach Vorkommen bestimmter Wortformen ist die Verwendbarkeit von regulären Ausdrücken sinnvoll, beispielsweise um effizient nach Variationen in der Schreibung von Namen suchen zu können. 2.3.3.3 Weitere Desiderata Eine Programmierschnittstelle sollte den Zugriff auf den Datenbestand durch andere Programme ermöglichen, so daß die Textauszüge auch in anderen Anwendungen zur Verfügung stehen. Ferner sollte der Anwender die Möglichkeit haben, Frequenzlisten und Wortstatistiken zu erstellen, sowie beliebiger Analysen in einem einheitlichen Format speichern zu können. Die Darstellung von Fundstellen sollte zweckmäßigerweise im KWIC-Format erfolgen, das durch die Zentrierung der gesuchten Wortform eine gute Lesbarkeit der Ausgabe gewährleistet. Alternativ sollten sich Konkordanzen nach verschiedenen Kriterien sortieren lassen. 2.3.4 Komponenten einer Korpusdatenbank Wie bereits dargelegt wurde, sind Korpusdatenbanken den klassischen Datenbanksystemen sehr ähnlich. Neben den obligatorischen Komponenten eines DBMS sind allerdings spezifische Werkzeuge nötig. Dieser Abschnitt stellt typische Komponenten einer Korpusdatenbank vor. 2.3.4.1 Der Datenbankkern Die zentrale Komponente einer Korpusdatenbank ist für die Speicherung der Korpusdaten auf einem Rechnersystem zuständig. Der Kern stellt hierzu gängige Datenbank-Operationen wie Einfügen, Ändern, Löschen und Suchen zur Verfügung. Solche Aktionen werden in der Regel nicht durch direkte Kommunikation mit dem Anwender ausgelöst. Spezielle Werkzeuge übernehmen das Einlesen von Texten oder nehmen Suchanfragen des Benutzers entgegen und kommunizieren mit dem Datenbankkern. Dessen Konzeption und Implementierung hat entscheidenden Einfluß auf die Leistungsfähigkeit einer Korpusdatenbank. Bei seiner Implementierung ist eine möglichst effiziente Ausführung der Datenbankoperationen anzustreben. Ferner sind Beschränkungen in Bezug auf die Gesamtkapazität der Daten oder die Komplexität von Suchanfragen soweit möglich zu vermeiden. 2.3.4.2 Importfilter Importfilter fügen einer Korpusdatenbank vollständige Korpora oder einzelne Texte hinzu. Die Filter erwarten die einzufügenden Daten in einem bestimmten Format, für das sie entwickelt wurden. Ein einfach zu realisierender Filter könnte Dateien im ASCII-Format einlesen, wobei die einzelnen Tokens eines Korpus zeilenweise abgelegt werden. Spezielle Markierungen zeigen dann 19 das Ende eines Textes an. Aufwendigere Filter könnten beispielsweise das Einlesen von SGML-kodierten Texten erlauben. Das Filter-Konzept gewährleistet die einfache Erweiterbarkeit einer Korpusdatenbank. Liegt ein Korpus in einem dem System unbekannten Format vor, ist nur ein entsprechender Filter zu entwickeln oder ein bestehender anzupassen. Bislang hat das Filter-Konzept kaum Einzug in Korpusdatenbanken gefunden. 2.3.4.3 Exportfilter Die Aufgabe von Exportfiltern ist es, Korpusdaten in einem Format auf Massenspeichern abzulegen, das die Weiterverarbeitung dieser Dateien mit anderen Programmen gestattet. Für unterschiedliche Aufgaben können spezifische Filter zur Verfügung gestellt werden. In den letzten fünf Jahren hat die Auszeichnungssprache HTML weite Verbreitung gefunden. HTML-Exportfilter können Teile eines Korpus als Dateien mit HTML Tags generieren. Diese eignen sich für eine Verbreitung über das Internet. 2.3.4.4 Werkzeuge für die Textaufbereitung Gelegentlich müssen Texte vor der Bearbeitung durch einen Importfilter aufbereitet werden. Diese Aufgabe übernehmen Werkzeuge, die komzeptionell nicht zwingend der Korpusdatenbank zuzuordnen sind. Allerdings erleichert das System dem Anwender die Arbeit, wenn es entsprechende Komponenten bereitstellt. Gründe für die Notwendigkeit einer Bearbeitung sind: • die unterschiedliche Kodierung von Zeichen auf verschiedenen Computersystemen • das Fehlen eines geeigneten Importfilters Steht kein passender Importfilter zur Verfügung, kann es beispielsweise helfen, Filter-spezifische Markierungen zu entfernen und einen einfachen Filter zu verwenden. Neben Programmen, die Daten vor dem Einsatz von Filtern aufbereiten, gehören zu den Werkzeugen für die Textaufbereitung auch solche, die Texte mit zusätzlichen Informationen versehen. Als Beispiel sind Programme zu nennen, die zu den Wortformen eines Textes beispielsweise deren grammatische Kategorie oder Grundform liefern. 2.3.4.5 Benutzerschnittstelle Die Benutzerschnittstelle faßt alle Komponenten zusammen, die dem Anwender die Kommunikation mit dem System gestatten. Hierzu zählt insbesondere eine Eingabemöglichkeit für Korpusanfragen. Die derzeit verfügbaren Korpusdatenbanken stellen hierzu einen Interpreter für eine spezielle Anfragesprache bereit. Eine weitere Komponente der Benutzerschnittstelle übernimmt die Ausgabe der Ergebnisse von Suchanfragen. Verfügbare Korpusdatenbanken stellen sie im KWIC-Format dar, wobei die Ausgaben zumeist beliebig sortiert werden können. Aspekte des Themenkomplexes Benutzerführung werden in Kapitel 6 behandelt. 20 2.3.5 Vorstellung verfügbarer Systeme Im folgenden werden einige verfügbare Korpusdatenbanken vorgestellt. Neben technischen Besonderheiten ist insbesondere auf die jeweilige Anfragesprache einzugehen. Wenn auch die einzelnen Dialekte immer in Zusammenhang mit dem entsprechenden Gesamtsystem zu sehen sind, so lassen sich doch anhand der ermittelten Gemeinsamkeiten grundsätzliche Anforderungen an Korpusanfragesprachen formulieren, die in Abschnitt 6.2 thematisiert werden. 2.3.5.1 IMS Corpus Workbench Die C ORPUS W ORKBENCH wurde von Oliver Christ und Bruno M. Schulze am Institut für maschinelle Sprachverarbeitung der Universität Stuttgart entwickelt. Dieses System unterstützt beliebig viele Korpusannotationen, sowie die Einbeziehung externer Informationsquellen, die für Suchanfragen herangezogen werden können.32 Zentrales Element der Anfragesprache der C ORPUS W ORKBENCH ist der Attributausdruck. Er legt Bedingungen fest, die Korpusannotationen erfüllen müssen, um im Rahmen einer Suchanfrage als Ergebnis gemeldet zu werden. 33 Die Kombination mehrerer Attributausdrücke ist möglich. Im Zuge der Auswertung einer Anfrage liefert der Interpreter diejenigen Korpusintervalle, die den Attributausdrücken genügen.34 Die allgemeine Form eines Attributausdrucks folgt dem Schema [attribut = pattern]. D IE C ORPUS W ORKBENCH gestattet die Vereinfachung zu der Form pattern, wenn nach einer Wortform gesucht werden soll; diese werden dem Attribut word, das für jedes Korpus vorhanden sein muß, zugeordnet. Möglich ist auch der Zugriff auf sogenannte dynamische Attribute. Sie binden „externe Wissensquellen an das Corpus, ohne daß die durch diese Wissensquellen repräsentierten Informationen direkt annotiert wären“35 . Der Zugriff auf dynamische Attribute durch die Anfragesprache ist möglich. Er erfolgt analog zu Funktionsaufrufen in gängigen Programmiersprachen, indem dem Attribut eine Argumentliste übergeben wird. Strukturelle Attribute enthalten Informationen bezüglich Satz- und Abstandsgrenzen 36 . Ein Zugriff auf diese ist durch die Anfragesprache möglich. Hierzu wurde das Schlüsselwort within eingeführt, das eine Begrenzung auf eine Maximalzahl von Korpuspositionen oder eine deklarierte Strukturannotation ermöglicht 37 . 2.3.5.2 Corsica C ORSICA (CORpus Storage and InteraCtive retrievAl) wurde von Marco Zierl an der Abteilung Computerlinguistik der Universität Erlangen-Nürnberg entwickelt. Ziel der Implementierung war neben einer einheitlichen Speicherung von beliebigen Analysen der Korpusdaten ein Zugriff durch andere Programme 32 [Christ 33 [Christ 1994] 1994, S. 6] 34 ebenda 35 [Christ 1994, S. 4] 1994, S. 3] 37 [Christ 1994, S. 8] 36 [Christ 21 sowie die Möglichkeit, Korpusannotationen beliebig hinzufügen und entfernen zu können38 . Die Anfragesprache von C ORSICA ist an die der C ORPUS W ORKBENCH angelehnt 39 . An logischen Operationen auf Korpuspositionen bietet C ORSICA sowohl Konjunktion als auch Disjunktion, wobei letztere eine höhere Priorität besitzt. Der Distanzoperator $any(x) bietet die Möglichkeit, nach nicht unmittelbar aufeinander folgenden Attributausdrücken zu suchen. C ORSICA wurde als Client-Server-System implementiert, wobei der Client als Java-Applet realisiert wurde, das in einem Webbrowser ablaufen kann. Dies trägt dem Desiderat der Verfügbarkeit auf möglichst vielen Plattformen zumindest auf Client-Seite Rechnung. 2.3.5.3 SARA S ARA ist die Korpusdatenbank zur Arbeit mit dem BNC. Das Akronym SARA bedeutet SGML-Aware Retrieval Application. Obwohl der Name des Programmsystems die Verwenbarkeit für beliebige SGML-Dokumente nahelegt, ist SARA ausschließlich für eine Benutzung mit dem British National Corpus konzipiert. SARA besteht aus vier Hauptkomponenten: • Ein Indizierer wandelt SGML-annotierte Texte in ein proprietäres Format. Dieser Index enthält Verweise auf alle Wortformen sowie auf die SGML- und POS-Tags des Korpus. • Der SARA-Server nutzt den Index für die Bearbeitung von Suchanfragen • Client-Programmen nehmen Benutzeranfragen entgegen und kommunizieren mit dem Server auf der Basis von TCP/IP • Anfragen an den Server werden in einer CQL (corpus query language) genannten Anfragesprache formuliert. Diese orientiert sich wie die Corsicas und der Corpus Workbench an Attributausdrücken. Zusätzlich ist der Zugriff auf SGML-Tags möglich. Die Kommunikation mit dem Anwender übernehmen Client-Programme. Für Rechner unter dem Betriebssystem UNIX steht nur ein rudimentäres Programm zur Verfügung, das Anfragen in CQL erwartet. Ein sehr umfangreicher Client, der Microsoft Windows voraussetzt, erlaubt hingegen eine sehr flexible und komfortable Arbeit mit dem Korpus. 40 38 [Zierl 1997, S. 2] 1997, S. 57] 40 Allgemeine Informationen zu SARA finden sich bei [Burnard 1996] 39 [Zierl 22 3 Die Korpusdatenbank SanRemo Dieses Kapitel beschreibt Problemfelder, die sich aus der Verwendung eigens entwickelter Datenbankkerne für die Speicherung von Korpora ergeben können, und stellt relationale Datenbanksysteme als Basis für Korpusdatenbanken als mögliche Alternative vor. Ferner werden die Korpusdatenbank S AN R EMO und ihre Komponenten vorgestellt. 3.1 Konzepte zur Speicherung von Korpora 3.1.1 Eigenentwicklungen Für eine effiziente Arbeit mit umfangreichen annotierten Korpora sind spezialisierte Werkzeuge nötig, die auch komplexe Suchanfragen schnell und zuverlässig verarbeiten können. Um dies zu erreichen, enthalten die dem Verfasser bekannten verfügbaren Systeme eigens entwickelte Datenbankkerne, auf die alle weiteren Komponenten über eine geeignete Schnittstelle zugreifen. Solche Korpusdatenbanken lassen sich nur um zusätzliche Funktionen erweitern, wenn die Funktionalität der Schnittstelle offengelegt wird und auf dem Rechnersystem eine geeignete Programmiersprache zur Verfügung steht. Proprietäre Datenbankkerne können auf spezifische Eigenschaften des verfügbaren Korpusmaterials Rücksicht nehmen, was zu einem sehr effizienten Zugriff auf den Datenbestand führt. Allerdings lassen sich solche Systeme nicht oder nur mit erheblichen Aufwand um Korpora erweitern, deren Struktur ganz oder teilweise von der beim Entwurf des Kerns zugrundegelegten abweicht. Um mehreren Anwendern den gleichzeitigen Zugriff auf Korpora zu ermöglichen, müssen Korpusdatenbanken als Client-Server-Systeme implementiert werden. Damit Client-Programme Anfragen an den die Datenbank verwaltenden Server stellen können, muß ein geeignetes Kommunikationsprotokoll zur Verfügung stehen. Mechanismen, die Zugriffskontrollen – etwa im Rahmen einer Benutzerverwaltung – ermöglichen, sind in diesem Fall durch die Kor23 pusdatenbank zu realisieren, wobei soweit möglich ein Zugriff auf durch das Rechnersystem bereitgestellte Betriebsmittel erfolgen wird. Von besonderer Bedeutung ist eine möglichst effiziente Speicherung der Korpusdaten auf dem Massenspeicher. Bei Suchanfragen muß der Kern in der Lage sein, schnell auf den Datenbestand zuzugreifen. Allerdings läßt die bei einem aus 100 Millionen Wortformen bestehenden Korpus anfallende Menge an Informationen die Verwendung von Komprimierungsverfahren sinnvoll erscheinen. Dies erfordert wiederum den Zugriff auf systemspezifische Mechanismen, deren Übertragung auf andere Plattformen problematisch sein kann. Wie die aufgeführten Beispiele zeigen, ist die Konzeption und Implementierung einer Korpusdatenbank auf Basis eines proprietären Datenbankkerns aufwendig. Neben Problemen, die die Arbeit mit Korpora betreffen (etwa die Bereitstellung einer geeigneten Anfragesprache) sind zahlreiche programmiertechnischen Aspekte (beispielsweise die Definition und Realisierung eines geeigneten Netzwerkprotokolls) zu berücksichtigen. Für die Programmierung eines möglichst effizienten Systems ist zudem der Zugriff auf systemnahe Funktionen unerläßlich, was zu einer bereits angesprochenen erschwerten Portierbarkeit auf andere Rechnerplattformen führen, wenn diese ein entsprechendes Betriebsmittel nicht oder in nicht kompatibler Weise zur Verfügung stellen. 3.1.2 Relationale Datenbanksysteme Relationale Datenbanksysteme finden in den unterschiedlichsten Bereichen der elektronischen Datenverarbeitung Anwendung. Die Häufigkeit ihres Einsatzes führte zur Entwicklung von zahlreichen Produkten, die ein breites Leistungspektrum abdecken. Neben Einzelplatzversionen, die sich zur Speicherung kleiner bis mittlerer Datenmengen eignen, existieren Client-Server-Produkte, die einen schnellen und zuverlässigen Zugriff auch auf sehr umfangreiche Datenbestände gewährleisten. Gerade solche Systeme scheinen für einen Einsatz in der Korpuslinguistik sehr geeignet zu sein. Sowohl Tabellendefinitionen als auch Suchanfragen und Manipulationen am Datenbestand können durch Elemente der Sprache SQL erfolgen. Da relationale Datenbanksysteme für zahlreiche Betriebssysteme existieren, stehen Korpusdatenbanken auf Basis von SQL auf entsprechend vielen Rechnern zur Verfügung. Da Syntax und Semantik der Sprache durch die Gremien American National Standards institute (ANSI) und International Organisation for Standardization (ISO) standardisiert wurden, 1 sind bei der Implementierung der Datenbank keine Komplikationen zu erwarten. Eine aufwendige Portierung, die bei in herkömmlichen Programmiersprachen entwickelten Korpusdatenbanken zu erwarten ist, entfällt. Aufgrund ihrer komplexen Syntax erscheint SQL als Korpusanfragesprache für Benutzer allerdings wenig geeignet. Kapitel 7.1 zeigt dies anhand ausgewählter Anfragen. Da SELECT-Anweisungen Namen von Tabellen und Attributen beinhalten, erfordern sie die Kenntnis der Tabellenstruktur, die nicht der im Rahmen der formalen Definition vorgestellten Sichtweise auf ein Korpus entsprechen wird. Eine Abbildung von Korpusdaten auf SQL-Tabellen hat vor dem Hintergrund eines möglichst effizienten Zugriffs zu erfolgen. Eine Tabelle, deren Attribute 1 24 [Date 1997, S. 6] den positionalen Attributen eines Korpus entsprechen, wäre nicht nur im Hinblick auf den zu erwartenden Speicherverbrauch in hohem Maße ineffektiv. Auf diesen Sachverhalt ist im folgenden Kapitel ausführlich einzugehen. Zudem erfordert die Formulierung einer Suchanfrage in SQL die Eingabe zahlreicher Füllwörter (etwa FROM, WHERE), was für den ungeübten Anwender zusätzlichen Lernaufwand bedeutet. Aus disem Grund erscheint es sinnvoll, dem Benutzer einer Korpusdatenbank anstelle von SQL eine Anfragesprache zur Verügung zustellen, die • die gewohnte Sichtweise auf ein Korpus in der Form von Korpuspositionen und positionalen Attributen ermöglicht • eine geringe Einarbeitungszeit erfordert • effizienten Zugriff auf Korpusdaten gewährleistet 3.1.3 Notwendige Ergänzungen Die leichte Verfügbarkeit von relationalen Datenbanksystemen und ihre im praktischen Einsatz nachgewiesene Stabilität machen sie zu einer sehr geeigneten Basis für Korpusdatenbanken. Da SQL als Korpusanfragesprache aus den dargelegten Gründen wenig benutzerfreundlich ist, muß eine Korpusdatenbank eine geeignetere Anfragesprache zur Verfügung stellen und in SQL-Konstrukte umsetzen, sowie die vom RDBMS gelieferten Ergebnistabellen für den Anwender aufbereiten, etwa in der Form einer KWIC-Liste. Eine solche Verteilung von Aufgaben führt zu dem in Abbildung 3.1 dargestellten Dreischichtenmodell. Abbildung 3.1: Schema einer RDBMS-basierten Korpusdatenbank Programmiersprachen (Perl, Java) Anfragesprache Import Filter KWIC Export Filter SQL Suchanfragen an die Datenbank Einfügen neuer Texte und Korpora Ausgabe von Suchergebnissen Export von Korpora Datenbank−System Das RDBMS ist als zentrale Komponente für die Speicherung der Korpusdaten sowie für deren Manipulation verantwortlich. Die Korpora werden in verschiedenen Tabellen abgelegt, deren Struktur und Bedeutung in Kapitel 4 ausführlich dargestellt wird. Alle weiteren Komponenten des Systems kommunizieren mit dem RDBMS in der Sprache SQL auf Basis dieser Tabellenstruktur. SQL bildet das Transportmedium für Anfragen an die Datenbank sowie für das Hinzufügen von Texten zu einem Korpus oder das Einbringen vollständiger Korpora. Hierbei werden Daten in Richtung des RDBMS übertragen. Dieses liefert Ergebnisse von Suchanfragen in Form von Tabellen, die von geeigneten Komponenten ausgewertet und aufbereitet werden. 25 Hierzu zählen Programme, die Suchanfragen in Form einer KWIC-Liste darstellen oder Teile eines Korpus als SGML-Datei speichern können. An solche Komponenten sind ähnliche Anforderungen zu stellen wie an den Datenbankkern selbst. Da sie Anfragen an den Kern weiterleiten sowie Ergebnistabellen von ihm erhalten, müssen sie auch umfangreiche Datenmengen schnell und zuverlässig verarbeiten können. Bei der Wahl einer geeigneten Programmiersprache für Komponenten ist auch deren Verfügbarkeit auf unterschiedlichen Rechnersystemen zu berücksichtigen. Hierbei muß die Sprache hardwarespezifische Merkmale weitgehend ausschließen. Eine Abhängigkeit zwischen der Länge eines Maschinenregisters und dem Wertebreich eines elementaren Datentyps, wie sie etwa die Programmiersprache C kennt, führt bei der Übertragung eines Programms auf ein anderes Computersystem sehr leicht zu Fehlern. Ferner sind bei der Implementierung der Werkzeuge systemspezifische Funktionen bzw. unmittelbare Zugriffe auf das Betriebssystem möglichst zu vermeiden. Stattdessen sind Elemente der Programmiersprache oder genormte, der Sprache zugeordnete Funktionsbibliotheken zu verwenden. Da die Programme mit dem RDBMS kommunizieren, ist bei der Wahl der Programmiersprache schließlich zu prüfen, inwieweit sie Zugriff auf SQL-Datenbanken gestattet. 3.2 SanRemo im Überblick 3.2.1 Vorstellung des Systems S AN R EMO ist die experimentelle Implementierung einer Korpusdatenbank auf der Basis eines relationalen Datenbanksystems. Hierbei steht der Name für corpus analysis based on the relational model. Neben Werkzeugen zum Einfügen von Texten in die Datenbank stellt S AN R EMO Funktionen zum Stellen von Anfragen und der Ausgabe von Suchergebnissen zur Verfügung. Das Ziel der experimentellen Implementierung bestand nicht primär in der Entwicklung eines allgemein verfügbaren Systems, sondern dient zunächst der Untersuchung einer grundsätzlichen Eignung von relationalen Datenbanksystemen zur Speicherung umfangreicher, annotierter Korpora. Dies erfordert die Erfüllung folgender Kriterien: • hinreichend schnelle Antwortzeiten des Systems bei Einfügeoperationen, vor allem aber bei Suchanfragen • ausreichende Flexibilität des relationalen Modells für die Speicherung von Korpusdaten • Eignung von SQL als Basis für Korpusanfragen Zentraler Bedeutung kommt hierbei der Tabellenstruktur zu, die alle in einem Korpus abgelegten Informationen erfassen und einen möglichst effizienten Zugriff gewährleisten muß. Die im Rahmen dieser Arbeit vorgelegten Werkzeuge zur Arbeit mit Korpora spiegeln den experimentellen Charakter des Systems wider. Der modulare Aufbau von S AN R EMO und die Nutzung von SQL als Kommunikationsmittel gestatten allerdings die nachträgliche Erweiterung durch den gezielten Austausch bestimmter Komponenten. 26 3.2.2 Die Komponenten im Überblick S AN R EMO implementiert das in Abbildung 3.1 dargestellte Drei-SchichtenModell. 3.2.2.1 Das RDBMS Die Basis bildet ein relationales Datenbanksystem, das die vollständige Speicherung der Korpora übernimmt. Im Rahmen einer Referenzimplementierung wurde IBM DB/2 gewählt. Da die einzelnen Komponenten ausschließlich über Elemente der Datenbanksprache SQL miteinander kommunizieren, sollte stattdessen ein beliebiges RDBMS eingesetzt werden können, das SQL in einer zum ANSI- bzw. ISO-Standard kompatiblen Fassung bereitstellt. 3.2.2.2 Die Transportschicht Die formale Grundlage für die Speicherung der Korpusdaten ergibt sich aus einem geeigneten, in Kapitel 4 ausführlich vorzustellenden, Tabellenmodell. Kernpunkt dessen Struktur ist die Speicherung beliebiger Online-Texte. Ziel bei der Entwicklung war es, etwaige Korpusannotationen sowie zusätzliche textuelle Informationen vollständig in die Datenbank zu integrieren. Die einzigen zwingend notwendigen Informationen sind die Wortformen der OnlineTexte, so daß sich Korpora auch aus reinen ASCII-Texten ohne weitere Informationen aufbauen und bearbeiten lassen. Die Tabellenstruktur stellt nur die für eine flexible Speicherung nötigen Attribute zur Verfügung. Diese werden durch geeignete Importfilter, deren Funktionsweise in Kapitel 5 dargestellt wird, mit Daten gefüllt. Importfilter sowie alle weiteren Komponenten der Anwenderschicht kommunizieren mit dem Datenbanksystem durch SQL-Anweisungen auf der Basis der Tabellenstruktur. Da sich auch die Tabellendefinitionen in CREATE TABLEKonstrukten manifestieren, kommt der Datenbanksprache die Rolle eines zentralen Transportmediums zu. 3.2.2.3 Kommunikation mit dem Anwender Die Anwenderschicht faßt alle Komponenten zusammen, die mit dem Benutzer der Korpusdatenbank interagieren. Hierzu zählen die bereits vorgestellten Importfilter sowie Interpreter von Suchanfragen oder administrative Werkzeuge. Im einzelnen wurde implementiert: • SanRemo.pl: generiert die SanRemo.toc Tabelle • newcorpus.pl: richtet ein neues Korpus ein und generiert die Tabellen info, textinfo und types • delcorpus.pl: löscht ein Korpus vollständig aus der Datenbank • fill.pl und turbo.pl: rudimentäre Importfilter zum Einlesen des BNC • text.pl: zeigt einzelne Texte eines Korpus auf dem Bildschirm an • textinfo.pl: ermittelt statistische textbezogene Informationen • kwic.pl: gestattet die Suche nach Wortformen und zeigt Fundstellen im KWIC-Format 27 Die Programme basieren auf dem im Rahmen dieser Arbeit entwickelten PerlModul dbhelper.pm, das die Kommunikation mit dem RDBMS übernimmt. Durch die Bereitstellung von Funktionen anstelle der direkten Kommunikation mit dem Datenbanksystem bleiben die Komponenten auch nach Änderungen an der Tabellenstruktur funktionsfähig. 3.2.3 Zur Wahl einer geeigneten Programmiersprache Die im Rahmen dieser Arbeit entstandenen Komponenten wurden in der Programmiersprache Perl geschrieben. Perl ist aus mehreren Gründen sehr gut für solche Werkzeuge geeignet. Das Modul DBI 2 gestattet auf sehr elegante Weise den Zugriff auf SQL-Datenbanken. Zudem ist Perl für verschiedene Rechner verfügbar, was eine Portierung von S AN R EMO auf andere Systeme sehr vereinfacht. Ferner bietet diese Programmiersprache komfortable Mechanismen zur Zeichenkettenbearbeitung sowie reguläre Ausdrücke, was die Bereitstellung äußerst leistungsfähiger Anfragesprachen ermöglicht. Schließlich erlaubt Perl die Zusammenfassung von funktional zusammengehörenden Elementen zu sogenannten Modulen. Diese stellen Funktionen bereit, auf die andere Komponenten ohne Kenntnis der konkreten Implementierung zugreifen können. Diese Form der Abstraktion gestattet beispielsweise Änderungen an der Tabellenstruktur, ohne Anpassungen an bestehenden Komponenten vornehmen zu müssen. 3.2.4 Hardware-Basis und Voraussetzungen für den Betrieb Kleinere Korpora, beispielsweise das Brown Corpus, lassen sich problemlos mit Hilfe von Einzelplatzversionen relationaler Datenbanksysteme speichern. Die zu erwartenden Antwortzeiten des Systems sind bei solchen Datenmengen auch bei durchschnittlich ausgestatten Maschinen zu vernachlässigen. Umfangreiche annotierte Korpora, wie etwa das British National Corpus, erfordern hingegen Massenspeicher mit Kapazitäten im Gigabyte-Bereich. Auch ist eine möglichst hohe Rechengeschwindigkeit wünschenswert. Aus diesen Gründen ist S AN R EMO idealerweise in Verbindung mit einem Client-Server basiertem RDBMS einzusetzen. Die Verwendung standardisierter Komponenten hat eine unkomplizierte Installation von S AN R EMO zur Folge, setzt allerdings ein richtig konfiguriertes Netzwerk voraus, falls das System nicht auf einem Einzelplatzrechner betrieben wird. Ferner muß das RDBMS und ein geeigneter Perl-Interpreter installiert und ggf. an die Hardwareumgebung angepaßt werden. Wie aufwendig solche vorbereitenden Maßnahmen sind, ist von den zur Verfügung stehenden Geräten abhängig. Die Generierung einer Datenbasis ist ebenfalls vor einem Einsatz von S AN R E MO durchzuführen. Der hierfür zuständige Nutzer muß auf dem System entsprechende Datenbank-Administrator-Rechte besitzen. Solche Maßnahmen erfolgen auf verschiedenen Rechner-Systemen in unterschiedlicher Weise. Zumindest in einer experimentellen Implementierung sind solche Aufgaben nicht durch die Korpusdatenbank zu bearbeiten. Eine allgemein verfügbare Version 2 28 〈http://dbi.symbolstone.org/ 〉 von S AN R EMO hingegen könnte eine entsprechende Funktionalität bereitstellen. 29 30 4 Das Tabellenmodell von SanRemo In diesem Kapitel wird die in S AN R EMO für die Speicherung der Korpusdaten verwendete SQL-Tabellenstruktur vorgestellt. Hierbei werden mehrere Lösungsansätze gezeigt, die den Verlauf dieser Arbeit dokumentieren. 4.1 Allgemeine Überlegungen zur Tabellenstruktur Das S AN R EMO zugrunde liegende Tabellenmodell hat zentrale Bedeutung für dessen Flexibilität, Geschwindigkeit und Benutzerfreundlichkeit. Struktur und Verknüpfung der beteiligten Tabellen entscheiden über die Bearbeitungsdauer von Anfragen an das System sowie bei Wartungsarbeiten, zu denen das Anfügen neuer oder Entfernen bestehender Texte oder das Bearbeiten textbezogener Informationen gehören. Ferner ist vom Aufbau der einzelnen Tabellen abhängig, welche zusätzlichen Informationen über ein Korpus gespeichert werden können und inwieweit diese als Grundlage für Suchanfragen verwendet werden können. Ziel bei der Entwicklung einer geeigneten Struktur war die Möglichkeit einer flexiblen Speicherung von Korpusdaten unter Entstehung minimaler Redundanz. Die Tabellenstruktur gibt wenige Attribute vor. Stattdessen können Importfilter die geeigneten Informationen aus den Online-Texten in ihnen geeignet erscheinenden Tabellen eintragen. 4.2 Abbildung von Korpuspositionen auf Attribute Wie in Abschnitt 2.1.4 dargelegt wurde, läßt sich ein Korpus formal als eine Abfolge von n Korpuspositionen beschreiben, wobei jeder Position eine beliebige Anzahl positionaler Attribute zugeordnet wird. In einem ersten Versuch kann ein auf diese Weise beschriebenes Korpus unmittelbar auf eine Tabelle abgebildet werden: 31 CREATE TABLE korpus ( counter INTEGER NOT NULL , word VARCHAR (44) NOT NULL , pos VARCHAR (8), PRIMARY KEY( counter ) ) Die generierte Tabelle wird über den Namen korpus angesprochen. Ihre Attribute entsprechen den positionalen Attributen word und pos. Da counter die Korpusposition der zu speichernden Wortform angibt, findet sich keine Entsprechung bei den positionalen Attributen. Ein Zugriff auf Korpusdaten an einer bestimmten Korpusposition ist nach einem Einfügevorgang mit Hilfe einer entsprechenden SELECT Anweisung möglich: INSERT INTO korpus ( counter , word ) VALUES (1, ’ Ein ’ ),(2, ’ minimales ’ ),(3, ’ Korpus ’ ) INSERT INTO korpus ( counter , word ) VALUES (4, ’ Ein ’ ),(5, ’ weiterer ’ ),(6, ’ Text ’ ) SELECT ∗ FROM korpus WHERE word=’ minimales ’ oder SELECT ∗ FROM korpus WHERE counter < 3 Ergebnis: COUNTER ----------1 2 WORD ---------------------Ein minimales POS -------- 2 record(s) selected. Die vorgestellte Tabelle ist für die Speicherung großer Korpora aus mehreren Gründen ungeeignet: • Alle Wortformen werden mit eindeutigen Nummern versehen, allerdings ist keine Zuordnung zu einzelnen Texten möglich, da die Position der Textgrenzen nicht gespeichert wird. Obwohl sich Suchanfragen sehr oft auf das gesamte Korpus beziehen, sollte eine Korpusdatenbank die Einschränkung des Suchraumes auf bestimmte Texte unterstützen. • Attribute, die positionale Attribute abbilden, lassen sich zwar mit der Anweisung ALTER TABLE ADD COLUMN beliebig hinzufügen, allerdings nicht wieder entfernen. Werden Texte aus dem Korpus entfernt, enthält die Tabelle korpus weiterhin die möglicherweise nicht mehr benötigten Attribute, was eine unnötige Verwendung von Speicherplatz zur Folge hat. • Durch die mehrfache Speicherung gleicher Wortformen als Zeichenketten entsteht gerade bei sehr großen Korpora eine erhebliche Menge an redundanter Information. Das BNC enthält beispielsweise die Wortform 32 linguistics an 537 Korpuspositionen. Die entsprechende Zeichenkette würde demnach 537 mal gespeichert. Zwar hat sich die Kapazität verfügbarer Massenspeicher in den letzten Jahren vervielfacht, allerdings müssen bei Suchanfragen alle Zeichenketten verglichen werden. Da mit der ersten Speicherung die Oberfläche der Wortform bekannt ist, erscheint es sinnvoll, nach einer weniger speicherintensiven Ablageform bereits bekannter Wortformen zu suchen. Eine mögliche Vorgehensweise wird im folgenden Abschnitt dargestellt. 4.3 Der 2-Tabellen-Ansatz Der 2-Tabellen-Ansatz erreicht eine Reduzierung des für das Ablegen der Korpusdaten nötigen Speicherplatzes durch Aufteilen der Informationen auf zwei Tabellen. Möglich wird dies durch die Anwendung des in Abschnitt 2.1.3 vorgestellten Type-Token-Konzepts. 4.3.1 Die Normalisierung von Tabellen Der Prozeß der Vereinfachung von Tabellen, und damit der Auflösung von Redundanzen, wird als Normalisierung bezeichnet. Date bemerkt zu der auf das relationale Modell bezogenen Normalisierungstheorie: „Normalization theory is built around the concept of normal forms. A relation is said to be in a particular normal form if it satisfies a certain set of constraints. For example, a relation is said to be in first normal form (abbreviated 1NF) if and only if it satisfies the constraint that its underlying simple domains contain atomic values only“1 . Eine Datenbank auf der Basis des Type-Token-Konzepts speichert demnach nicht die Tokens der Texte eines Korpus selbst, sondern Verweise auf eine Tabelle, die jede im Korpus vorkommende Wortform als Type genau einmal enthält. Diese Überlegungen führen unmittelbar zu der Definition von zwei SQL-Tabellen, die das Type-Token-Konzept implementieren: CREATE TABLE types ( running_type INTEGER NOT NULL, surface VARCHAR (64), PRIMARY KEY ( running_type ) ) CREATE TABLE tokens ( running_token INTEGER NOT NULL , token INTEGER NOT NULL , PRIMARY KEY ( running_token ) ) Abbildung 4.1 dokumentiert die Beziehung zwischen den Tabellen types und tokens. Die Darstellung zeigt den Inhalt der Tabellen nach folgenden SQLKommandos: 1 [Date 1990, S. 526f] 33 INSERT INTO types ( running_type , surface ) VALUES (1, ’ Ein ’ ), (2, ’ kleiner ’ ), (3, ’ Text ’ ), (4, INSERT INTO tokens VALUES (1,1), (2,2), (3,3), (4,4), (5,1), (6,3) ’ Noch ’ ) Diese Anweisungen speichern die Texte Ein kleiner Text und Noch Ein Text in der Datenbank ab. Abbildung 4.1: Beziehung zwischen den Tabellen types und tokens tokens types running_type surface running_token token 1 1 kleiner 2 2 Text 3 3 Noch 4 4 5 1 6 3 1 Ein 2 3 4 Die Tabelle tokens ist für die Speicherung der Wortformen (Tokens) in der Reihenfolge ihres Auftretens in den Texten eines Korpus verantwortlich. Der Bezug zur Tabelle types wird durch das Attribut running_type hergestellt, das jedem Type eine innerhalb eines Korpus eindeutige Nummer zuordnet. Diese wird in der tokens Tabelle im Attribut token anstelle der Zeichenkette selbst abgelegt. 4.3.2 Bewertung der 2-Tabellen-Struktur Die Wortformen eines Korpus werden nicht bei jedem Erscheinen als Folgen von Zeichen gespeichert, sondern als Indizes in eine types Tabelle. Um nach Wortformen an einer Korpusposition zu suchen, sind demzufolge zwei SELECT Anweisungen oder vergleichbare verschachtelte Konstrukte nötig. Zuerst ist anhand der Oberfläche der Wortform ( surface) nach der Nummer des entsprechenden Types zu suchen. Der auf diese Weise ermittelte Index ( running_type) kann anschließend als Suchkriterium in der tokens Tabelle verwendet werden. Die folgende SQL-Anweisung zeigt alle Korpuspositionen, die das Token Ein enthalten. SELECT ∗ FROM tokens , ( SELECT ∗ FROM types WHERE surface = ’ Ein ’ ) AS temp WHERE tokens . token = temp . running_type Ergebnis: RUNNING_TOKEN TOKEN RUNNING_TYPE SURFACE ------------- --------- ------------ -------1 1 1 Ein 5 1 1 Ein 2 record(s) selected. 34 Die Komplexität der Anfrage dokumentiert die in Abschnitt 3.1.3 angesprochene Notwendigkeit einer leicht zu erlernenden Korpusanfragesprache. Eine mit dem Anwender kommunizierende Komponente kann problemlos in dieser Sprache formulierte Anfragen in dem Beispiel ähnliche SQL-Konstrukte umformen. Als Vorteile der 2-Tabellen-Struktur sind zu nennen: • Verminderung von Redundanz bei der Speicherung der Korpusdaten: Für die Speicherung von Zeichenketten benötigen Datenbanksysteme mehr Kapazität auf dem Massenspeicher als für Zahlen. • Steigerung der Suchgeschwindigkeit: Der Vergleich von Zahlen im Rahmen einer Suchoperation ist weniger aufwendig als die Suche nach Übereinstimmung in Zeichenketten. Nachteile der 2-Tabellen-Struktur sind: • Textgrenzen werden nicht gespeichert: Die Einschränkung von Suchanfragen auf Teilkorpora ist ohne eine Markierung von Textgrenzen nicht realisierbar. • Die Speicherung textbezogener Informationen wie Urheber oder Copyrightvermerke ist nicht möglich. • Bei umfangreichen Korpora entstehen lange Wartezeiten. Es hat sich gezeigt, daß die Verwendung einer globalen tokens Tabelle zu nicht hinnehmbaren Wartezeiten bei Suchanfragen führen kann. Abschnitt 7.1 stellt im Verlauf der praktischen Arbeit mit S AN R EMO gewonnene Erkenntnisse vor. Die für Suchanfragen benötigte Zeit ist in starkem Maße von der Leistungsfähigkeit des Rechnersystems, auf dem das Datenbanksystem installiert ist, abhängig. In Client-Server-Umgebungen spielt ferner die Auslastung des Netzwerks eine signifikante Rolle. Korpusdatenbanken mit proprietärem Datenbankkern werden ebenfalls durch diese Faktoren beeinflußt. Aus diesem Grund sind implementierungsspezifische Wartezeiten so gering wie möglich zu halten. Dies läßt sich durch eine weitere Normalisierung der Tabellenstruktur erreichen. Hierzu wird die tokens Tabelle in Teileinheiten zerlegt. 4.4 n-Tabellen-Struktur Die Aufteilung der tokens Tabelle in kleinere Einheiten erfolgt zweckmäßigerweise an Textgrenzen. Zwar ist eine Unterteilung prinzipiell an jeder Korpusposition möglich, allerdings bilden die einzelnen Texte eines Korpus logische Einheiten, deren Grenzen sich für eine Aufteilung gut eignen. Ferner reflektieren auf diese Weise die Tabellen die logische Struktur des Korpus. Die 2-Tabellen-Struktur speichert m Wortformen eines aus n Texten bestehenden Korpus in einer tokens Tabelle. Eine Aufteilung an Textgrenzen führt zur Bildung von n tokens Tabellen. Eine solche Unterteilung soll daher nTabellen-Struktur genannt werden. Die Teiltabellen dieser Struktur werden mit t1 bis tn bezeichnet. 35 CREATE TABLE types ( running_type INTEGER NOT NULL , surface VARCHAR (64), type_count INTEGER , map CLOB (128), PRIMARY KEY ( running_type ) ) CREATE TABLE tn ( running_token INTEGER NOT NULL , token INTEGER NOT NULL, PRIMARY KEY ( running_token ) ) Der Aufbau der an der n-Tabellen-Struktur beteiligten Tabellen entspricht im Wesentlichen den in Abschnitt 4.3 vorgestellten Form. Um zwischen Korpusglobalen und Text-bezogenen Tabellen unterscheiden zu können, werden letztere im Folgenden als tn Tabellen bezeichnet. Die Erweiterungen der types Tabelle durch die Attribute type_count und map werden im Abschnitt 4.7 ausführlich diskutiert. An der Funktionsweise der n-Tabellen-Struktur ändern sie nichts. Jede Korpusposition läßt sich auf diese Weise durch Nennung einer tn Tabelle und dem Attribut running_token eindeutig bestimmen. Um die in Abschnitt 4.3 verwendeten Beispieltexte in einer n-Tabellen-Struktur speichern zu können, sind neben einer types Tabelle zwei tn Tabellen anzulegen (t1 und t2). Die Verteilung der Tokens auf die tn Tabellen geschieht durch folgende SQL-Anweisungen: INSERT INTO t1 VALUES INSERT INTO t2 VALUES (1,1),(2,2),(3,3) (1,4),(2,1),(3,3) Abbildung 4.2: Beispiel einer n-Tabellen-Struktur t2 running_token types token running_type t1 surface running_token token 1 4 1 Ein 1 1 2 1 2 kleiner 2 2 3 3 3 Text 3 3 4 Noch Abbildung 4.2 verdeutlicht die Abhängigkeiten zwischen types, t1 und t2 Tabellen nach Ausführung der vorgestellten INSERT Anweisungen. 4.5 Speicherung textbezogener Informationen Die n-Tabellen-Struktur beinhaltet die Vorteile der 2-Tabellen-Struktur und ermöglicht einen effizienteren Zugriff auf die Teiltexte eines Korpus. Durch die Kennzeichnung von Textgrenzen ist ferner die Speicherung von zusätzlichen textbezogenen Informationen möglich. Hierfür werden, dem Konzept der Normalisierung folgend, weitere Tabellen eingeführt. 36 4.5.1 Zugehörigkeit eines Textes zu einem Korpus Um tn Tabellen eindeutig einem Korpus zuordnen zu können, werden Informationen über die einzelnen Texte in einer Tabelle textinfo zusammengefaßt. Diese Tabelle wird durch Importfilter, die für das Einfügen eines bestimmten Textes verantwortlich sind, bearbeitet. CREATE TABLE textinfo ( textno INTEGER NOT NULL , tablenam VARCHAR (10), filename VARCHAR (64), PRIMARY KEY ( textno ) ) Die Attribute textno und tablenam ordnen jedem Text eine korpusweit eindeutige Nummer zu und beinhalten den Namen der entsprechenden tn Tabelle. Die Speicherung beider Informationen ist nötig, da auf die Textnummer in der im Abschnitt 4.5.2 vorzustellenden Tabelle info Bezug genommen wird. Ferner sind für das Anlegen einer tn Tabelle Importfilter zuständig. Da SQL ausschließlich aus Ziffern bestehende Tabellennamen nicht gestattet, müssen die Filter der Textnummer ein Präfix (beispielsweise t) hinzufügen. Um Inkompatibilitäten durch abweichende Präfixe zu vermeiden, wird der vollständige Name der generierten tn Tabelle im Attribut tablenam abgelegt. Die Tabelle textinfo ist beliebig erweiterbar, beispielsweise könnten Importfilter in einem Attribut filename den Dateinamen des Online-Textes vermerken, den sie in die Datenbank eingefügt haben. Die Tabelle eignet sich für die Speicherung textbezogener Informationen, die sich eindeutig einem Attribut zuordnen lassen. Beispiele hierfür sind etwa der Titel des Textes, der Name des Verfassers oder das Jahr der Veröffentlichung. Importfilter könnten diese Informationen in den Attributen (die bei Bedarf angelegt werden können) title, author und publication_date ablegen. Allerdings stehen solche Attribute für jeden in textinfo abgelegten Text zur Verfügung. Aus diesem Grund ist es ratsam, nur solche Informationen zu speichern, die in möglichst vielen Texten enthalten sind. Für die Speicherung spezifischerer Informationen steht die im folgenden einzuführende Tabelle info zur Verfügung. 4.5.2 Speicherung hierarchischer textbezogener Informationen Informationen, die Hierarchien repräsentieren, eignen sich nicht für die Speicherung in textinfo, da für jede Hierarchiestufe ein eigenständiges Attribut verwendet werden müßte. Da die Zahl der zu erwartenden Ebenen schwer vorherzusagen ist, entstehen möglicherweise leere Einträge, da nicht jede Hierarchiestufe eines Textes belegt werden muß. Als Beispiel für solche Hierarchien wären etwa Gattungsbegriffe für literarische Texte zu nennen: Prosa, Fiktion, Utopie. Da durch das Attribut textno der Tabelle textinfo eine eindeutige Identifizierung von Texten möglich ist, lassen sich hierarchische Informationen in einer eigenen Tabelle ablegen und bei Bedarf einem bestimmten Text zuordnen. CREATE TABLE info ( text INTEGER NOT NULL , infohier INTEGER , 37 infocatg VARCHAR (32), infovalu VARCHAR (32), PRIMARY KEY ( text ) ) Abbildung 4.3 zeigt die Einordnung der als Beispiel genannten Gattungsbegriffe in eine geeignete Tabelle. Abbildung 4.3: Darstellung von Kategorien in der Tabelle info Kategorien Prosa Fiktion Utopie INFOHIER INFOCATG INFOVALU 1 2 3 Textart Textart Textart Prosa Fiktion Utopie Importfilter können den Attributen infocatg und infovalu bei Bedarf Kategoriename-Werte-Paare zuweisen. infohier ermöglicht eine Sortierung der Paare. Die Zuordnung zu einem bestimmten Text erfolgt über text. Die Kategoriename-Werte-Paare infocatg und infovalu gestatten den Importfiltern die Speicherung aller relevanten textuellen Informationen, die sie den Online-Texten entnehmen. Von besonderer Bedeutung ist hierbei, daß Tabellen nicht um Attribute erweitert werden müssen. Bei einer Speicherung in textinfo würde deren Attributzahl mit jeder neuen Kategorie zunehmen, was zu einem unnötig hohem Speicherbedarf führt, da zu vielen Texten bestimmte Kategorien nicht verfügbar sind. Aus diesen Gründen eignet sich info neben der Speicherung von hierarchischem Datenmaterial besonders für Informationen, von denen anzunehmen ist, daß sie nicht in allen Texten eines Korpus enthalten sind, die aber für Suchanfragen von Interesse sein können und daher im Korpus abgelegt werden sollten. 4.6 Zuordnung der beteiligten Tabellen zu einem Korpus Ein Desiderat an Korpusdatenbanken ist die Möglichkeit der Speicherung mehrerer Korpora. Wenn diese gemäß der n-Tabellen-Struktur abgelegt werden, entstehen ohne weitere Vorkehrungen Namenskonflikte. So müssen für jedes Korpus textinfo, info und tn Tabellen generiert werden. Eine mögliche Lösung dieses Problems liegt in der Verwendung globaler, für alle Korpora gültigen textinfo und info Tabellen. Gerade bei textinfo ist allerdings eine große Zahl von durch Importfilter vergebenen Attributen zu erwarten. Wenn nicht alle Korpora die gleiche Menge an textuellen Informationen enthalten, wird auf diese Weise Speicherplatz ungenutzt bleiben. Das Problem der Mehrfachvergabe von Namen bei tn Tabellen bleibt ungelöst. SQL-Schemas fassen logische Einheiten einer Datenbank zusammen: „A schema (more correctly, an SQL-schema) is a named collection of descriptors within a catalog. A descriptor in turn (to quote the standard) is “a coded description of an SQL object [that includes] all of the information about the object that a conforming SQLimplementation requires.” Each schema contains descriptors for the following types of objects (in general): • domains 38 • base tables [...] “2 Die Tabellen textinfo, info sowie tn werden grundsätzlich Schemas zugeordnet. Da in den in dieser Arbeit bisher aufgeführten Beispielen keine expliziten Schema-Zuordnungen getroffen wurden, gehören alle Tabellen zu einem Schema, das sich aus dem Namen des Datenbank-Nutzers ergibt: db2 => list tables for schema tommi Table/View Schema Type Creation time ------------ --------- ------- -------------------------T1 T2 [...] TOMMI TOMMI T T 1999-09-10-17.52.03.073621 1999-09-10-17.52.27.686120 In der Zuordnung zu einem Datenbank-Nutzer liegen auch die Gründe für die bereits angesprochenen Namenskonflikte. Da sich alle Tabellen jeweils auf ein bestimmtes Korpus beziehen, erscheint es sinnvoll, den Namen dieses Korpus als Schema-Name zu vergeben. Ein Schema wird durch die SQL-Anweisung CREATE SCHEMA angelegt. In S AN R EMO wird diese Operation durch die Komponente newcorpus.pl ausgeführt, die auch für die Generierung der benötigten Tabellen verantwortlich ist. Der Zugriff auf Tabellen eines Schemas erfolgt mit Hilfe des Operators . (Punkt): SELECT ∗ FROM tommi. types WHERE surface = ’ Text ’ Schemas ermöglichen die Zuordnung von Tabellen zu einem Korpus. Sie gestatten die Speicherung mehrerer Korpora in einer Datenbank und strukturieren auf diese Weise den Tabellenbestand. 4.7 Optimierung von Suchanfragen Um alle Korpuspositionen zu ermitteln, an denen ein positionales Attribut einen bestimmten Wert hat, sind auf der Basis der n-Tabellen-Struktur zwei Schritte nötig: • Suche nach allen zu einem Korpus gehörenden Texten; diese werden in textinfo gespeichert • Anzeigen aller Positionen in tn, an denen das gesuchte positionale Attribut den gewünschten Wert hat; dieser Schritt ist für jeden Text des Korpus auszuführen Die vorgestellte Strategie führt dazu, daß alle Korpuspositionen auf das Erfüllen des Suchkriteriums geprüft werden. Gerade bei niederfrequenten Wortformen erscheint eine Reduzierung des Suchraumes wünschenswert. 2 [Date 1997, S. 43] 39 Verfügbare Korpusdatenbanken führen umfangreiche Indexlisten, in denen jede Korpusposition vermerkt wird, an der ein Type als Token auftritt. Allerdings sind Aufbau und Pflege solcher Listen aufwendig. Einfüge- oder Löschoperationen erfordern eine Überprüfung und möglicherweise Korrektur der Indexdateien. Eine Implementierung von Indizes in S AN R EMO ist aufwendig, da jedem Type eine Liste von Korpuspositionen zugeordnet werden muß, die entsprechende Tokens beinhalten. Da die Zahl der Korpuspositionen für einzelne Types stark abweichen kann, ist die Speicherung in Attributen nicht zu realisieren. SQL kennt keine Mechanismen zur Speicherung von variablen Integerlisten. Auch Konstrukte analog zu VARCHAR(x) sind nicht optimal, da bei der Tabellendefinition eine Obergrenze (x) festgelegt werden muß. Diese ist schwer vorauszusagen. Dem Konzept der Normalisierung folgend, wäre eine mögliche Alternative die Einführung einer Tabelle positions, die jedem Type Korpuspositionen korrespondierender Tokens zuordnet. CREATE TABLE positions ( counter INTEGER NOT NULL , type INTEGER NOT NULL, position INTEGER NOT NULL , tablenam VARCHAR (10), PRIMARY KEY ( counter ) ) type verweist auf einen Eintrag in einer types Tabelle, die Attribute position und tablenam definieren die Korpusposition entsprechend der Vorgabe der nTabellen-Struktur. positions ordnet Types Korpuspositionen zu. Da dies auch tn Tabellen leisten, entsteht eine nicht zu vernachlässigende Redundanz an gespeicherten Informationen. Die Alternative, das Konzept der Text-spezifischen Token-Tabellen zugunsten der positions Tabelle zu verwerfen, führt zu dem bereits in Abschnitt 4.3.2 dargestellten Nachteil langer Antwortzeiten bei Suchanfragen. Da S AN R EMO durch Exportfilter die Möglichkeit bietet, Korpora in bestimmten Formaten zu speichern, müssen im Datenbestand alle relevanten Informationen vorhanden sein. Die von anderen Systemem angewandte Methode, ausschließlich mit Indexdateien zu arbeiten, ist aus diesem Grund nicht realisierbar. Da eine Generierung und Speicherung von Indexdateien zusätzlich zu den ohnehin vorhandenen Korpusdaten Redundanz erzeugen würde, verzichtet S AN R EMO auf die Erstellung solcher Listen. Indizes, die das Datenbanksystem intern generiert, bleiben hiervon natürlich ausgenommen. Um bei Suchanfragen nicht alle Korpuspositionen prüfen zu müssen, greift S AN R EMO auf folgende Strategien zur Optimierung zurück: • Für jedes Type wird die Zahl der korrespondierenden Tokens gespeichert. • Korpora werden in Bereiche zerlegt; jedes Type enthält Informationen über Bereiche, in denen es als Token auftritt. Die Anzahl der Tokens wird im Attribut type_count der types Tabelle gespeichert. Komponenten, die Suchanfragen ausführen, können ihre Tätigkeit 40 beenden, wenn der Datenbankkern eine entsprechende Anzahl von Ergebnissen gemeldet hat. Das Attribut map speichert, in welchen Bereichen eines Korpus ein Type als Token auftritt. Der entsprechende Teil der in Abschnitt 4.4 vorgestellten types Tabelle map CLOB(128) ermöglicht die Einteilung eines Korpus in maximal 1024 Bereiche, da jedes der 128 Zeichen des map Attributs 8 Bereiche speichern kann, wobei in diesem Fall jedes Bit einen Bereich repräsentiert. Hierbei bedeutet ein gesetztes Bit, daß das zugeordnete Type im korrespondierenden Korpusbereich mindestens einmal als Token auftritt. Die Aufteilung eines Korpus in Bereiche erfolgt anhand korpusweit eindeutiger Nummern, die jedem Text in textinfo zugeordnet werden. Ausgehend von der Gesamtmenge an Bereichen g mit 1 ≤ g ≤ 1024 läßt sich der Bereich, dem Text x zuzuordnen ist, durch die Funktion f (g, x) = x mod g bestimmen. Die Modulo-Funktion mod liefert den Rest der ganzzahligen Division der Werte x und g. Auf diese Weise lassen sich dem Korpus neue Texte hinzufügen. Selbst eine Überschreitung der durch g festgelegten Bereichsgrenze verhindert nicht eine korrekte Zuordnung des Texts zu einem Bereich. Durch die Einführung von Korpusbereichen lassen sich die bei Suchanfragen zu prüfenden Korpuspositionen gerade bei niederfrequenten Wortformen reduzieren. Die Auswertung der in types abgespeicherten Informationen ist hierbei durch die eine Suche veranlassende Komponente vorzunehmen. Die Wahl eines geeigneten Wertes für g ist von der zu erwartenden Zahl an Texten eines Korpus abhängig. Damit Komponenten das Attribut map in geeigneter Form auswerten können, muß die für ein Korpus gewählte Bereichsgröße in der Datenbank gespeichert werden. 4.8 Registrierung der Korpora in der Datenbank Für Anwender einer Korpusdatenbank kann es von Interesse sein, die ihm zur Verfügung stehenden Korpora zu erfragen. Hierfür stellt S AN R EMO die Tabelle toc zur Verfügung, in der alle Korpora durch Importfilter und am Aufbau von Korpora beteiligten Komponenten registriert werden. CREATE TABLE SanRemo. toc ( corpusno INTEGER NOT NULL, parts INTEGER , name VARCHAR (20), PRIMARY KEY( corpusno ) ) In name wird der Name des Korpus abgelegt, der (wie in Abschnitt 4.6 beschrieben wurde) als SQL-Schema interpretiert wird. Von Bedeutung ist das Attribut parts, das die Zahl der Korpusbereiche angibt. toc bildet die oberste Hierarchiestufe der in S AN R EMO verwendeten Tabellenstruktur. Um diesem Aspekt Rechnung zu tragen und um Problemen durch die Vergabe von Schema-Namen auf der Basis des Benutzernamens vorzubeugen, wird für die Tabele toc ein eigenes Schema, SanRemo, eingeführt. 41 4.9 Zusammenfassung der Tabellenstruktur Die n-Tabellen-Struktur bildet die Grundlage für die Speicherung aller korpusbezogenen Informationen. Die in die Tabellen einzufügenden Daten werden von Importfiltern geliefert, die das Korpusmaterial analysieren und aus den Online-Texten alle relevanten Informationen extrahieren. Durch die Unterscheidung zwischen Types und Tokens wird die Speicherung redundanter textueller Informationen vermieden. Die types Tabelle kann für die einfache Suche nach Wortformen und für die Generierung von Wortlisten verwendet werden. Die einzelnen tn Tabellen bewahren die Struktur der Originaltexte. Im Gegensatz zu existierenden Korpusdatenbanken greift S AN R EMO bei Suchanfragen nicht auf spezielle Indizes zu. Durch das Hinzufügen oder Löschen von Texten müssen solche Indexdateien aufwendig reorganisiert und aktualisiert werden. Dies ist bei S AN R EMO nicht nötig. Ferner lassen sich, entsprechende Exportfilter vorausgesetzt, die Korpusdaten in beliebigen Formaten speichern, was die weitgehend identische Reproduktion des Originaltextes beinhaltet. Abbildung 4.4: An der n-Tabellen-Struktur beteiligte Tabellen SanRemo.toc Korpus 3 Korpus 2 Korpus 1 types t1 textinfo t2 info Die Tabelle info gestattet die flexible Speicherung von textbezogenen Informationen, wobei Importfilter nach eigenem Ermessen Kategoriename-WertePaare speichern können. Die Anwendung dieses Konzepts auf positionale Attribute ist aufwendig, da jeder Text in einer eigenständigen Token-Tabele abgelegt wird, weshalb eine entsprechende Tabelle nicht nur die Textnummer sondern auch die Nummer der laufenden Wortform speichern müßte. Ferner würde sich die Komplexität bei Suchanfragen weiter erhöhen, was zu einer Reduzierung der Suchgeschwindigkeit führt. Aus diesem Grund werden positionale Attribute den einzelnen tn Tabellen als Attribute hinzugefügt. Auch die Aufgabe der Erweiterung von tn Tabellen kommt den Importfiltern zu. Importfilter sind die zentralen Komponenten beim Einbringen von Korpusdaten. Die Tabellenstruktur stellt nur die zur Speicherung nötige Infrastruktur 42 zur Verfügung. Das Delegieren der Suche nach relevanten Informationen an den Filter ermöglicht die Speicherung nahezu beliebig strukturierter Korpora. Durch die Attribute map und type_count ermöglicht die n-Tabellen-Struktur die Reduzierung der für die Ausführung von Suchanfragen benötigten Zeit. Für die Auswertung diesbezüglicher Informationen sind ebenfalls Komponenten zuständig. Die Beziehung der an der n-Tabellen-Struktur beteiligten Tabellen ist in Abbilung 4.4 dargestellt. 43 44 5 Filter Das bei Korpusdatenbanken bisher unbekannte Filter-Konzept gestattet eine einfache Erweiterung eines bestehenden Systems. S AN R EMO unterscheidet zwischen Importfiltern, die Online-Texte eines vorgegebenen Formats interpretieren und dem Korpusbestand hinzufügen, und Exportfiltern, die die Speicherung von Korpusdaten in durch den Filter vorgegebenen Formaten ermöglichen. 5.1 Allgemeine Bemerkungen Das Filter-Konzept ist in vielen Bereichen der elektronischen Datenverarbeitung weit verbreitet. Systeme, die das elektronische Publizieren am Rechner (desktop publishing, DTP) ermöglichen, profitieren von Filtern, die mit anderen Programmen gespeicherte Texte einlesen können. Im Multimedia-Bereich nutzen Programme zur elektronischen Bildverarbeitung (EBV) Filter nicht nur, um Bilddokumente unterschiedlicher Herkunft einlesen zu können, sondern ermöglichen ferner optische Veränderungen am Datenmaterial, etwa das Verändern der Helligkeit. Generell erweitern Filter die Funktionalität eines Programmsystems. Hierzu stellt das System eine definierte Schnittstelle zur Verfügung, über die Programm und Filter Daten und Anweisungen austauschen. Da sich Filter dem Anwender nicht als eigenständige Programme darstellen, sondern in ein bestehendes System integriert werden, bezeichnet man sie häufig als plug ins. Korpusdatenbanken können auf unterschiedliche Weise vom Filter-Konzept profitieren: • Durch die Bereitstellung entsprechender Importfilter können Korpora nahezu beliebigen Formats eingelesen werden. • Exportfilter können Korpusdaten in verschiedenen Formaten verfügbar machen. • Anzeigefilter können die Korpusdaten auf unterschiedliche Weise darstellen. 45 Die dem Autor bekannten Korpusdatenbanken machen von Filtern in der dargestellten Form keinen Gebrauch. 5.2 SGML Die Metasprache SGML (Standard Generalized Markup Language) ist ein internationaler Standard zur Definition von Auszeichnungssprachen. 1 SGML-Dokumente entsprechen einer definierten, leicht zu parsenden baumartigen Struktur. Im folgenden werden Merkmale dieser Sprache vorgestellt, die sie zu einem idealen Träger elektronisch gespeicherter textueller Informationen machen. SGML-Dokumente bestehen aus Elementen folgender Form: <t a1=v1 a2=v2 ... an=vn> c </t> Hierbei sind <t ...> und </t> Start- und End-Tags, c beschreibt Inhalte und an=vn enthalten Attribut-Wert-Paare. c kann leer sein, Texte, Elemente oder Kombinationen aus Texten und Elementen enthalten. Die baumartige Struktur von SGML-Dokumenten entsteht durch die Möglichkeit der Schachtelung von Tags. Während Tags die Struktur eines Dokuments festlegen, charakterisieren Attribute die Eigenschaften von Elementen. Die Menge der zur Verfügung stehenden Attribute und Tags wird in der document type definition (DTD) vorgenommen. SGML bietet die Möglichkeit, Online-Texte mit beliebigen Auszeichnungen zu versehen. Diese können die Struktur des Textes kennzeichnen, etwa indem sie Überschriften, Absatz- oder Kapitelgrenzen markieren. Gerade im Hinblick auf Korpora ist die Möglichkeit von Bedeutung, einzelne Wörter durch Attribute mit zusätzlichen Informationen zu versehen. Auf diese Weise lassen sich den Tokens beliebige grammatische Kategorien sowie andere Wortformbezogene Annotierungen zuordnen. Allerdings definiert SGML nur die formale Struktur eines Dokuments. Zwar kann die Richtigkeit eines SGML-ausgezeichneten Textes anhand der DTD überprüft werden, die Wahl der Tags und Attribute bleibt dem Anwender überlassen. Die Text Encoding Initiative (TEI) pflegt eine Sammlung von Richtlinien, die für bestimmte Texttypen die zu verwendenden Tags und Attribute enthält.2 Für die Kodierung des British National Corpus wurde die Auszeichnungsvariante Corpus Data Interchange Format (CDIF) verwendet, die sich an TEIVorgaben orientiert.3 5.3 Exportfilter Exportfilter können den Datenbestand einer Korpusdatenbank auf eine Weise speichern, die die Weiterverarbeitung dieses Materials mit anderen Programmen gestattet. Sie ermöglichen damit • die Verwendung eines Korpus in einer anderen Korpusdatenbank 1 2 3 46 Siehe hierzu [Goldfarb 1990] Siehe hierzu [Ide 1995] [Aston 1998, S. 33] • die Distribution eines Korpus in einem verbreitetem Format • Vorbereitung der Veröffentlichung eines Korpus in elektronischer oder gedruckter Form Die Übernahme eines Korpus in eine andere Korpusdatenbank ließe sich mit einem Exportfilter realisieren, der SGML-Dokumente generieren kann. Eine Veröffentlichung von Korpustexten im Internet ist möglich, wenn ein auf SGML aufbauender Filter HTML-Dokumente erzeugen kann. Im Rahmen der experimentellen Implementierung von S AN R EMO wurden bisher keine Exportfilter programmiert. 5.4 Importfilter Bevor Anwender einer Korpusdatenbank auf die gespeicherten Texte zugreifen können, müssen die Korpus-Rohdaten mit geeigneten Programmen in die Datenbank eingefügt werden. Ziel eines solchen Imports ist es, alle im OnlineText gespeicherten Informationen in die Datenbasis zu übernehmen. Die nTabellen-Struktur bildet die Grundlage für die Speicherung von Korpusdaten. Die Informationen werden durch Importfilter bereitgestellt. Diese extrahieren aus Online-Texten alle relevanten Informationen und fügen sie den entsprechenden Tabellen durch geeignete SQL Kommandos hinzu. Diese Informationen lassen sich in verschiedene Gruppen einteilen, nämlich • Korpusbezogene Informationen, • textbezogene Informationen, • Korpusannotationen und • Wortformen. 5.4.1 Generelle Überlegungen Eine Korpusdatenbank sollte jederzeit durch neue Texte ergänzt werden können. Ferner sind an die am Import beteiligten Komponenten bestimmte Anforderungen zu stellen. 5.4.1.1 Löschen von Texten Eine Korpusdatenbank muß nicht nur das Hinzufügen neuer Texte ermöglichen, sondern auch das gezielte Entfernen nicht mehr benötigter Dokumente unterstützen. Die n-Tabellen-Struktur kommt diesem Desiderat nach, indem sie die Tabelle textinfo vorsieht, die jedem Text eines Korpus eine eindeutige Nummer zuordnet und den Namen der betreffenden Token-Tabelle speichert. 5.4.1.2 Benutzbarkeit während eines Einfügevorgangs Die Korpusdatenbank sollte während einer Einfügeoperation weitgehend benutzbar bleiben. Hierbei ist zwischen der Benutzbarkeit anderer, nicht vom Import betroffener Korpora, sowie des Korpus, dem neue Texte hinzugefügt 47 werden sollen, zu unterscheiden. Im ersten Fall ist eine weitere Verwendbarkeit in jedem Fall zu gewährleisten, da das zugrunde liegende Datenbanksystem für die nötige Abschirmung der einzelnen Korpora sorgen kann. Auch die Benutzbarkeit des Korpus, dem Texte hinzugefügt werden, kann gewährleistet werden, wenn für den Import ausschließlich Elemente von SQL verwendet werden. 5.4.2 Importfilter für das BNC Um das BNC in S AN R EMO importieren zu können, wurde ein Filter entwickelt, der Textdateien einlesen kann, die in jeder Zeile eine Wortform des Textes enthalten. Solche Dateien enthalten keine weiteren textbezogenen Informationen sowie keine grammatische Kategorien oder andere positionale Attribute. Für die Übermittlung der eingelesenen Wortformen an die Datenbank kann der Filter auf Elemente von SQL zurückgreifen oder spezifische Werkzeuge des verwendeten Datenbanksystems ansprechen. Um den Zeitbedarf für Einfügevorgänge beurteilen zu können, wurden beide Varianten als Perl-Programme realisiert. Da die einzufügenden Texte außer den Wortformen keine weiteren Informationen enthalten, beinhaltet die Arbeit des Filters das Einlesen der Wortform sowie das Übertragen in die entsprechenden Tabellen der Datenbank. Für jedes Wort wird zunächst geprüft, ob die Oberfläche dieser Wortform bereits als Type in der Tabelle type enthalten ist. Trifft dies zu, kann die in running_type gespeicherte eindeutige Nummer des Types ermittelt werden. Im anderen Fall ist eine eindeutige, noch nicht vergebene Nummer zu bestimmen und mit dem Type in type einzutragen. Weiter ist der ermittelte oder berechnete running_type mit einer ebenfalls eindeutigen Nummer in der token Tabelle zu speichern. Da die n-Tabellen-Struktur für jeden Text eine eigenständige Token-Tabelle vorsieht, muß der Filter diese vor dem Einlesevorgang generieren und nach erfolgreichem Import in der Tabelle textinfo eintragen, um die Zugehörigkeit des Textes zu einem Korpus zu markieren. Da textinfo alle relevanten Informationen über einen eingelesen Text speichert, beispielsweise den Namen der Tabelle, in denen die Wortformen abgelegt werden, ist ein nachträgliches Hinzufügen von positionellen Attributen problemlos möglich. 5.4.2.1 Implementierung auf der Basis von SQL Die in Abschnitt 5.4.2 beschriebene Vorgehensweise beinhaltet sowohl lesende als auch schreibende Zugriffe auf die Datenbank. Die Suche nach vorhandenen Types geschieht durch SELECT Anweisungen. Besteht der zu importierende Text aus n Wortformen, sind im Idealfall, falls also alle Wortformen bereits als Types erfaßt wurden, n Anfragen an die type Tabelle. Im Falle nicht gefundener Types sind entsprechend viele INSERT Befehle nötig. Da die Token-Tabelle für jeden Text neu angelegt wird, sind in jedem Fall n INSERT Anweisungen nötig. Eine allgemein gültige Aussage über die Häufigkeit des Auftretens unbekannter Types ist nicht möglich. Die Struktur des Korpus, die Auswahl der Texte sowie die Reihenfolge des Imports sind beeinflussende Faktoren. 48 Um Anfragen an die Datenbank und den damit verbundenen zeitlichen Aufwand zu minimieren, können bereits gefundene Types sowie deren eindeutige Nummer durch das Perl-Programm zwischengespeichert werden. Vor einer Anfrage an die Datenbank ist demnach zu prüfen, ob die benötigten Informationen bereits vorliegen; nur wenn dies nicht der Fall ist, erfolgt ein Zugriff auf die Datenbank. Der hierdurch erreichbare Zuwachs an Geschwindigkeit ist von der Größe des einzulesenden Textes sowie dessen Aufbau (also Häufigkeit und Verteilung einzelner Wortformen) abhängig. Allerdings steht der kürzeren Einfügedauer ein deutlich größerer Speicherplatzbedarf des Programms gegenüber. Im Hinblick auf die derzeit verfügbaren Rechner und deren Speicherkapazität dürfte dieser Aspekt allerdings zu vernachlässigen sein. Abhängig von der Größe des einzulesenden Textes sind viele Einzelanfragen an die Datenbank nötig. Da alle Änderungen an vorhandenen Daten durch das Datenbanksystem vorgenommen werden, ist während des Import-Vorgangs ein weiterer Zugriff auf das Korpus möglich. 5.4.2.2 Verwendung RDBMS-spezifischer Mechanismen Eine zweite Realisierung des Filters liegt mit dem Programm turbo.pl vor. Ziel dieser Implementierung war, die Zahl der Anfragen an das RDBMS so gering wie möglich zu halten. Dies wird durch die Verwendung von Dienstprogrammen, die das Datenbanksystem zur Verfügung stellt, erreicht. Die Werkzeuge LOAD und EXPORT können vollständige Tabellen in ASCII-Dateien ablegen, bzw. aus diesen in Tabellen einfügen. Sie wurden speziell für die Verarbeitung großer Datenmengen bereitgestellt, und versprechen einen deutlichen Geschwindigkeitszuwachs beim Einleseprozeß. Voraussetzung für die Anwendung solcher Dienstprogramme ist, daß die Programmiersprache die Ausführung nativer Programme auf einem Rechner unterstützt. Dies ist im Falle von Perl gewährleistet. Das Programm turbo.pl bedient sich des LOAD-Werkzeugs, um die TokenTabelle in die Datenbank zu übernehmen. Hierzu werden die Wortformen zunächst in einer Datei zwischengespeichert, die LOAD dann einliest. Werden auf diese Weise nur Zugriffe auf die Token-Tabelle ersetzt, bleibt das Korpus während des Einlesevorgangs benutzbar. Eine weitere Möglichkeit der Geschwindigkeitssteigerung besteht im vollständigen Export der Type-Tabelle mit dem EXPORT Kommando. Die auf diese Weise generierte Datei kann vom Filter eingelesen werden. Erst nach dem vollständigen Importieren des Textes wird die Type-Tabelle in aktualisierter Form in die Datenbank zurückgeschrieben. Die Verwendung DBMS-spezifischer Dienstprogramme ist einer reinen SQLbasierten Lösung nur dann vorzuziehen, wenn sehr oft große Korpora eingelesen werden müssen, da die Anwendung solcher Komponenten die Verfügbarkeit der Dienstprogramme unter gleichem Namen sowie mit gleicher Zahl von zu übergebenden Parametern voraussetzt. 5.4.2.3 Abwägung der beiden Methoden Beide Filter wurden für den Import von Texten des BNC verwendet. Die hierzu benötigten Zeiten sind von mehreren Faktoren abhängig. Neben technischen 49 Aspekten wie der Leistung des verwendeten Computersystems ist in diesem Zusammenhang die Bandbreite des Netzwerkes zu nennen. Ebenfalls von Belang sind aber korpusspezifische Faktoren wie Anzahl der Texte oder Zahl der bereits bekannten Types. Kapitel 7.1 beschäftigt sich mit Erfahrungen im praktischen Einsatz. 50 6 Korpusanfragen In diesem Kapitel werden Fragen, die die Kommunikation des Anwenders mit S AN R EMO betreffen, diskutiert. In diesem Zusammenhang ist auf die Eignung von SQL als Benutzeranfragesprache einzugehen. Ferner werden grundsätzliche Anforderungen an Korpusanfragesprachen formuliert. 6.1 Korpusanfragen in SQL 6.1.1 SQL als Benutzeranfragesprache Der Zugriff auf ein Korpus erfolgt durch Formulierung geeigneter Suchanfragen. Die dem Anwender zur Verfügung stehenden Funktionen werden durch die verwendete Anfragesprache vorgegeben. Bei einer Korpusdatenbank auf der Basis eines RDBMS steht SQL als Datenbanksprache zur Verfügung. Deren komplexe Syntax sowie die in Kapitel 4 vorgestellte Aufteilung der Korpusdaten auf types und tn Tabellen erschweren die Eingabe geeigneter SQL-Konstrukte. Zudem kann beim intendierten Benutzerkreis von Korpusdatenbanken eine fundierte Kenntnis dieser Sprache nicht vorausgesetzt werden. 6.1.2 SQL als Basis für Korpusanfragen Die in Abschnitt 3.2 vorgestellte Architektur von S AN R EMO sieht SQL als zentrales Kommunikationsmittel zwischen den Komponenten der Benutzerebene und dem Datenbanksystem vor. In diesem Abschnitt werden Anfragen aus Benutzersicht und ihre Darstellung in SQL vorgestellt. 6.1.2.1 Suche nach Wortformen Bei der Suche nach Wortformen sind alle Korpuspositionen aufzulisten, an denen ein bestimmtes Token auftritt. Alle Texte eines Korpus werden in textinfo eingetragen. Wenn der Benutzer die Menge der zu durchsuchenden Texte nicht einschränkt, sind die im folgenden darzustellenden Anweisungen für jeden Text auszuführen. 51 • Suche nach passender Wortform im Attribut surface der Tabelle types • wird eine solche Wortform gefunden, enthält running_type eine korpusweit eindeutige Nummer, nach der im Attribut token der Tabelle tn zu suchen ist. 6.1.2.2 Erstellung sortierter Wortlisten Die Erstellung sortierter Wortlisten ist mit einer SELECT Anweisung realisierbar: SELECT ∗ FROM types ORDER BY surface ASC SELECT ∗ FROM types WHERE surface >= ’ Text ’ ORDER BY surface ASC Eine Sortierung nach der Häufigkeit des Auftretens ist durch die Verwendung des Attributs type_count als Sortierkriterium ebenfalls möglich. 6.1.3 KWIC-Listen Die Darstellung einer KWIC-Liste ist durch folgendes SQL-Konstrukt möglich: SELECT surface , TEMP. running_token FROM types , ( SELECT ∗ FROM t1 WHERE running_token <= 3 and running_token >= 1 ) AS TEMP WHERE types . running_type = TEMP. token ORDER BY TEMP. running_token ASC Diese Anweisung liefert alle Wortformen an den Korpuspositionen 1, 2 und 3. Von besonderer Bedeutung ist hierbei, daß die für eine Bildschirmausgabe benötigten Oberflächen ohne weitere Anfragen ermittelt werden können. Die Grenzen der Anfrage (1 und 3) können durch die eine Anfrage stellende Komponente beliebig gesetzt werden. Um etwa den Kontext einer Wortform darzustellen, ist nach dieser Wortform in der types Tabelle zu suchen. Die Grenzen für die folgende SELECT Anweisung ergeben sich aus ihrer Korpusposition in einer tn Tabelle. 6.2 Allgemeine Anforderungen Die in der Datenbank abgelegten Korpusdaten lassen sich in textbezogene Informationen und positionale Attribute unterteilen. Textbezogene Informationen, etwa die Zuordnung zu einer oder mehreren Kategorien, können verwendet werden, um Teilkorpora zu definieren. Positionale Attribute werden vor allem bei Suchanfragen nach Wortformen oder grammatischen Kategorien verwendet. Häufig wird eine solche Suche in einem durch die Auswertung von textuellen Informationen eingeschränkten Suchraum stattfinden. Bei Anfragen an das System muß demnach die Möglichkeit des Zugriffs sowohl auf textbezogene Informationen als auch auf positionale Attribute gewährleistet werden. Ebenfalls wünschenswert ist, daß die Anfragesprache mögliche Erweiterungen in der Tabellenstruktur berücksichtigt. Aus diesem Grund sollten Zugriffe auf beliebige Attribute einzelner Tabellen möglich sein. Geeignete Importfilter könnten beispielsweise fremdsprachliche Grundformen zu einem Wort liefern 52 und in der token Tabelle ein neues Attribut einführen. Wenn die Anfragesprache den Zugriff auf beliebige Attribute gestattet, können auch solche nachträglich bereitgestellten Informationen in Suchanfragen verwendet werden. Eine geeignete Anfragesprache sollte ferner nicht nur auf die gespeicherten Textdaten zugreifen können, sondern auch Analysen hinsichtlich grammatischer Phänomene oder dem sprachlichen Umfeld einer Wortform ermöglichen. Von großer Bedeutung ist eine schnelle Formulierbarkeit von Anfragen. Unnötige Schlüsselwörter sollten bei der Definition der Syntax einer solchen Sprache vermieden werden. Idealerweise reduziert sich die SQL-Anfrage SELECT ∗ FROM korpus . types WHERE surface = ’ Korpus ’ auf die Eingabe der Wortform Korpus. 6.3 SgmlQL SgmlQL ist eine Anfragesprache für SGML-kodierte Texte. Als eine Erweiterung von SQL gestattet sie den Zugriff auf die in SGML-Texten gespeicherten Informationen sowie die Bearbeitung der Annotationen. Die Sprache ist an die Baumstruktur von SGML-Dokumenten angepaßt. Eine Auszeichnung von Korpora mit SGML-Tags gestattet die Speicherung von bibliographischen Angaben, Informationen über die Struktur der Dokumente (etwa Satz-, Absatz- oder Kapitelgrenzen) sowie grammatischen Kategorien einzelner Wortformen. Maitre, Murisasco und Rolbert sehen mit solchen Informationen angereicherte Korpora als Datenbanken an, wobei SGML die Daten-Definitionssprache darstellt.1 Allerdings übernimmt SgmlQL die komplexe Syntax von SQL. Aus diesem Grund ist die Formulierung von Anfragen aufwendig und fehleranfällig. 6.4 Grafische Benutzeroberflächen Eine Korpusanfragesprache bietet einen umfassenden Zugriff auf textuelle Informationen und positionale Attribute. Für weniger komplexe Anfragen, etwa die Suche nach einer bestimmten Wortform oder die Ermittlung deren Frequenz, ist die Auswahl aus einer Liste für den Anwender eine komfortable Alternative. Eine solche Komponente der Korpusdatenbank kann alle Einträge der types Tabelle in Form einer alphabetisch sortierten Liste darstellen, aus der der Benutzer die gewünschte Wortform nur mit Hilfe der Maus auszuwählen braucht. Eine Voraussetzung hierfür ist die Verfügbarkeit einer grafischen Benutzeroberfläche auf dem verwendeten Rechnersystem. Zwar werden gängige Systeme mit solchen Komponenten ausgestattet, allerdings differiert die Programmierung des grafischen Systems häufig. Um die Portierbarkeit einer Korpusdatenbank nicht einzuschränken, ist bei der Wahl der Programmiersprache für solche grafischen Anfragekomponenten die Unterstützung möglichst vieler Benutzeroberflächen wünschenswert. 1 [Maitre 1997, S. 37] 53 Die Sprache Java erfüllt diese Desiderata, indem sie dem Programmierer unabhängig vom grafischen System der Zielplattform einen Satz grafischer Komponentnen zur Verfügung stellt. 54 7 Zusammenfassung Die Konzeption der n-Tabellen-Struktur erlaubt die flexible Speicherung von Korpusdaten sowie zusätzlicher textueller Informationen. Praktische Tests sollen die theoretische Eignung relationaler Datenbanksysteme zur Speicherung von Korpora verifizieren. Die Arbeit schließt mit der Nennung möglicher Erweiterungen des Systems. 7.1 SanRemo im praktischen Einsatz 7.1.1 Import des BNC Das British National Corpus ist aufgrund seiner Größe gut für die Untersuchung der Eignung relationaler Datenbanksysteme zur Speicherung von Korpora auf der Basis der in Kapitel 4 vorgestellten n-Tabellen-Struktur geeignet. An der Abteilung für Computerlinguistik der Friedrich-Alexander-Universität Erlangen-Nürnberg steht das BNC in der Version 1.0 in SGML-ausgezeichneter Form zur Verfügung. Ferner liegen die Texte des Korpus in Form von 4124 Dateien vor, die jeweils eine Wortform in einer Zeile enthalten. Diese wurden für den Import in S AN R EMO herangezogen. Im Verlauf der Arbeit wurden Teile dieser Dateien in die n-Tabellen-Struktur eingelesen. 7.1.2 Anfragen Die Komponenten textinfo.pl, text.pl und kwic.pl erlauben den Zugriff auf die in der n-Tabellen-Struktur abgelegten Korpusdaten. Die Ermittlung statistischer Informationen durch textinfo.pl hat sich in Testläufen als nicht problematisch erwiesen. Der Aufruf der Komponente kwic.pl führte vor der Änderung der Tabellenstruktur durch Einführung der Attribute map und type_count zu sofortiger Anzeige von Fundstellen, allerdings führt die Durchsuchung des gesamten Korpus zu einer insgesamt langen Wartezeit. Diese Wartezeit läßt sich durch konsequente Nutzung der Korpusbereiche erheblich reduzieren. 55 7.1.3 Einfügevorgänge Praktische Versuche ergaben im Durchschnitt Einfügezeiten von 20 Minuten für das Programm fill.pl sowie 3 Minuten für turbo.pl. Aufgrund bereits dargelegter Abhängigkeiten von der zur Verfügung stehenden Hardware lassen sich die ermittelten Werte nicht ohne weiteres auf andere Umgebungen übertragen. Der deutlich geringere Zeitbedarf läßt die Verwendung der durch die Implementierung von turbo.pl vorgestellten Methode als sinnvoll erscheinen. 7.2 Zusammenfassung und Bewertung der Praxistauglichkeit Anwender von Korpusdatenbanken werden häufig mit systemspezifischen Einschränkungen konfrontiert. So sind manche Systeme für spezifische Korpora ausgelegt, benötigen für die Ausführung komplexer Suchanfragen sehr lange oder werden bei umfangreichen Korpora instabil. Relationale Datenbanksysteme haben ihre Verläßlichkeit und Geschwindigkeit in den unterschiedlichsten Bereichen der elektronischen Datenverarbeitung unter Beweis gestellt. Es erschien daher vielversprechend, ihre Eignung für die Korpuslinguistik zu untersuchen. Die Korpusdatenbank S AN R EMO wurde entwickelt, um die Verwendbarkeit des relationalen Datenbanksystems IBM DB/2 für die Speicherung von umfangreichen Korpora zu untersuchen. Hierzu wurden in der Programmiersprache Perl Komponenten entwickelt, die Korpusinformationen des BNC in SQLTabellen einfügen können. Im Verlauf der Arbeit hat sich gezeigt, daß die Beschaffenheit und Verknüpfung der verwendeten Tabellen in starkem Maße die Geschwindigkeit von Anfragen an das System beeinflußt. Die in der Arbeit vorgestellte n-Tabellen-Struktur ist nach der Einführung des Konzepts der Korpusbereiche für die Speicherung und Abfrage umfangreicher Korpora geeignet. Die Zugriffe erfolgen in einem für den Anwender akzeptablen zeitlichen Rahmen. Auch die für den Import von Texten zu veranschlagende Zeit liegt in akzeptablen Grenzen. Hierbei ist zu berücksichtigen, daß die Menge an zu erwartenden Einfügevorgängen im Vergleich zu Suchanfragen zu vernachlässigen ist. Akzeptable Antwortzeiten auf Suchanfragen sind bei Korpusdatenbanken ein bestimmenderer Faktor. Für den Einsatz relationaler Datenbanksysteme spricht die leichte Verfügbarkeit auf zahlreichen Rechner-Systemen. Allerdings erfordern solche Programme leistungsfähige Hardware, gerade wenn umfangreiche Korpora eingelesen werden sollen. 7.3 Mögliche Erweiterungen S AN R EMO wurde nicht primär vor dem Hintergrund einer allgemeinen Verfügbarkeit entwickelt. Aus diesem Grund genügen die Komponenten nicht den Ansprüchen eines Anwenders. Der Aufbau des Systems gestattet allerdings einen problemlosen Austausch einzelner Komponenten. 56 Im Rahmen einer Erweiterung des Systems ist zunächst eine geeignete Anfragesprache zu implementieren. Die Ergebnisse dieser Arbeit zeigen die grundsätzliche Eignung von SQL als Basis für Korpusanfragen. Eine InterpreterKomponente muß Benutzeranfragen in entsprechende SQL-Konstrukte umsetzen. Ferner erscheint die Entwicklung komplexer Import-Filter wünschenswert. Die weite Verbreitung der Metasprache SGML legt die Implementierung eines Filters nahe, der SGML-kodierte Texte auswerten und die entsprechenden Informationen in die n-Tabellen-Struktur übernehmen kann. Um die Verbreitung von Korpora zu erleichtern, wäre ferner ein Exportfilter von Interesse, der SGML-Dokumente erzeugt. Andere mögliche Erweiterungen des Systems betreffen die grafische Aufbereitung von Suchergebnissen sowie die Unterstützung von SQL-Zugriffsrechten. Von besonderer Bedeutung wäre in diesem Fall die Bereitstellung einer Benutzerkomponente auf der Basis eines Java-Applets, das eine Nutzung von Korpora über das Internet gestatten würde. 57 58 Literaturverzeichnis [Aarts 1990] Aarts, J., Meijs, W. (Hrsg.) (1990): Theory and Practice in Corpus Linguistics. Language and Computers: Studies in Practical Linguistics 4, Amsterdam: Rodopi. [Aston 1998] Aston, Guy, Burnard, Lou (1998): The BNC Handbook: Exploring the British National Corpus with SARA Edinburgh: Edinburgh University Press. [Armstrong 1994] Armstrong, S. (Hrsg.) (1994): Using Large Corpora. Cambridge, MA: MIT Press. [Biber 1998] Biber, D., Conrad, S., Reppen, R. (1998): Corpus linguistics: Investigating Language Structure and Use. Cambridge: Cambridge University Press. [Burnard 1996] Burnard, Lou (1996): Introducing SARA: An SGML-Aware Retrieval Application for the British National Corpus; verfügbar im Internet unter 〈http://info.ox.ac.uk/bnc/using/papers/burnard96a.htm〉 [Christ 1994] Christ, Oliver, Schulze, Bruno M. (1994): Ein flexibles und modulares Anfragesystem für Textkorpora. Institut für Maschinelle Sprachverarbeitung (IMS), Universität Stuttgart. [Date 1997] Date, C. J., Darwen, Hugh (1997): A Guide to the SQL Standard. Reading, MA: Addison-Wesley. [Date 1990] Date, C. J. (1990): An Introduction to Database Systems. Reading, MA: Addison-Wesley. [Dunham 1998] Dunham, Jeff (1998): Database Performance Tuning Handbook. New York: McGraw-Hill. [Elmasri 1989] Elmasri, R., Navathe, Sh. (1989): Fundamentals of Database Systems. Reading, MA: Addison-Wesley. [Francis 1964] Francis, W. N., Kucera, H. (1964): Brown Corpus Manual; MANUAL OF INFORMATION to accompany A Standard Corpus of Present-Day Edited American English, for use with Digital Computers; 59 durchgesehene und erweiterte Fassung von 1979, verfügbar im Internet unter 〈http://khnt.hit.uib.no/icame/manuals/brown/INDEX.HTM〉 [Goldfarb 1990] Goldfarb, Charles F. (1990): The SGML handbook. Oxford: Oxford University Press. [Hill 1979] Howard-Hill, T. H. (1979): Literary Concordances: a Complete Handbook for the Preparation of Manual and Computer Concordances . Oxford: Pergamon. [Ide 1995] Ide, N., Veronis, J. (Hrsg.) (1995): The Text Encoding Initiative: Background and Context. Dordrecht: Kluwer. [Maitre 1997] Le Maitre, J., Muriasco, E., Rolbert, M. (1997): From Annotated Corpora to Databases: The SgmlQL Language. In: Nerbonne, J.: Linguistic Databases. CSLI Lecture Notes 77, S. 37–58. [Schneider 1997] Schneider, H.-J. (Hrsg.) (1997): Lexikon Informatik und Datenverarbeitung. Oldenburg: Opladen. [Sinclair 1991] Sinclair, John (1991): Corpus – Concordance – Collocation. London: Longman. [Souter 1993] Souter, C., Atwell, E. (Hrsg.) (1993): Corpus-based Computational Linguistics. Amsterdam: Rodopi. [Svartvik 1992] Svartvik, J. (Hrsg.) (1992): Directions in Corpus Linguistics; Proceedings of Nobel Symposium 82 Stockholm, 4-8 August 1991. [Thomas 1996] Thomas, J., Short, M. (Hrsg.) (1996): Using Corpora for Language Research. London: Longman. [Zierl 1997] Zierl, Marco (1997): Entwicklung und Implementierung eines Datenbanksystems zur Speicherung von Textkorpora. Magisterarbeit, Abteilung für Computerlinguistik, Friedrich-Alexander-Universität Erlangen-Nürnberg. (Auch erschienen als erster Band dieser Reihe.) 60