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.