ASDL:Observer-Agent
From Wiki
Endbericht des ASDL-Projekts
Inhaltsverzeichnis | Hauptseite des ASDL-Projekts
Contents |
Aufgaben
Der Observer-Agent hat die Aufgabe die Suchanfrage des Benutzers und das dazugehörige Suchergebnis zu beobachten und in eine Kontextdaten-Nachricht umzuwandeln. Dazu ist es auch nötig, dass Terme aus dem Suchergebnis extrahiert werden. Diese Kontextdaten-Nachricht wird dann an den Reasoning-Agenten geschickt. Der Observer-Agent selber hat keine Inferenz-Funktionalität. Diese wird nur vom Reasoning-Agenten umgesetzt.
Zur Erinnerung: Die Kontextdaten-Nachricht beinhaltet folgende Informationen
- #Hits (aus Suchergebnis)
- #Operatoren (aus Suchanfrage)
- Anfrageterme (aus Suchanfrage)
- Autor
- Titel
- Freitext
- Jahr
- Antwortzeit (aus Suchergebnis)
- Liste der DLs (aus Suchergebnis)
- Extrahierte Terme (aus Suchergebnis)
- Schlagwörter
- Autoren
- Konferenzen
- Journale
Implementierung
Der Observer-Agent macht von den sensorischen Funktionen Daffodils gebrauch. Die Suchanfrage und das Suchergenis werden dem Observer-Agenten als SENTELL-Nachrichten zugeschickt. Jede eingehende Nachricht erzeugt eine neuen Observer-Request, in dem sich die Programmlogik des Observer-Agenten befindet und als Thread läuft. In der work-Methode des Observer-Requests wird die Art der Nachricht ermittelt.
Suchanfrage
Eine so erhaltene Suchanfrage sieht beispielhaft folgendermaßen aus:
<?xml version="1.0" encoding="UTF-8"?> <metadataquery maxduration="60" nocache="false" sessionid="104.22c35fe0:10c6c581f89:-7efd@UA"> <basecondition><connector type="required"/> <attribute id="1003"/><operator id="103"/> <value>Sascha+Kriewel</value> </basecondition> <querytext>Author%3D%22Sascha+Kriewel%22</querytext> <dllist> <dl path="/wrapper/dl/Google">Google</dl> <dl path="/wrapper/dl/Springer">Springer2</dl> ...
In der work-Methode wird bei eigehender Suchanfrage ein Zeitstempel im Observer-Agenten gespeichert, der zur Berechnung der Antwortzeit notwendig ist. Aus dem Suchergebnis werden dann in der Methode generateMessageDataFromQuery(Document d) die Terme der Suchanfrage und die Anzahl der verwendeten Operatoren ermittelt. Dazu werden XPath-Ausdrücke verwendet. Für die Autorenterme der Anfrage ist z.B. folgender XPath-Ausdruck notwendig:
//basecondition/attribute[@id=1003]/following-sibling::value
Um XPath-Ausdrücke auswerten zu können, haben wir in die Tools-Klasse die evaluateXPathExpression(String expr, Document d, QName returnType)-Methode hinzugefügt.
Aus den so berechneten Termen der Suchanfrage und der Operatorenanzahl wird eine unfertige Kontextdaten-Nachricht im Observer-Agenten zwischengespeichert.
Suchergebnis
Auch das Suchergebnis wird dem Observer-Agenten per SENTELL-Nachricht zugestellt. Das Suchergebnis zur o.g. Suchanfrage sieht folgendermaßen aus:
<?xml version="1.0" encoding="UTF-8"?> <resultlist isRanked="true" requestid="31.-5ad22a3c:10c86ad8ba1:-7fed@ea127.0.0.1:5678" sessionid="104.22c35fe0:10c6c581f89:-7efd@UA"/> <metadata docid="queryformulationandresultvisualizationforxmlretrieval" isSurrogate="false" plibPath="/webdavroot/kriewel/5567/3782" detailSeen="T" prob="0.0"> <title>Query Formulation and Result Visualization for XML Retrieval</title> <abstract>XML document retrieval requires new ideas for... </abstract> <year>2002</year> <url>BibDB</url> <authors><author id="kriewel#s"><firstname>S.</firstname><lastname>Kriewel</lastname></author> <author id="grojohann#k"><firstname>K.</firstname><lastname>Gro�johann</lastname></author> <author id="fuhr#n"><firstname>N.</firstname><lastname>Fuhr</lastname></author> <author id="effing#d"><firstname>D.</firstname><lastname>Effing</lastname></author> </authors> </metadata> ... </resultlist>
Geht nun das Suchergebnis im Agenten ein, wird wieder ein neuer Observer-Request gestartet. Aus dem Suchergebnis werden dann in der Methode generateMessageDataFromResultAndSendMessage(Document d) weitere Daten (Anzahl der Suchergebnisse, Liste der DLs, Antwortzeit) für die Kontextdaten-Nachricht wieder mit XPath-Ausdrücken berechnet. Ursprünglich wurden an den Document-Agent Nachrichten geschickt um Schlagwörter, Autoren, Journale und Konferenzen aus dem Suchergebnis zu extrahieren. Jedoch wurde häufig nicht auf alle gestellten Extraktionsanfragen geantwortet. Deshalb wurde ein eigener Term-Extraktor implementiert, der auch in der generateMessageDataFromResultAndSendMessage(Document d)-Methode aufgerufen wird.
Aus dem Observer-Agenten wird dann die zwischengespeicherte unfertige Kontextdaten-Nachricht geholt, vervollständigt und an den Reasoning-Agenten gesendet. Nachfolgend findet sich die Kontextdatennachricht zu der obigen Suchanfrage und Suchantwort:
<?xml version="1.0" encoding="UTF-8"?> <contextdata useragentid="$*2e-10c86ad88f8@DaffodilMTA" sessionid="104.22c35fe0:10c6c581f89:-7efd@UA"> <operators count="0" /> <queryterms><author>Sascha Kriewel</author></queryterms> <hits count="13" /> <answeringtime>8399</answeringtime> <dllist> <dl count="11">BibDB</dl> <dl count="6">DBLP2</dl> </dllist> <extractedterms> <terms><exterm count="10">digital</exterm> <exterm count="4">results</exterm> ... </extractedterms> </contextdata>
Fazit
Die größte Herausforderung bei der Implementierung des Observer-Agenten war das Auswerten der XML-Nachrichten. Dazu verwendeten wir XPath-Ausdrücke. Das Extrahieren von Termen funktioniert mit unserem eigenen Term-Extraktor sehr zuverlässig, kann aber sowohl mit unserem Term-Extraktor, als auch mit dem Document-Agent bei sehr umfangreichen Suchergebnissen einige Sekunden dauern.
