Archives FluxBB.fr

Les archives de FluxBB.fr

Vous n'êtes pas identifié(e).

#1 03-04-2009 11:46:39

colletaphoto
Membre

Cherche mod "sujets similaires"

Hello tongue,


Je cherche un mod "sujets similaires". (similar topics)
Il s'agit d'un mod qui permet en bas de page de mettre plusieurs liens qui pointent vers du sujets du forum qui traitent de sujets qui ressemble au sujet qui est traité sur la page.

J'avais ca sur mon phpbb. Ca permet d'améliorer la navigation et le nombre de liens internes pertinants..

Il existe surement un mod en anglais... mais l'anglich c'est pas ma cup of tee... Si quelqu'un arrivait au moins à m'en trouver un ... je pourrais voir si j'arrive à bidouiller la bete...

merci d'avance

Hors ligne

#2 03-04-2009 12:52:07

fanf73
Wik-wiki

Re : Cherche mod "sujets similaires"

Je n'en ai jamais croisé mais elle existe peut-être sur punres.org en effet.

Pour une mod comme celle-ci il doit falloir obligatoirement tagger chaque discussion, je ne vois pas trop comment il pourrait proposer automatiquement des sujets similaires sinon hmm.


Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.

Hors ligne

#3 03-04-2009 18:50:55

Mpok
Néo Admin

Re : Cherche mod "sujets similaires"

fanf73 a écrit :

Pour une mod comme celle-ci il doit falloir obligatoirement tagger chaque discussion, je ne vois pas trop comment il pourrait proposer automatiquement des sujets similaires sinon hmm.

Oui, il faut tagger...
Mais cela peut probablement être fait de manière automatique. Le problème n'est pas simple cependant, et nécessite surtout pas mal de réglages, selon le type de sujets (on ne traitera pas de la même façon un forum dédié à l'informatique par exemple, qu'un forum généraliste), pour être efficace.

Hors ligne

#4 03-04-2009 20:16:10

colletaphoto
Membre

Re : Cherche mod "sujets similaires"

Hello wink


En fait, je pense pas...


Voici la première requete d'un tel mod pour phpbb il me semble qu'il comparent les mots du sujet courant avec ceux de la base de données... c'est une approche interessante...

// Mod des Sujets Similaires - Similar Topics
$sql = "SELECT topic_id
FROM ". TOPICS_TABLE ." t, ". FORUMS_TABLE ." f
WHERE topic_id != $topic_id
AND f.forum_id = t.forum_id
AND f.auth_view = 0
AND MATCH (topic_title) AGAINST ('". addslashes($topic_title) ."')
ORDER BY topic_time DESC LIMIT 0,15";

mais je suis pas assez calé pour comprendre beaucoup plus...

Je vais recherche l'adresse de ce mod, si je la retrouve

a+

Hors ligne

#5 03-04-2009 20:31:37

colletaphoto
Membre

Re : Cherche mod "sujets similaires"

j'ai du mal à retrouver l'adresse du mod

j'en ai une
http://forums.phpbb-fr.com/viewtopic_11 … ilar+topic
mais je n'y ai pas accès...

Il me semble que par ailleurs on pouvait préciser la taille de mots que l'on ne voulait pas chercher (exemple: dans mon cas tous les mots de 4 lettres et plus peuvent etre considérés comme pertinents).

Je peux mettre tout le code de ce mod sur cette page... je sais pas si j'ai le droit.
Sinon, je peux le transmettre en MP.
c'est un mod libre de droit de phpbb2 (normalement)

merci
a+

Dernière modification par colletaphoto (03-04-2009 20:35:23)

Hors ligne

#6 03-04-2009 23:34:14

colletaphoto
Membre

Re : Cherche mod "sujets similaires"

Bonjour oldie-2,


Non ce n'est pas ce mod que j'ai. car je suis sous phpbb2 et non phpbb3
De plus apparemment il nécessite de créer une table de plus... si je peux éviter c'est mieux...
Voici le code de ce mod qui se trouve sur la page viewtopic de mon phpbb2

// Mod des Sujets Similaires - Similar Topics
$sql = "SELECT topic_id
FROM ". TOPICS_TABLE ." t, ". FORUMS_TABLE ." f
WHERE topic_id != $topic_id
AND f.forum_id = t.forum_id
AND f.auth_view = 0
AND MATCH (topic_title) AGAINST ('". addslashes($topic_title) ."')
ORDER BY topic_time DESC LIMIT 0,15";
if ( !($result = $db->sql_query($sql)) )
{
    message_die(GENERAL_ERROR, "Could not get main information for similar topics", '', __LINE__, __FILE__, $sql);
}
$topics = array();
while ( $row = $db->sql_fetchrow($result) )
{
  $topics[] = $row;
}
  $count_similar = count($topics);
if ( $count_similar > 0 )
{
  $template->assign_block_vars('similar', array(
         'L_SIMILAR' => $lang['Similar'],
         'L_TOPIC' => $lang['Topic'],
         'L_AUTHOR' => $lang['Author'],
         'L_FORUM' =>  $lang['Forum'],
         'L_REPLIES' => $lang['Replies'],
         'L_LAST_POST' => $lang['Posted'])
  );


for($i = 0; $i < $count_similar; $i++)
{
  $sql = "SELECT t.topic_type, t.topic_status, t.topic_id, t.topic_title, t.topic_time, t.topic_replies, t.topic_last_post_id, u.user_id, u.username, f.forum_id, f.forum_name, p.post_time, p.post_username
  FROM ". TOPICS_TABLE ." t, ". USERS_TABLE ." u, ". FORUMS_TABLE ." f, ". POSTS_TABLE ." p
  WHERE t.topic_id = '". $topics[$i]['topic_id'] ."'
  AND f.forum_id = t.forum_id
  AND p.topic_id = t.topic_id
  AND u.user_id = p.poster_id
  GROUP BY t.topic_id";
if ( !($result = $db->sql_query($sql)) )
{
      message_die(GENERAL_ERROR, "Could not get similar topics", '', __LINE__, __FILE__, $sql);
}
 
  while ( $row = $db->sql_fetchrow($result) )
  {
   $similar = $row;
   
   $tracking_topics = ( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] .'_t']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] .'_t']) : array();
   $tracking_forums = ( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] .'_f']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] .'_f']) : array();
   $topic_type =  ( $similar['topic_type'] == POST_ANNOUNCE ) ? $lang['Topic_Announcement'] .' ': '';
     $topic_type .= ( $similar['topic_type'] == POST_STICKY ) ? $lang['Topic_Sticky'] .' ': '';
     $topic_type .= ( $similar['topic_vote'] ) ? $lang['Topic_Poll'] .' ': '';
   $replies = $similar['topic_replies'];
   
   if( $similar['topic_status'] == TOPIC_LOCKED )
    {
        $folder = $images['folder_locked'];
        $folder_new = $images['folder_locked_new'];
    }
    else if( $similar['topic_type'] == POST_ANNOUNCE )
    {
        $folder = $images['folder_announce'];
        $folder_new = $images['folder_announce_new'];
    }
    else if( $similar['topic_type'] == POST_GLOBAL_ANNOUNCE )
    {
        $folder = $images['folder_global_announce'];
        $folder_new = $images['folder_global_announce_new'];
    }
    else if( $similar['topic_type'] == POST_STICKY )
    {
        $folder = $images['folder_sticky'];
        $folder_new = $images['folder_sticky_new'];
    }
    else
    {
        if( $replies >= $board_config['hot_threshold'] )
        {
            $folder = $images['folder_hot'];
            $folder_new = $images['folder_hot_new'];
        }
        else
        {
            $folder = $images['folder'];
            $folder_new = $images['folder_new'];
        }
    }
  if( $userdata['session_logged_in'] )
    {
        if( $similar['post_time'] > $userdata['user_lastvisit'] )
        {
            if( !empty($tracking_topics) || !empty($tracking_forums) || isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] .'_f_all']) )
            {
                $unread_topics = true;
                if( !empty($tracking_topics[$topic_id]) )
                {
                    if( $tracking_topics[$topic_id] >= $similar['post_time'] )
                    {
                        $unread_topics = false;
                    }
                }
                if( !empty($tracking_forums[$forum_id]) )
                {
                    if( $tracking_forums[$forum_id] >= $similar['post_time'] )
                    {
                        $unread_topics = false;
                    }
                }
                if( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] .'_f_all']) )
                {
                    if( $HTTP_COOKIE_VARS[$board_config['cookie_name'] .'_f_all'] >= $similar['post_time'] )
                    {
                        $unread_topics = false;
                    }
                }

                if( $unread_topics )
                {
                    $folder_image = $folder_new;
                    $folder_alt = $lang['New_posts'];
                    $newest_img = '<a href="'. append_sid("viewtopic.$phpEx?". POST_TOPIC_URL ."=$topic_id&view=newest") .'"><img src="'. $images['icon_newest_reply'] .'" alt="'. $lang['View_newest_post'] .'" title="'. $lang['View_newest_post'] .'" border="0" /></a> ';
                }
                else
                {
                    $folder_image = $folder;
                    $folder_alt = ( $similar['topic_status'] == TOPIC_LOCKED ) ? $lang['Topic_locked'] : $lang['No_new_posts'];
                    $newest_img = '';
                }
            }
            else
            {
                $folder_image = $folder_new;
                $folder_alt = ( $similar['topic_status'] == TOPIC_LOCKED ) ? $lang['Topic_locked'] : $lang['New_posts'];
                $newest_img = '<a href="'. append_sid("viewtopic.$phpEx?". POST_TOPIC_URL ."=$topic_id&view=newest") .'"><img src="'. $images['icon_newest_reply'] .'" alt="'. $lang['View_newest_post'] .'" title="'. $lang['View_newest_post'] .'" border="0" /></a> ';
            }
        }
        else
        {
            $folder_image = $folder;
            $folder_alt = ( $similar['topic_status'] == TOPIC_LOCKED ) ? $lang['Topic_locked'] : $lang['No_new_posts'];
            $newest_img = '';
        }
    }
    else
    {
        $folder_image = $folder;
        $folder_alt = ( $similar['topic_status'] == TOPIC_LOCKED ) ? $lang['Topic_locked'] : $lang['No_new_posts'];
        $newest_img = '';
    }

   $title = (strlen($similar['topic_title']) > 40) ? (substr($similar['topic_title'], 0, 37) . '...') : $similar['topic_title'];
   $topic_url = '<a href="'. append_sid("viewtopic.$phpEx?". POST_TOPIC_URL .'='. $similar['topic_id']) .'">'. $title . '</a>';

   $author_url = append_sid("profile.$phpEx?mode=viewprofile&". POST_USERS_URL .'='. $similar['user_id']);

   $author = ( $similar['user_id'] != ANONYMOUS ) ? '<a href="'. append_sid("profile.$phpEx?mode=viewprofile&". POST_USERS_URL .'='. $similar['user_id']) .'">'. $similar['username'] .'</a>' : ( ($similar['post_username'] != '' ) ? $similar['post_username'] : $lang['Guest'] );
 
   $forum_url = append_sid("viewforum.$phpEx?f=". $similar['forum_id']); 
   $forum = '<a href="'. $forum_url .'">'. $similar['forum_name'] .'</a>';
   $post_url = '<a href="'. append_sid("viewtopic.$phpEx?". POST_POST_URL .'='. $similar['topic_last_post_id']) .'#'. $similar['topic_last_post_id'] .'"><img src="'. $images['icon_latest_reply'] .'" alt="'. $lang['View_latest_post'] .'" title="'. $lang['View_latest_post'] .'" border="0" /></a>';
   $post_time = create_date($board_config['default_dateformat'], $similar['topic_time'], $board_config['board_timezone']);

    $template->assign_block_vars('similar.topics', array(
         'FOLDER' => $folder_image,
         'ALT' => $folder_alt,
         'TYPE' => $topic_type,
         'TOPICS' => $topic_url,
         'AUTHOR' => $author,
         'FORUM' => $forum,
         'REPLIES' => $replies,
         'NEWEST' => $newest_img,
         'POST_TIME' => $post_time,
         'POST_URL' => $post_url)
    );
  } // while
} // for $i
} // if ( $count_similar > 0 )
// fin du mod Sujets Similaires

j'avoue que je me sens pas capable de l'adapter seul pour mon punbb...
c'est quand meme assez chaud.
Par contre, il marche de manière satisfaisante....

Dans les templates, j'ai meme suprimé les liens vers le nom du forum, pour ne garder que le lien vers les sujets similaires

merci de votre aide...
a+

Dernière modification par colletaphoto (03-04-2009 23:35:57)

Hors ligne

#7 04-04-2009 10:02:22

fanf73
Wik-wiki

Re : Cherche mod "sujets similaires"

Dans cette mod, il n'y a en fait qu'une seule ligne à reprendre :

$sql = "SELECT topic_id
FROM ". TOPICS_TABLE ." t, ". FORUMS_TABLE ." f
WHERE topic_id != $topic_id
AND f.forum_id = t.forum_id
AND f.auth_view = 0
AND MATCH (topic_title) AGAINST ('". addslashes($topic_title) ."')
ORDER BY topic_time DESC LIMIT 0,15";

Pour détailler un peut : il compare le titre du topic en cours avec les titres des autres topics présent dans le même forum (pourrait marcher pour l'ensemble du forum, suffit de configurer la requête pour ça).

Il suffit d'ajouter un lien dans la page viewtopic.php (Sujets similaires) qui dirige vers une nouvelle partie du fichier search.php dans laquelle on recherche les sujets similaires avec la requête ci-dessus un peu modifiée.

Regarde comment sont récupérés les messages récents (show_24h) dans le fichier search.php pour te rendre compte que ce type de "partie" se réalise assez facilement.

Après il faut voir si la comparaison des titres par MATCH suffit, et si l'on préfère classer les résultats par dernier message ou par "score".

Le seul soucis : il faut que ton SGBD supporte l'indexation et la recherche sur l'ensemble d'un champ TEXT (utilisation de la fonction MATCH)

Dernière modification par fanf73 (04-04-2009 10:03:00)


Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.

Hors ligne

#8 04-04-2009 14:34:11

Mpok
Néo Admin

Re : Cherche mod "sujets similaires"

colletaphoto a écrit :

... c'est une approche interessante...

Euh, c'est surtout une approche minimaliste et peu efficace (et qui risque également d'être pénalisante en terme de performances si tu as beaucoup de topics). En plus, on ne s'intéresse ici visiblement qu'aux titres, ce qui n'est pas suffisant à mon avis...
(mais bon, c'est peut-être aussi mieux que rien.. à voir...)

D'autre part, l'utilisation d'une recherche fulltext (MATCH AGAINST) requiert d'avoir un index fulltext suppémentaire dans la table topics.

Bref, je préférais l'idée initiale (les tags dans une nouvelle table, remplie à chaque post, ou bien en batch dans la crontab).

Hors ligne

#9 14-04-2009 19:07:45

venux
Membre

Re : Cherche mod "sujets similaires"

bonjour,

interessant, qu'en est il de vos idées ?
colletaphoto as tu des news ?

Hors ligne

#10 15-04-2009 04:04:09

Mpok
Néo Admin

Re : Cherche mod "sujets similaires"

[Note prélimilaire :] je n'ai pas l'intention (ni le temps, surtout) de réaliser cette mod..
</Note>

Mes idées sont les mêmes qu'au début :
- tagguer automatiquement (et quotidennement au pire) les topics.

Tagguer les posts (c'est à dire au moment de l'enregistrement) me semble supperflu et inutile : en effet, une réponse du genre "ouais, ok" n'apporte rien sémantiquement, donc n'a pas à être traitée.
Le seul avantage (à mon avis négligeable) est l'instantanéité de la réponse.

Tagguer les topics DANS LEUR ENSEMBLE (réponses comprises) me semble plus approprié à la question.
On utilisera alors un stemmer orienté sur le langage désiré (il est évident que le français et l'anglais par exemple donnent des résultats différents), qui sera lancé par crontab toutes les x heures, et qui enregistrera dans une table spécifique les 5 mots les plus cités dans chaque topic.
(consulter "Bayes" ou "Paice" sur Google).

A la lecture, il suffira d'aller consulter cette table pour afficher les "similaires".

Evidemment, un long réglage sera nécessaire (dépendant de la fréquentation et du thème du forum) : certains mots devront être retirés (trop communs) par exemple...

Bref, super sujet d'étude pour étudiants... (je vais le suggérer)
(d'ailleurs, la plupart des ressources sur le sujet sont issues de thèses).

Hors ligne

#11 03-07-2009 21:24:48

frami
Membre

Re : Cherche mod "sujets similaires"

Bonjour ,


J'avoue que je serais preneur d'un tel mod.
A-t-on des nouvelles?

Quel code peut-on essayer?


Merci
frami

Hors ligne

#12 04-07-2009 01:56:29

Mpok
Néo Admin

Re : Cherche mod "sujets similaires"

@frami: Tout le monde serait "preneur"... smile
Mais ce dont on a besoin, ce sont de "faiseurs" (puis "donneurs") ^^

Comme je l'ai déjà précisé, le sujet (pour être BIEN réalisé) demande, si ce n'est une expertise, au moins une bonne connaissance de PHP + FluxBB, ainsi qu'une aptitude à synthétiser certains textes et ressources.
Et franchement, je me suis paluché un bon nombre des thèses que je signalais dans mon précédent message, il faut être motivé...
Mais on y arrive... wink
J'ai déjà des bouts de code fonctionnels qui pourraient être utilisés dans une telle mod (puisque j'ai développé moi-même à partir des ressources sus-citées mon propre système de tags pour mon site), mais de là à les transformer en une "mod propre" pour FluxBB, il y a un pas (c'est à dire du temps, que je n'ai pas...).
Note : en plus, il y a dans le pbm "sujets similaires" un aspect supplémentaire de "relevance" (euh.. c'est quoi le terme français ?) qui est totalement absent de mon développement actuel (le but n'étant pas le même), et qui demanderait encore plus de dev/recherche/temps...

Hors ligne

#13 11-11-2009 22:34:03

mac97000
Membre

Re : Cherche mod "sujets similaires"

Juste un up pourri pour signaler que je viens de m'abonner à la discussion huh

en résumé:
- le sujet m'intéresse
- je manque de temps pour me pencher dessus en ce moment
- je le note dans mes priorités à creuser
- je ne serais pas capable de dév un projet comme celui la seul

Mais je dois pouvoir servir de petite main si vous avez des sous-tâches à déléguer et que je puisse vous apporter un résultat sous forme de php après avoir bossé dessus huh


Je suis loin d'avoir compris le PHP mais je me soigne alors ne me parler pas de mysql svp. Mais si vous donnez des cours je suis preneur wink

Hors ligne

#14 12-11-2009 14:13:07

adaur
Membre

Re : Cherche mod "sujets similaires"

Mon ami Koos l'a codée.

http://punres.org/viewtopic.php?id=5338

Si cela intéresse du monde, je la traduirais bien évidemment wink


Edit : c'est fait, je la met a dispo dans moins de 2/3 heures wink

Edit² : http://www.punbb.fr/forums/viewtopic.ph … 095#p83095

Dernière modification par adaur (12-11-2009 16:48:14)


"As code is more often read than written it's really important to write clean code." - Franz
Twitter: @adaurfr
Mon fork de FluxBB: FeatherBB

Hors ligne

#15 14-11-2009 11:50:48

GRiBOU
Membre

Re : Cherche mod "sujets similaires"

Merci Adaur, toujours la pour rendre service, tu es un bon ^^

Hors ligne

Pied de page des forums