Der Anlass für dieses Thema ist das Online-Archiv von Access im Unternehmen. Gesucht war eine Möglichkeit, Beiträge zu finden, die dem Leser eines Beitrags weitere hilfreiche Informationen zum Thema liefern. Dafür gibt es verschiedene Ansätze, von denen wir uns für einen entschieden haben, der zwar etwas Handarbeit erfordert, aber recht sinnvolle Ergebnisse lieferte. Wie diese Methode aussieht und wofür sie diese noch ein setzen können, erfahren Sie im vorliegenden Beitrag.
Interessante Artikel finden
Einige Webseiten bieten dem Leser eines Artikels gleich noch eine Liste weiterer Artikel an, die das gleiche oder zumindest ähnliche Themen behandeln. Das ist auch etwas für die Leser von Access im Unternehmen, haben wir uns gedacht. Nur: Wie finden wir die am besten zu einem anderen Artikel passenden Artikel
Es gab verschiedene Ansätze:
- Einer, der alle Artikel kennt, sucht zu jedem Artikel einige passende weitere Artikel aus. Nachteil: Die betroffene Person wehrte sich mit Händen und Füßen gegen diese Arbeit. Neben dem hohen initialen Aufwand war außerdem mit recht hohem Aufwand für die Integration der neuen Artikel zu rechnen, da man ja nicht nur passende Artikel zu den neuen Artikeln finden musste, sondern die neuen Artikel auch bereits vorhandenen Artikeln zuweisen musste.
- Die Leser sollen entscheiden: Wir werten einfach alle Logfiles aus und untersuchen für jeden Artikel, welche anderen Artikel am häufigsten in der gleichen Session (also durch den gleichen Leser) aufgerufen wurden. Wir haben dies probiert, aber das Ergebnis war sehr unbefriedigend: Es ergaben sich einfach keine sinnvollen Zusammenhänge zwischen den Artikeln. Das lag wohl hauptsäclich daran, dass sich nach der Veröffentlichung von Newslettern, welche die jeweils neue Ausgabe ankündigten, alle Leser gleich mal alle Artikel der Ausgabe innerhalb einer Session angesehen haben.
- Der Inhalt soll entscheiden: Wir suchen aus jedem Artikel die Wörter heraus, die besonders oft vorkommen und untersuchen die Artikel mit diesen Daten auf Gemeinsamkeiten. Auch diese Idee haben wir verworfen, weil wir keine besonders hohe Erwartungen an die Genauigkeit dieser Methode hatten.
- Schließlich haben wir uns für die letzte Methode entschieden: Wir weisen jedem Artikel eine Reihe Schlüsselwörter zu und gewichten diese zusätzlich mit den Zahlenwerten 1, 2, 3, 5 und 10. Wo zwei Artikel gemeinsame Schlüsselwörter aufweisen, werden die Zahlenwerte beider Artikel für das jeweilige Schlüsselwort addiert und so die passendsten Artikel ermittelt.
Artikel matchen
Für das Matching der Artikel haben wir ein recht praktisches Formular erstellt, das wie in Bild 1 aussieht. Das Formular ist an die Tabelle der Beiträge gebunden und enthält neben dem Namen des Beitrags noch Informationen über die Ausgabe, in welcher der Beitrag erschienen ist. Darunter befinden sich gleich drei größere Steuerelemente. Das linke ist ein Unterformular, mit dem der Benutzer die Attribute auswählen und diese mit einer Priorität versehen kann. Das mittlere ist ebenfalls ein Unterformular. Es zeigt die entsprechend der im linken Unterformular festgelegten Attribute passendsten Artikel an.
Bild 1: Dieses Formular enthält alle Funktionen zum Matching von Datensätzen und zeigt auch gleich noch das aktuelle Ergebnis an.
Schließlich lieferte das rechte beim Festlegen der Attribute eine kleine Gedächtnisstütze, falls der Benutzer mal nicht den kompletten Inhalt des Artikels aus dem Titel ableiten konnte: Das dort enthaltene Webbrowser-Steuerelement zeigt den jeweiligen Artikel aus dem Online-Archiv an. Die beiden Schaltflächen im oberen Bereich dienen schließlich dem schnellen Abgleich der Daten mit den entsprechenden Tabellen auf dem Webserver.
Datenmodell
Das Datenmodell besteht lediglich aus drei Tabellen (siehe Bild 2). tblBeitraege enthält eigentlich alle Informationen, die für den Betrieb von www.access-im-unternehmen.de nötig sind, aber in der Beispieldatenbank haben wir alle Felder bis auf BeitragID, Titel, Jahr und Ausgabe entfernt. Die Tabelle tblAttribute enthält schlicht ein Primärschlüsselfeld und die zuzuweisenden Attribute. Das Feld Attribute besitzt einen eindeutigen Index, damit kein Attribut zweimal vorkommen kann. Die Verknüpfungstabelle tblBeitraegeAttribute enthält die eigentlich für diese Anwendung wichtigen Daten und ist für die Zuweisung der Attribute zu den Beiträgen sowie für deren Gewichtung verantwortlich. Die beiden Felder BeitragID und AttributID sind jeweils als Nachschlagefeld ausgelegt und mit den beiden Tabellen tblBeitraege und tblAttribute verknüpft.
Bild 2: Das Datenmodell der Beispieldatenbank
Das Formular frmPassendeBeitraege
Das Hauptformular frmPassendeBeitraege enthält als Datenherkunft die Tabelle tblBeitraege und zeigt alle enthaltenen Felder in entsprechenden Steuerelementen an (siehe Bild 3). Seine Funktionalität beschränkt sich darauf, beim Datensatzwechsel den passenden Beitrag im Webbrowser-Steuerelement ctlWebbrowser anzuzeigen. Dazu wird dieses zunächst im Kopf des Klassenmoduls des Formulars deklariert:
Bild 3: Entwurfsansicht des Hauptformulars mit seinen Unterformularen
Dim objWebbrowser As WebBrowser
Sie könnten zwar auch direkt per Me!ctlWebbrowser darauf zugreifen, aber über eine Objektvariable machen Sie die Elemente des Objekts per IntelliSense verfügbar. Damit die Objektvariable gleich verfügbar ist, füllen wir diese direkt in folgender Ereignisprozedur, die durch das Ereignis Beim Öffnen des Formulars ausgelöst wird:
Private Sub Form_Open(Cancel As Integer) Set objWebbrowser = Me!ctlWebbrowser.Object End Sub
Schließlich soll für jeden Datensatz der passende Beitrag im Webbrowser-Steuerelement angezeigt werden. Dies erledigt die folgende, bei jedem Datensatzwechsel ausgelöste Ereignisprozedur:
Private Sub Form_Current() objWebbrowser.Navigate2 "http://www.access-im-unternehmen.de/" & Me!BeitragID End Sub
Das Unterformular sfmAttribute
Das Unterformular zur Auswahl der Attribute und der Gewichtung derselben verwendet die Verknüpfungstabelle tblBeitraegeAttribute als Datenherkunft. Die beiden Eigenschaften Verknüpfen von und Verknüpfen nach des Unterformularsteuerelements, in dem das Unterformular angezeigt wird, enthalten jeweils den Wert BeitragID, wodurch das Unterformular nur die Datensätze anzeigt, deren BeitragID mit derjenigen des im Hauptformular angezeigten Beitrags übereinstimmt.
Das Unterformular zeigt nur die beiden Felder AttributID und Prioritaet der Datenherkunft an. Da das Feld AttributID im Tabellenentwurf als Nachschlagefeld für die Datensätze der Tabelle tblAttribute ausgelegt ist, wird es auch beim Hinzufügen zu einem Formular als Kombinationsfeld angezeigt.
Das Feld BeitragID, das die Verknüpfung zum Datensatz im Hauptformular herstellt, braucht nicht angezeigt zu werden; es reicht, wenn es sich in der Datenherkunft befindet. Das Unterformular soll in der Standardansicht als Datenblatt erscheinen.
Um dem Benutzer die Eingabe neuer Attribute zu erleichtern, löst das Kombinationsfeld cboAttributID eine Ereignisprozedur aus, wenn der Benutezr einen noch nicht vorhandenen Eintrag in das Kombinationsfeld schreibt. Die dadurch ausgelöste Prozedur sieht wie in Listing 1 aus.
Listing 1: Diese Prozedur fügt neue Attribute zur Tabelle tblAttribute hinzu.
Private Sub cboAttributID_NotInList(NewData As String, Response As Integer) Dim db As DAO.Database Dim lngAttributID As Long Set db = CurrentDb db.Execute "INSERT INTO tblAttribute(Attribut) VALUES(''" & NewData & "'')", dbFailOnError lngAttributID = db.OpenRecordset("SELECT @@IDENTITY").Fields(0) Me!cboAttributID = Me!cboAttributID.ItemData(0) Me!cboAttributID.Requery Me!cboAttributID = lngAttributID Response = acDataErrContinue End Sub
Sie legt zunächst mithilfe einer INSERT INTO-Aktionsabfrage einen neuen Datensatz mit dem angegebenen Attribut in der Tabelle tblAttribute an. Dann ermittelt Sie den Wert des Primärschlüsselfeldes AttributID.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo