Dev Talk:Index

Aus YaCyWiki
Wechseln zu: Navigation, Suche

Umgestaltung des Indexes zur Verbesserung der Suchfunktion

Ansatz

  1. Die Web-Seiten bzw. Dokumente (im folgenden Dokumente) sollen vollständig auf einem Peer erhalten bleiben.
  2. Jedes Dokument wird in der Art aufbereitet, dass die darin vorhandenen Wörter wie üblich auf ihre Grundform zurückgeführt werden. Anschließend wird die Häufigkeit der Wörter gezählt.
  3. Die Peers teilen sich gegenseitig ihre Wortliste im Rahmen des "Ping" mit.
  4. Der Suchindex der Peers wird aus diesen Wortlisten gebildet.
  5. Jeder Peer erhält so eine Datenbank über die Wortlisten der anderen Peers.
  6. Es erfolgt im Rahmen des Datenaustausches einen Umverteilung der Dokumente dahingehend, dass jeder Peer versucht, die bei ihm vorhandene Wortliste zu verkleinern.

Vorteile

  1. Bei einer Suchphrase mit mehreren Wörter können direkt Peers angesprochen werden.
  2. Es ist eine vollständige Einbindung von Peers möglich, die keine Dokumente austauschen (Themen-Peers). Die Peers sind nicht mehr an bestimmte Schlüsselworte gebunden.
  3. Werden die indizierten Dokumente nach dem Auswerten sogar archiviert (z.B. als Plain-Text), kann sogar eine genaue Suche nach Suchphrasen erfolgen.
  4. Die Umverteilung führt dazu, dass Peers sich so über die Wörter spezialisieren. Dies wird z.B. Themenspezifisch oder auch sprachliche Trennungen erfolgen. Durch die eigenen, dem Index z.B. durch den Proxy zugeführten Seiten wird eine Grundpräferenz hinsichtlich der Wortauswahl getroffen. Es sollten sich also im lokalen Index Dokumente finden, die den eigenen Interessen und der eigenen Sprache entsprechen. Durch die sprachliche Trennung wird eine geographische Strukturierung des Indexes erfolgen. Diese sollte die Suchzeiten weiter verkürzen, da die Datenpakete kürzere Wege laufen müssen.
  5. Es können Teilnetze in der Art gebildet werden, daß der Schnittstellen-Peer jeweils eine vollständige Wortliste der Teilnetze verwaltet und repräsentiert.

Nachteile

  1. Die Verteilung der Wortlisten der einzelnen Peers ist aufwendig.
    Jeder Peer sollte dabei für die Verteilung seiner eigenen Wortliste die Verantwortung tragen. Dies kann dadurch erreicht werden, dass er für die Verteilung eine eigene Datenbank führt. Dies sollte dazu führen, dass er immer den Stand der eigenen Wortliste auf den anderen Peers kennt. So kann die Datenmenge in der Art reduziert werden, dass nur noch Ergänzungen bzw. Änderungen übermittelt werden.
  2. Es ist durch die Organisation aufwendig, einen neuen Peer an der Suche teilhaben zu lassen.
    Ein neuer Peer hat keine Kenntnis über die Wortlisten im Netz. Hier kann eine Abhilfe dahingehend geschaffen werden, dass eine Art Zusammenfassung mit dem Superseed übermittelt wird. So besteht zwar keine vollständige Kenntnis des Netzes, aber die Suchfunktionen sollten grundlegend funktionieren.
    Es muss damit gerechnet werden, dass Peers nur kurze Zeiten und das auch nur unregelmäßig online sind. Somit fällt für größere Netze die Option aus, dass jeder Peer Informationen über alle anderen Peers besitzt, da diese Informationen sich zu schnell ändern.
    Lösungsvorschlag: Ich denke dieses Problem könnte man lösen, indem man ein art Routing-Protokoll entwickelt. Sucht jemand z.B. nach "Fouriertransformation", so könnte zunächst diese Wort das Attribut "deutsch" zugewiesen bekommen. Die Anfrage wird dann also an einen Peer mit deutschsprachigen Wörtern gestellt. Dieser Peer kann das wort weiter analysieren und kriegt raus, dass es was mit Mathe zu tun hat und leitet es an den entsprechend spezialisierten Peer weiter usw. Weiß der suchende Peer schon, dass das Wort mit "deutsch" und mit "Mathe" was zu tun hat und weiß er auch schon den dafür zuständigen Peer, so kann er die Anfrage an diesen natürlich auch direkt stellen. --Wobble 23:03, 1. Apr 2009 (CEST)

Klärungsbedürftige Fakten

Um den Aufwand für die Verteilung der Wortlisten abschätzen zu können, müsste zunächst ermittelt werden, wieviele unterschiedliche Grundformen von Wörtern im Netz existieren (Problem: es ist mir nicht bekannt, ob das derzeit implementierte Stemming mit Sprachen wie z.B. Russisch funktioniert). Der Duden kennt z.B. 125.000 Wörter. --PCA42 21:10, 1. Apr 2009 (CEST)

  1. betrachtet man die Wörter lediglich als Zeichenketten, so bedenke man, dass "vertippfehlerte" Wörter plötzlich andere Wörter sind. Ich denke, dass es stattdessen sinnvoll wäre hierarchische Wortgruppen zu bauen.
    möchte man die Wörter rein nach ihrer Bedeutung gruppieren, so könnte es passieren, dass die Klassifizierung der Wörter schon eine Kenntnis aller Wörter benötigt.
    Diese Notwendigkeit für die Kenntnis der Bedeutungen der Wörter ist weniger schlimm, als die Kenntnis der Peers die für diese Wörter zuständig sind, da die Bedeutungen sich nicht so schnell (also eigentlich garnicht) ändern. --Wobble 23:03, 1. Apr 2009 (CEST)
    falls dies dennoch zu viel Daten sind, als dass ein Peer diese alle speichern könnte, so muss ebenfalls eine Suche gestartet werden, um die Gruppierung (Bedeutung) der Wörter herauszufinden.
    Diese Suche könnte über einen Hash (wie aktuell die URL-Suche) oder über einen Trie implementiert sein.
    Der Trie hätte den Vorteil, dass eventuell kein weiterer Peer befragt werden muss, wenn z.B. schon aus den ersten 5 Buchstaben (305 = c.a. 25 Millionen mögliche Wörter, also gerade noch so pro Peer speicherbar) eine Klassifizierung möglich ist. --Wobble 23:03, 1. Apr 2009 (CEST)
    Eine Gruppierungen nach Bedeutungen hat insofern auch ihren Charme, als dass sie quasi automatisch Suchen mit mehreren Suchbegriffen unterstützt (welche quasi nur thematische Einschränkungen sind), bzw. anders formuliert eine Suchanfrage nach z.B. Fouriertransformation wird in eine Suchanfrage der Form "deutsch, mathe, funktion, fourier" aufgelöst. --Wobble 23:03, 1. Apr 2009 (CEST)
    Problem bei der Implementierung: Wie kriegt man die Bedeutungen raus, bzw. wie gruppiert man am besten diese Wörter.
    Mathematisch gesehen, könnte man einfach Wörter gruppieren die stark korrelieren. Also wenn es sehr wahrscheinlich ist, dass wenn Wort A häufig auftaucht, dann auch Wort B häufig auftaucht, dann sind diese Wörter korreliert und gehören in eine Gruppe. Nun stellt sich die Frage, ob sowas auch effizient implementiert werden kann.
    Achtung: Benutzt man diesen Gruppierungstyp, so ändert sich die Bedeutung jedes Wortes jedesmal ein bischen, wenn ein neues Dokument indiziert wird (da dieses neue Dokument in die Berechnung der Korrelation mit einfließt) --Wobble 23:03, 1. Apr 2009 (CEST)