Zur Boardunity Forenstartseite

Zurück   Boardunity & Video Forum » Technik » Programmierung und Datenbanken

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1  
Alt 26.01.2004, 12:11
Benutzerbild von Gérome
*wurgelpurgel*
 
Registriert seit: 08.2003
Ort: Server-Raum im Keller
Beiträge: 243

"Related Topics" - nach welchem Konzept?


Hallo zusammen,

ich habe bald wieder ein wenig Zeit, mich um unser Forum zu kümmern und es würde mich reizen, eine Funktion zu integrieren, die verwandte Themen anzeigt. Für VB-User offenbar eine Selbstverständlichkeit, für phpBBler noch nicht so ganz - es sei denn, ich hätte etwas derartiges übersehen.

Ich möchte an dieser Stelle gar nicht mal nach fertigem Code fragen, sondern nach den verschiedenen Methoden, wie man den Grad der Gleichheit verschiedener Threads idealerweise messen könnte und nach welchen Kriterien man vergleichen sollte.
PHP-Funktionen wie "similar_text" oder mySQL-Abfragen gemäß "SELECT ... MATCH ... AGAINST" sind mir bekannt, jedoch bin ich mir über die Art der sinnvollen Anwendung nicht ganz sicher.
Im ersten Schritt geht es mir lediglich darum, einen Algorithmus zu finden, um am Ende eine sinnvolle Ergebnismenge zu erhalten - um die Performance würde ich mich später kümmern.

Hat jemand von Euch schon mal sowas entwickelt oder kennt ein paar gute Links, die mir bei meinem Anliegen weiterhelfen könnten?



Grüße aus einem sich in der Schnee-Schmelze befindlichen HH,
Gérome

Geändert von Gérome (26.01.2004 um 15:10 Uhr).
  #2  
Alt 26.01.2004, 13:17
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.639
Sehr gut, dass du dieses Thema ansprichst.
Wenn du nichts dagegen hast würde ich mich gerne deinem Wissensdurst anschließen und die Fragen wiederholen, in der Hoffnung geholfen zu werden

  #3  
Alt 26.01.2004, 13:28
Benutzerbild von Philipp Gérard
Zeitdenken
 
Registriert seit: 09.2003
Ort: Wien
Beiträge: 832
Hallo Gérome,

bevor du dich mit der technischen Implementierung auseinandersetzt würde ich überlegen, ob du bei einem solchen System einen Mehrwert für den Benutzer schaffst. Der ein oder andere Link den die Datenbank dabei produziert mag helfen, die meisten werden nichts nützen (so meine Erfahrung mit allem "related"-Zeugs). Wenn du Pech hast bringt es dir nur einige Datenbankabfragen und Vorlagen mehr, sonst nichts. Aber technisch sollte es leicht sein, wenn auch arschlahm. Titelvergleich wäre eine Möglichkeit, wer sich an die Themeninhalte wagen will, wird sich schnell den Server abschießen. Keywords könnte man sich irgendwie zusammenbasteln lassen - das veringert die Serverlast, setzt aber einen echt intelligenten Algorythmus voraus. Wüsste nicht, wie der aussehen soll...

__________________
Philipp Gérard
Gewöhnliche Menschen denken nur daran, wie sie ihre Zeit verbringen. Ein intelligenter Mensch versucht sie zu nützen. - Arthur Schopenhauer
  #4  
Alt 26.01.2004, 15:40
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Hmm... ich weiß... es wurde nicht nach einer fertigen Lösung gefragt, aber meine Variante sieht in etwa so aus:

PHP-Code:
<?php
$whereClause 
'';
$tArr explode(' '$topic['topic_title']);
$tArrLen count($tArr);
for(
$i 0$i $tArrLen$i++) {
    
$whereClause .= 't.title LIKE \''.$tArr[$i].'\' OR ';
}
$whereClause substr($whereClause0strlen($whereClause)-4);

$query $db->query('SELECT t.topicid, t.title, t.areaid, t.replys,
                     a.title AS areatitle, u.username, u.userid 
                     FROM dbb'
.$n.'_topics t
                     LEFT JOIN dbb'
.$n.'_areas a ON (t.areaid=a.areaid)
                     LEFT JOIN dbb'
.$n.'_user u ON (t.lastposterid=u.userid)
                     WHERE '
.$whereClause.'
                      AND topicid <> '
.$topicid.'
                     ORDER BY topicid DESC
                     LIMIT 5'
);
while(
$relTopic $db->fetch_assoc($query)) {
    eval(
"\$relTopicsbit .= \"".$tpl->get('topic_similar')."\";");
}  
?>
Bei einer entsprechend kleinen Datenbank habe ich es schon getestet.
Allerdings ist die wirklich klein... und ich fürchte, dass dieses System bei mehr als 200 Postings unbrauchbar ist... "

Ergo würde mich das auch sehr interessieren.
Weil mir hat es (vorallem hier im Board) schon sehr geholfen. Habe dadurch schon sehr viele interessante Themen finden können, die ich anders wohl kaum gefunden hätte.

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #5  
Alt 26.01.2004, 15:51
Benutzerbild von Björn
Boardunity Team
 
Registriert seit: 10.2003
Ort: Rhode
Beiträge: 1.205
ich denke nicht dass es bei mehr als 200 postings unbrauchbar wird
es werden ja immern nur 5 zeilen geholt..
problem ist nur, dass er themen sucht, bei welchen der titel ähnlich ist.. man müsste die so raussuchen, wo zb die meisten ergebnisse enthalten sind
mfg

__________________
Björn C. Klein
Welt-Held!
PunkRockNews.de
  #6  
Alt 26.01.2004, 16:03
Mobile2Day
 
Registriert seit: 12.2001
Ort: München
Beiträge: 65
Interessant ist die Geschichte wirklich. Leider hab ich mich selbst noch nicht an sowas gemacht, da ich weniger an Foren rumprogrammiere.
Mir ist aber so als hätte ich diese Funktion auch schon als MOD irgendwo für das phpBB gesehen, habs jetz aber auf die Schnelle beim Suchen nicht gefunden.

__________________
Karl Förster
Webentwickler
mobile2day.de


mobile2day.de - Home of PDAs and Smartphones
  #7  
Alt 26.01.2004, 16:17
Benutzerbild von Gérome
*wurgelpurgel*
 
Registriert seit: 08.2003
Ort: Server-Raum im Keller
Beiträge: 243
Auf phpBB.com gibt es eine Diskussion zu diesem Thema: >Klick<, deren Ergebnis mich jedoch noch nicht überzeugt. Die Ergebnismenge hatte in meinem Testfällen nichts das Geringste mit den Ausgangs-Thread zutun. Für dieses Ergebnis sind 112 Sekunden Laufzeit auf dem heimischen PC einfach zuviel. ;-)

  #8  
Alt 26.01.2004, 17:58
Benutzerbild von exe
exe exe ist offline
titellos
 
Registriert seit: 07.2003
Ort: München
Beiträge: 888
Ich habe so eine Funktion schonmal anfänglich in mein Forum implementiert. Dabei habe ich es so gelöst das aus Thementitel und Beschreibung ein Suchstring erzeugt wird und dieser via MySQL Abfrage (SELECT ... WHERE MATCH(...) AGAINST(...)) die Themen aus der Datenbank holt in denen es Übereinstimmungen in Titel/Beschreibung gibt.
Wenn man in seiner Datenbank einen Volltext-Index über die Spalten Thementitel und Beschreibung legt geht das auch noch bei grossen Datenmengen ziemlich fix. Ich hab das an einer Datenbank mit mehreren Tausend Themen getestet und die Abfragen lagen i.d.R. zwischen 0.05 und 0.1 Sekunden (MySQL 4 auf AMD K6 II 450 Mhz).
Diese Methode krankt allerdings daran das übereinstimmende Wörter nicht in allen Fällen auch auf ein ähnliches Thema hinweisen (wobei das Relevance Ranking bei MySQL Volltext Indexen die Fehlerquote da reduziert) und an der Tatsache das nicht unbedingt jeder Autor eines Themas auch sehr treffende Wörter im Thementitel verwendet.
Eine Variante die ich mir überlegt habe, und die vermutlich etwas genauer wäre, würde folgendermassen funktionieren:
Wenn in einem Thema ein neuer Beitrag erstellt wird werden die semantisch relevantesten Wörter (den semantischen Wert könnte man beispielsweise so feststellen das man die Häufigkeit eines Wortes anhand einer Wortliste bestimmt) in eine Wortliste hinzugefügt werden die im Thema gespeichert wird. Dazu müsste man nur in der Thementabelle eine Spalte hinzufügen. Um die relevanten Wörter festzustellen, in der Thementabelle zu verewigen und die Wortliste zu pflegen würde es 3, maximal 4, weitere Datenabfragen beim Speichern eines Beitrags brauchen.
Wird ein Thema dann aufgerufen wird mit den Wörtern, die für dieses Thema gespeichert wurden, eine Volltext Suche über die Wortlisten aller anderen Themen gemacht. Das ganze wäre von der Suchfunktion her genauso schnell wie die erste von mir genannte Variante, würde aber ein paar Abfragen beim Speichern eines Beitrages benötigen.
Dafür ist diese Methode vermutlich etwas genauer in der Auswahl ähnlicher Themen da nicht nur nach Thementitel sondern auch nach Beitragsinhalten selektiert wird.
Ob sich allerdings soviel Aufwand für eine "Ähnliche Themen" Funktion lohnt ist dann die Frage. Dazu müsste man erstmal klären inwiefern so eine Funktion überhaupt Sinn macht bzw. einen Nutzen bringt.

Edit: ein Artikel wie man eine Wortliste mit Häufigkeitswerten pflegt wäre dieser hier: http://zez.org/article/view/83/

  #9  
Alt 29.01.2004, 21:18
Benutzerbild von Gérome
*wurgelpurgel*
 
Registriert seit: 08.2003
Ort: Server-Raum im Keller
Beiträge: 243
Ich sehe, daß schon die vorbereitende Diskussion so umfangreich wird, wie ich es befürchtete.
Ich habe das Thema zwar angestoßen, werde es aber erst ab Ende kommender Woche ernsthaft weiterverfolgen können, da ich vorher noch Klausuren zu schreiben habe.

Ich mache mir gerade Gedanken, wie ich als Mensch zwei Threads als "ähnlich" einstufen würde. Dabei kommt in etwa das heraus, was 'exe' in seinem Beitrag vorgeschlagen hat...

Ich spiele zur Ablenkung mal weiter damit in Gedanken rum. ;-)

Grüße,
Gérome

Antwort


Stichworte
-


Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
Gehe zu






1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25