chatbot2 icon indicating copy to clipboard operation
chatbot2 copied to clipboard

Zuordnung von Orten der Anfrage zu `Nodes`

Open ben-tinc opened this issue 8 years ago • 3 comments

@kenoboss @milenaduerr @Bierbuero @siwer

TL;DR: Nach dem Parsen der Anfrage haben wir zwar String Repräsentationen von Start und Ziel, diese müssen aber noch den eigentlichen nodes unseres campusgraphen zugeordnet werden. Wir müssen uns darüber verständigen, wie das geschehen soll.

Persönlich denke ich, dass sich der größte Teil unseres Codes nicht mehr damit auseinander zu setzen haben sollte, in welcher Form der Campusgraph abgespeichert ist (XML), sondern auf eine interne Datenstruktur zurückgreifen sollte (separation of concerns). Wir können auch die nokogiri-Elemente quer durch unsere Methoden durchreichen, aber damit binden wir uns sehr an diese Library und daran, dass wir unsere Daten immer in einer XML-Datei abgespeichert haben werden.. Keine Ahnung ob das perspektivisch ein Problem werden könnte.

Ich stelle mir den Kontrollfluss folgendermaßen vor:

  1. Sobald lita das :loaded Event feuert, rufen wir eine Methode load_graph_from_xml, die das XML einliest und abspeichert.
  2. Sobald ein User Befehl hereinkommt, extrahiert die Abfrage-Methode Start und Ziel. Dafür existiert grundlegender Code der Anfragegruppe.
  3. Eine Methode get_nodes(start_string, target_string) schlägt in unserer Datenstruktur nach, welche Nodes gemeint sind (oder seien könnten). Für's erste könnten wir fordern, dass der Beschreibungstext und/oder der Node Name buchstäblich in der Anfrage vorkommen müssen. Perspektivisch sollten wir wahrscheinlich eine cleverere Methode benutzen.
  4. Die beiden Nodes reichen wir an eine Methode get_path weiter, die den kürzesten Pfad aus unserer Graph-Datenstruktur ermittelt. Dafür habe ich bereits funktionierenden Code.
  5. Die Liste von Knoten, die den kürzesten Pfad darstellt, geht weiter an die Ausgabe-Methode. Jedes Element in dieser Liste bietet über Attribute :description und :type Zugriff auf die Informationen, die ursprünglich im XML abgelegt waren und die die Antwortgruppe zum Füllen ihrer Schablonen braucht. Den existierenden Code könnten wir entsprechend vereinfachen, weil nokogiri nicht mehr direkt benutzt werden muss.

Zur Pfadsuche schreib ich gleich noch etwas in einem separaten Issue. Ich freu mich auf eure Einschätzungen! :)

ben-tinc avatar Jul 04 '17 01:07 ben-tinc

Zu den default events von lita (wie loaded) findet ihr hier weitere Informationen.

ben-tinc avatar Jul 04 '17 01:07 ben-tinc

Zu 1: wir müssen litas event system gar nicht benutzen. Es reicht schon, den constructor unseres Handlers zu ergänzen.

Zu 2, 3: Wir haben uns in der letzten Sitzung darauf verständigt, fürs erste nur genaue Treffer der Node-Beschreibungen in unseren Anfragen zu akzeptieren. Die Regex passt alllerdings noch nicht auf unsere Daten. (@kenoboss)

Zu 4, 5: Ist vorbereitet, siehe auch ben-tinc@4a085f3269c4ea249ca837af2b95fe7b81f36ad7

ben-tinc avatar Jul 08 '17 19:07 ben-tinc

@ben-tinc https://github.com/kenoboss/chatbot2/commit/42db69ae8d63d30b3dcc4633d59baa50d454763a

sollte jetzt funktionieren

kenoboss avatar Jul 09 '17 19:07 kenoboss