Flexionen-Abfragen mit FTS und MS SQL-Server

11. Juli 2013
Die Volltextsuche – in Informatiker- & IT-Fachkreisen besser unter der englischen Bezeichnung „FullText Search“ oder der Abkürzung „FTS“ bekannt – beschreibt ein Verfahren um ähnliche oder verwandte Begriffe in Texten und Dokumenten unter Berücksichtigung eines bestimmten Kontexts zu finden.

Im Rahmen dieses Artikels sollen Verwendungszwecke und Einsatzmöglichkeiten der Volltextsuche mit Hilfe des Microsoft SQL-Servers anhand von Beispielen aus der Linguistik aufgezeigt und näher betrachtet werden.

Motivation: Textverarbeitung

Es gibt viele Szenarien bei denen Volltextsuchen innerhalb von IT-Anwendungen verwendet werden, auch wenn dies dem Benutzer oft nicht direkt ersichtlich ist. So kommt beispielsweise in der heutigen Zeit keine moderne Textverarbeitung-Software mehr ohne Rechtschreib-und Grammatikkorrekturen aus.

Die richtige Schreibweise der einzelnen Worte, die so genannte Wortbeugung bzw. Flexion, ist dabei innerhalb des Programms (z.B. in Microsoft Word) unter Beachtung des grammatikalischen Zusammenhangs in einem Wörterbuch hinterlegt. Diese Lexika (engl.: Thesauri) sind je nach Anwendung bei der Verwendung entweder bereits in der eingesetzten Applikation integriert oder können bei Bedarf als Zusatzmodule nachinstalliert werden.

FTS-Verwaltungssichten und -Funktionen im SQL-Server

Seit SQL-Server-Version 2008 ist die Volltextsuche nicht mehr ein autonom implementierter Dienst sondern eine in den SQL-Server-Prozess integrierte Komponente. Durch diese Umsetzung ergeben sich viele Vorteile wie Performance-Gewinn, Abfrage-Optimierungen durch Volltext-Indizes und effizientere Ressourcenverwaltungen (vgl. [5], Seite 92/93). Des Weiteren bietet der SQL-Server nun eine Liste mit diversen Datenbank-Objekten an, die in Verbindung mit der Volltextsuche stehen:

Diese Datenbank-Objekte sind eine Reihe von dynamischen Managementfunktionen und -sichten (deshalb auch das dm-Präfix im Namen), welche dem sys-Schema angehören [2]. Bezüglich der Namenskonventionen für die einzelnen Views oder Funktionen orientieren sich diese Verwaltungsfunktionen am Schema "sys.dm_fts_[xyz]", wobei "[xyz]" die genauere Funktionalität beschreibt. Des Weiteren werden für diese Objekte VIEW SERVER STATE-oder VIEW DATABASE STATE-Berechtigung benötigt, um Lesebefehle mittels der SELECT-Anweisung ausführen zu können [2],[3] .

Flexionsformen mit sys.dm_fts_parser-Funktion abfragen

Sicherlich wäre es zu umfangreich nun alle Views und Funktionen, die in der MSDN aufgeführt sind, bis in das kleinste Detail zu beleuchten. Dennoch sollte man sich bereits an dieser Stelle bewusst sein, welch breites Funktionsspektrum der FTS-Dienst im MS SQL-Server bietet.

Im Folgenden werden ein paar einfache SQL-Statements gezeigt, welche mit Hilfe der sys.dm_fts_parser-Funktion Flexionen abfragen. Die allgemeine Abfrage-Form für sämtliche folgende SQL-Anweisungen orientieren sich ausschließlich am folgenden Muster:

   1: SELECT * FROM sys.dm_fts_parser

   2: (

3: N'FORMSOF(FREETEXT, ' + @SearchTerm + ')', -- @SearchTerm: Zeichenkette für Suchbegriff

   4:     lcid, -- Datentyp int, Gebietsbezeichner für Länder- und Spracheinstellungen (z.B. 1031 für Deutsch)

   5:     stoplist_id, -- Datentyp int, für evtl. vorhandene Stoplisten (Default: NULL)

   6:     accent_sensitivity -- Datentype bit, Unterscheidung von diakritische Zeichen 

   7: )

Bei dieser Form der Abfrage gilt es vor allem den Gebietskontext in Form des LCID (=Language Code Identifier) zu berücksichtigen, welcher für die Länder- und Spracheinstellungen benötigt wird. So muss beispielsweise für die deutsche Sprache der Ländercode 1031 angegeben werden, während für englisch-amerikanische Vokabulare der Code 1033 festgelegt ist. Die Ländercodes für andere Sprachgebiete und Nationen können im Internet beispielsweise hier recherchiert werden.

Sämtliche Konjugationsformen des englischen Verbs „go“ können zum Beispiel wie folgt abgefragt werden:

   1: SELECT * FROM sys.dm_fts_parser

   2:     (N'FORMSOF(FREETEXT, ' + 'go' + ')', 

   3:         1033, 

   4:         NULL, 

   5:     0);

Das Ergebnis sieht dann wie folgt aus:

Search-Result_Go_thumb2

In der Spalte "display_term" stehen die unterschiedlichen Formen, die das Verb in der englischen Sprache annehmen kann, während die Spalte "source_term" das Ausgangswort der Suchabfrage enthält.

Ähnlich verhält es sich im folgenden Beispiel mit deutschen Nomen:

   1: SELECT * FROM sys.dm_fts_parser

   2:     (N'FORMSOF(FREETEXT, ' + 'Lexikon' + ')', 

   3:         1031, 

   4:         NULL, 

   5:     0);

So lautet in der deutschen Sprache der Plural von "Lexikon" auf keinen Fall "Lexikas" sondern "Lexika" oder alternativ “Lexiken”:

Search-Result_Lexikon_thumb3

Umfangreichere Ergebnislisten für Konjugationsformen werden insbesondere durch Abfragen der vielen unregelmäßigen deutschen Verben (z.B. “riechen”) erzielt:

   1: SELECT * FROM sys.dm_fts_parser

   2:     (N'FORMSOF(FREETEXT, ' + 'rieche' + ')', 

   3:         1031, 

   4:         NULL, 

   5:     0);

Und bitte mal ganz ehrlich, wer hätte aus dem Stegreif gewusst, dass der Konjunktiv von "ich rieche" "ich röche" lautet Smiley ?

Search-Result_rieche_thumb1

Zusammenfassung und Ausblick

In diesem Artikel wurde dargelegt, wie mit Hilfe der Volltextsuche innerhalb des Microsoft SQL-Server Konjugationen von Verben und Deklinationen von Nomen abgefragt werden können. Somit könnte die Volltextsuche also durchaus im Rahmen der sprachwissenschaftlichen Forschung Verwendung finden. Des Weiteren bietet die FTS aber noch viele weitere Funktionalitäten und Modifikationen, welche in weiteren Artikel gezeigt werden sollen.

 

Quellen

  1. Wikipedia: Flexion (letzter Zugriff: 25.06.2013)