Verwandtschaftssuche – Funktionen zur statistisch semantische Suche


Andreas Rauch

Im vorhergehenden Artikel Statistisch semantische Suche haben wir das notwendige Werkzeug für den SQL Server eingebunden: Die Semantik Datenbank und den Microsoft Office Paketfilter. Nun soll die Semantik auch mal für uns tun. Mit Hilfe 3er Funktionen können wir einiges herausfinden: Funktion 1: SEMANTICKEYPHRASETABLE SEMANTICKEYPHRASETABLE hilft uns dabei die Schlüsselwörter aus Dokumenten herauszufinden. Der Funktionsrumpf sieht dabei so aus: SEMANTICKEYPHRASETABLE ( table, { column | (column_list) | * } [ , source_key ] ) --So zum Beispiel DECLARE @DocID hierarchyid SELECT @DocID = path_locator from Akten where name = 'Workflow.docx'; SELECT SEMANTIKTAB.keyphrase, SEMANTIKTAB.score from SEMANTICKEYPHRASETABLE ( Akten, file_stream, @DocID ) AS SEMANTIKTAB ORDER BY SEMANTIKTAB.score DESC; Und hier mein Ergebnis dazu: So finden wir schon mal raus, welche Schlüsselwörter ein Dokument enthält und in welcher Gewichtung. So könne wir schon mal rausfinden welche Dokumente ähnlich sind. Funktion 2: SEMANTICSIMILARITYTABLE Die Funktion gibt als Ergebnis die Dokumente zurück, die aufgrund der Semantik dem angegeben ähneln, sprich sich in den Schlüsselwörtern inkl Gewichtung ähnlich sind. SEMANTICSIMILARITYTABLE ( table, { column | (column_list) | * }, source_key ) --Zunächst suchen wir uns die Idee des Dokuments raus.. DECLARE @DocID hierarchyid SELECT @DocID = path_locator from Akten where name = 'Workflow.docx'; SELECT mft.name, sst.score FROM SEMANTICSIMILARITYTABLE ( Akten, file_stream, @DocID ) AS sst INNER JOIN Akten mft ON path_locator = matched_document_key ORDER BY score DESC Und so sieht mein Ergebnis hier aus.. Je höher der Score, umso ähnlicher das Dokument. Ach ja.. Wenn zwei oder mehr Dokumente den gleichen Score aufweisen, kann man davon ausgehen, dass es sich um Kopien handelt Funktion 3: SEMANTICSIMILARITYDETAILSTABLE Warum ist dieses Dokument eigtl ähnlich mit einem anderen. Die Funktion SEMANTICSIMILARITYDETAILSTABLE schlüsselt uns das etwas genauer aus: SEMANTICSIMILARITYDETAILSTABLE ( table, source_column, source_key, matched_column, matched_key ) DECLARE @DocID hierarchyid DECLARE @DocIDVergleich hierarchyid SELECT @DocID = path_locator from Akten where name = 'Workflow.docx'; SELECT @DocIDVergleich = path_locator FROM Akten WHERE name = 'Security.docx'; SELECT TOP(5) TAB.keyphrase, TAB.score FROM SEMANTICSIMILARITYDETAILSTABLE ( Akten, file_stream, @DocID, file_stream, @DocIDVergleich ) AS TAB ORDER BY TAB.score DESC;   Voila.. und das ist unser Ergebnis. vermutlich hatte alles was mit Sharepoint zu tun Die Semantik belastet natürlich unseren Volltext ein Stück mehr, aber die Möglichkeiten, die sich daraus ergeben sind unerschöpfllich, vor allem, wenn man bendekt wie extrem schnel ldie Volltextindizierung geworden ist.

Statistisch semantische Suche


Andreas Rauch

Ja richtig gehört: Statistisch semantische Suche. Ein schönes Wort. In Wikipedia liest man dazu “.. Bedeutung sprachlicher Zeichen..”  Und das triffts auch schon fast. Die statistisch semantische Suche extrahiert relevante Phrasen per Volltextsuche aus Spalten oder Filetables und gewichtet diese. Sehen wir uns mal gewichtete Phrasen eines Dokuments an. Man ganz gut erkennen, dass hier in einem Dokument folgende Begriffe gefunden wurden und je nach Score der eine wohl wichtiger (häufiger) zu sein scheint, als ein anderer. In diesem Beispiel geht es also wohl um Workflows, Stichwörter und Sharepoint. Tatsächlich muss der Begriff nicht als einzelnes Wort vorkommen, sondern durchaus in Kombinationen. In diesen Text geht es beispielsweise auch um Unternehmensstichwörter. Aber wie kommt die statistisch semantische Suche in den SQL Server? Dazu brauchts ein ordentliches Rezept mit folgenden Zutaten: Eine Semantikdatenbank, evtl. das Microsoft Office Filter Paket, die Volltextsuche, ein wenig TSQL und einen Neustart der Volltextsuche. Punkt 1: Semantikdatenbank einbinden Auf der DVD des SQL Servers findet sich im Verzeichnis \1031_DEU_LP\x64\Setup die Installationsdatei SemanticLanguageDatabase.msi für die Datenbank. Das Setup entpackt lediglich die Datenbank in ein Verzeichnis. Um die Semantikdatenbank in die SQL Serverinstanz einzubinden, muss die Datenbank noch angefügt werden. Entweder per GUI im SSMS oder per Script. Anschließend die Datenbank für die semantische Suche registrieren. Punkt 2: Office Filter Paket einbinden Da SQL Server keine aktuellen Office Versionen out-of-the-box supportet,  kann man das schnell ändern indem man sich das Office Filter Paket 2010 downloaded: http://www.microsoft.com/de-de/download/details.aspx?id=17062. Nach der Installation muss das Filterpaket noch der Volltextsuche bekannt gemacht werden --SemantikDb DB extrahieren (\1031_DEU_LP\x64\Setup) --und attachen.....msi-File CREATE DATABASE semanticsdb ON (FILENAME = 'C:\Microsoft Semantic Language Database\semanticsdb.mdf') FOR ATTACH -- und registrieren EXEC sp_fulltext_semantic_register_language_statistics_db @dbname = N'semanticsdb'; --Welche Sprachen werden unterstützt select * from sys.fulltext_semantic_languages --Filterpackage installiert?? Exsitiert für Office 2007 und Office 2010 --Aktivieren der iFilter für Volltextsuche Sp_fulltext_service 'Load_os_resources', 1 --Anzeige der indizierbaren Dokumente select * from sys.fulltext_document_types   Nun Steht die Volltextsuche inkl semantischer Suche voll zur Verfügung.  In den Volltexteigenschaften der Tabelle nur noch Häkchen setzten und den richtigen Typ wählen. File_type für den Inhalt der Dokumente. In diesem Screenshot handelt es sich um eine Filetable.