#126
| |||
| |||
Jetzt übertreibst du aber. Bitte denke daran, das wir keine Größe wie Google haben. Wenn die sowas machen ist das ja noch ok, aber wir 3 (?) solle ein eigenes Datenbanksystem entwickeln? Bitte denk dran, es muss nicht sofort perfekt sein! Wenn es funktioniert und sinnvolle Ergebnisse liefert, ist das schon ganz gut. Vlt. ist die einfachste Lösung doch die Sinnvollste: Datensätze mit Link und Stichwörtern, keine Vernetzung, usw. |
#127
| ||||
| ||||
Ja, stimmt. Vielleicht ist das fürs Erste doch ein wenig übertrieben. Aber die Vernetzung würde ich trotzdem beibehalten. Das scheint mir nämlich das einzige System zu sein, das einigermaßen gute Ergebnisse liefert. |
#128
| |||
| |||
warum sollte ein System wie ich es unten beschrieben habe keine guten Ergebnisse liefern? |
#129
| ||||
| ||||
Wie willst du denn die ähnlichen Themen genau herausfinden? Bisher hast du nur beschrieben, wie du die Stichwörter sammeln würdest. |
#130
| |||
| |||
Ich schreibe ein Thema neu oder lese es nur, Frage der Implementierung. Dabei wird lokal (auf dem Forum) ein Script eingebunden, das die Stichworte aus diesem Thema extrahiert und diese zusammen mit dem Link zu diesem Thema ans BUN sendet. Dieses speichert den Datensatz ab, falls er noch nicht existiert. Anschließend sucht das BUN anhand der Stichworte (vom neuen Thema) alle Datensätze hinaus, in denen auch eins dieser Stichworte (vom neuen Thema) als Stichwort (vom Datensatz) angegeben ist und sortiert diese danach, wie viele Stichworte (vom neuen Thema) in den einzelnen Datensätzen vorhanden sind. |
#131
| ||||
| ||||
Hab gerade etwas entdeckt: Objektdatenbank ? Wikipedia |
#132
| |||
| |||
Was sagts du denn zu meinem vorherigen Post? |
#133
| ||||
| ||||
Oh entschuldige, hatte ganz vergessen zu antworten. Dein Ansatz ist natürlich recht einfach und dennoch sicherlich nicht einmal schlecht, aber ich vermisse da ein wenig die Lernfähigkeit des Systems. Beispielsweise müssen wir ja davon ausgehen, dass Typfehler gemacht werden. Ein neuronales Netz könnte da eher Ausbesserungen vornehmen. Außerdem gestaltet sich das Laden der ähnlichen Themen aus der Datenbank bei deinem System vermutlich schwieriger. Gehen wir mal davon aus, dass wir einen Crawler haben, der die Stichwörter eines Themas erfasst, und der von den Foren benachrichtigt wird, sobald ein neues Thema erstellt wurde, und einen Loader, der zu einem bereits in der Datenbank vorhandenen Thema die ähnlichen Themen liefert und an die Foren sendet. Bei deinem Ansatz müssten aufwändig die Stichwörter miteinander abgeglichen werden, bei Einsatz eines neuronalen Netzes (in Verbindung mit einer MySQL-Datenbank) könnte das in etwa so aussehen: Code: SELECT n2.* FROM nodes AS n1, nodes AS n2, links AS l WHERE n1.url='url_des_aufgerufenen_themas' AND l.node1 = n1.id AND l.node2 = n2.id AND n2.type = 'TOPIC' ORDER BY l.strength DESC LIMIT 5 |
#134
| |||
| |||
Keine Sorge meins ist noch eingerosteter. Kapiere rein garnichts. |
#135
| ||||
| ||||
Kein Problem. Code: SELECT n2.* FROM nodes AS n1, nodes AS n2, links AS l WHERE n1.url='url_des_aufgerufenen_themas' AND l.node1 = n1.id AND l.node2 = n2.id AND n2.type = 'TOPIC' ORDER BY l.strength DESC LIMIT 5 "Suche mir zu einem Thema mit der URL X Themen, die [über die Tabelle links] mit diesem Thema verbunden sind und sortiere sie absteigend nach der Stärke dieser Verbindung. Suche mir jedoch nicht alle heraus, sondern nur die obersten 5." |
#136
| |||
| |||
Hallo, Ich schalt mich mal in die Diskussion ein, weil ich mich in dem Thema sehr gut auskenne (beweg mich mit meiner Dissertation in dieser Gegend). Die Berechnung der Ähnlichkeiten zwischen zwei Foren-Threads ist theoretisch einfach. Im einfachsten Fall verwendet man das Vektor-Raum-Modell von Salton, das jedes Wort als eigene Dimension in einem sehr hochdimensionalen Vektor realisiert. Die Ähnlichkeit wird dann in der Regel mit einem einfachen cosinus zwischen diesen beiden Vektoren berechnet. Im Prinzip sucht ihr dann nichts anderes wie alle Dokumente, die eine Mindestähnlichkeit haben. Soweit so "einfach". Ein neuronales Netz dürfte euch dabei gar nichts bringen, weil ihr ja keine Muster erlernt. Das Problem ist auch nicht, dass ihr keine relevanten Seiten findet, sondern das Problem ist die extrem große Anzahl an Daten, die ihr handhaben musst, so dass das Problem nicht das "Auffinden" von verwandten Seiten ist, sondern vielmehr das Auffinden in verantwortbarer Zeit. Die Berechnung on the fly könnt ihr also vergessen, solang ihr nicht eine entsprechende Serverfarm habt. Was man aber machen könnte wäre folgendes: 1. Zentrale Datenbank an Beiträgen (das ist braucht man auf jeden Fall, weil man die Daten ja vorrätig haben muss, sonst kann man nichts finden). 2. Nach einem neuen Post eines Benutzers wird der gesamte Thread an die zentrale Datenbank geschickt, welche die internen Daten aktualisiert und verwandte Seiten zurückliefert. Dieses Ergebnis kann ein paar Sekunden dauern und muss deshalb dann gespeichert werden. Das wäre eine handhabbare Möglichkeit, die funktionieren müsste. Wurstbrot |
#137
| |||
| |||
Das klingt das schon mal verständlicher. Also Stichworte rausfinden ist ja kein problem (relativ gesehen), aber um zu vermeiden das ähnliche Wörter in das Netz kommen könnte man ja die php funktion levenshtein levenshtein() benutzen. //Edit: Da war wohl jemand schneller. |
#138
| |||
| |||
Hallo, der Levenshtein-Abstand ist leider für die Anfrage viel zu langsam. Er wird in der Regel in der Vorverarbeitung für automatisierte Rechtschreibkorrekturen verwendet. State of the Art ist eben die Cosinus-Suche. Die Frage ist nur, ob auf binär-Daten (wort kommt vor oder nicht) wie große Suchmaschinen oder auf float-Werte (beachtet die Relevanz besser). Und nochmal: ein neuronales Netz wird euch nicht viel helfen. Ein neuronales Netz ist ein Muster-Erkennungs-System. Das heißt, ihr könnt (theoretisch) jede beliebige Funktion mit einem neuronalen Netz approximieren. Das NN kann das dann nahezu perfekt nachbilden. Wenn ihr aber Foren vernetzen wollt, dann muss das System keine Funktion approximieren (es soll ja auch nicht die "Nähe" von gesamten Foren berechnen), sondern es soll relevante Beiträge aus anderen Foren anbieten, so dass der Besucher möglichst viel "relevanten" Inhalt angeboten bekommt und dadurch - hoffentlich - wieder kommt. Soweit hab ich das bisher in diesem Thread zumindest verstanden. Ich wäre bereit, in den nächsten Wochen mal so ein System zusammen zu häcken. Wer hätte denn Interesse, aus seinem Forum die Daten dann zu übermitteln? Ich stelle mir gerade eine XML-RPC-Schnittstelle vor, die nach dem Übermitteln der Daten die relevanten Seiten im XML-Format zurückliefert. Wurstbrot |
#139
| |||
| |||
man, prügelt das untereinander aus welche methode die bessere ist! Zum Levenshtein Abstand: Ich meinte den könnte man für das NN verwenden und zu verhindern, das dort sehr ähnliche Wörter vorkommen, wie "Programmiersprache" und "Programmiersprachen" |
#140
| ||||
| ||||
Hiho, ich lese mich später gerne ausführlich durch die Theorien, aber ich würde das erstmal supersimpel machen, alle Threadtitel in einer Datenbank gesammelt/gespidert und anhand von einer Blacklist von der, die, das, hilfe etc. (hat vB auch) kann man schon den MySQL Match Befehl für ähnliche Themen verwenden (und ja das ist gigantisch performant und trifft ziemlich gut!) Code: MATCH(threadtopic) AGAINST ('$title') AS score Nicht viel anders macht es das vbulletin selbst bei der Boardunity Performancesorgen habe ich aus Erfahrung nicht |
#141
| |||
| |||
Da ist nur die Frage wie gut die Ergebnisse sind. Ich persönlich stimme dir da zu, das einfach besser ist. mE wird das wohl auf einen Versuch hinauslaufen. |
#142
| ||||
| ||||
Zitat:
Zitat:
Ich hatte eher an ein neuronales Netz zur Wissenrepräsentation gedacht. Ein semantisches Netz, welches ja eigentlich für die Wissenrepräsentation gedacht ist, betrachtet ja die unterschiedlichen Arten von Beziehungen zwischen Begriffen, was ich (u.a. der Einfachheit halber) durch eine reelle Zahl, wie in neuronalen Netzen, ersetzen wollte. Ebenso sollten auch Verbindungen zwischen den Begriffen wie in neuronalen Netzen aufgebaut werden, sodass ein Lernen des Systems möglich ist. Ziel war auch nicht, dass ich das Netz nach ähnlichen Themen frage und es sie mir eigenhändig ausspuckt, sondern ich sie mir selber aus dem Netz heraussuche (eben anhand der Stärke der Verbindungen zwischen den Begriffen). Mag sein, dass ich da einige Konzepte durcheinandergebracht habe. Nichtsdestotrotz sieht das für mich immer noch nach einem brauchbaren Lösungsansatz aus. Zitat:
@Luki: Ich bezweifle stark, dass die Ergebnisse dann gut sein werden. Jeder Autor betitelt Themen anders, manche so, dass man schon genau weiß, worum es im Thema geht, und manche eben nicht. @Jendrik: Auf den ersten Blick scheint die levenshtein()-Funktion natürlich brauchbar zu sein, um Ähnlichkeiten zwischen Stichwörten festzustellen. Aber willst du wirklich jedes Stichwort mit jedem vergleichen? Ich will deine Idee nicht schlecht reden, ich sage nur, dass die Lösung für dieses Problem der Tippfehler noch nicht komplett ist. Im Übrigen können wir das vielleicht zunächst auch erst einmal außer Acht lassen, denn so häufig treten Tippfehler ja nun auch nicht auf, als dass sie unser System kaputt machen würden. |
#143
| ||||
| ||||
Müssen dann eigentlich alle Foren diese Systemvoraussetzungen erfüllen? Oder wird es einen Server geben, der die Daten sammelt, den ansonsten wird dass schon wieder schwerer, da viele Foren diese Servervoraussetzungen nicht verwirklcihen können / wollen Nur mal so aus reinem interesse, mitarbeiten kann ich eh nicht weil ich da einfach den Skill dazu habe aber die Idee an sich ist nice |
#144
| ||||
| ||||
Nein, das wird voneinander getrennt. Die Foren müssten nichts anderes tun als das BUN über ein neues Thema zu benachrichtigen und sich die ähnlichen Themen zu holen und auf deren Server zu cachen. |
#145
| |||
| |||
Ich würde gerne nochmal die Sache mit den Stichwörtern in Erinnerung bringen. Das stellt mE den sinnvollsten Kompromiss zwischen Systemlast, Speicherplatzverbrauch und Qualität der Ergebnisse dar. |
#146
| ||||
| ||||
Zitat:
|
#147
| |||
| |||
|
#148
| ||||
| ||||
Ja, schon. Nur ist das Abgleichen (und zwar Stück für Stück, Stichwort für Stichwort) extrem aufwendig und führt zu einer extrem hohen Systemlast. Deshalb wollte ich eben noch einmal darauf hinweisen, dass das (zumindest aus meiner Sicht) vielleicht noch nicht zu Ende gedacht war. Man könnte natürlich alle Stichwörter zu einem Thema speichern und dann die Themen mittels MATCH AGAINST wie von Luki oben beschrieben miteinander vergleichen. Aber überlegt bitte, wie speicher- und rechenintensiv das dann wird. |
#149
| |||
| |||
Also ich habe die Suchstichwörter 'Stichwort1', 'Stichwort2', 'Stichwort3'. Dann für jedes Stichwort: Und zum Schluss: PHP-Code: Davon kann ich mir dann zum bsp. die ersten drei Einträge nehmen. |
#150
| ||||
| ||||
D.h. zum Einen speicherst du alle Stichwörter jedes Themas und gehst die zum Anderen dann auch noch Stück für Stück durch und führst dabei jeweils eine Query aus. Funktioniert zwar mit Sicherheit, aber es dürfte das System allerdings nicht zu knapp belasten. Aber da der Aufbau des Systems mit meinem übereinstimmen würde und der Unterschied nur darin bestünde, wie Daten gespeichert und geladen werden, könnten wir ja dann auch beides ausprobieren und Benchmarks erstellen (denn mein System dürfte beim Crawlen ordentlich Last verursachen). |
Stichworte |
-1 or 2+538-538-1=0+0+0+1, -1 or 3*2<(0+5+538-538), -1 or 3+538-538-1=0+0+0+1, 1*17, foren, jxlzhcfx, network, seo |
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Mitmachen: Die schönsten Foren | MrNase | Web Design und Grafik | 70 | 09.09.2007 11:33 |