Carnet Wiki

MoMots

Version 7 — February 2012 — Richie

Mots sur Mots (ou de son petit nom MoMo ) est un plugin prévu pour rajouter des mots-clés descriptifs sur les mots-clés !

Ci-après quelques éléments de documentation, récupérés sur la liste...
Le suvi de ce plugin est sur la zone zone.spip.org/trac/spip-zone/browse...

Mots sur Mots (ou de son petit nom MoMo) est un plugin prévu pour rajouter des mots-clés descriptifs sur les mots-clés !
Il reprend une vieille idée exprimée là : spip-contrib.net/MotsClesDeMotsCles !

Il propose deux modèles :
-  [(#MODELE{enfants_mot}{id_mot=#ID_MOT})]
-  [(#MODELE{parents_mot}{id_mot=#ID_MOT})]


d’après la Description “Plugin”

  • Dans la partie privée, le plugin Momo propose une interface pour associer des mots-clés parents à un mot-clé donné. Attention, pour éviter les liens circulaires, il ne faut pas associer à un mot-clé donné, un parent qui est déjà un de ses enfants.
    Voici la structure des tables définies :
      $spip_momo = array(
                        'id_parent' => 'bigint(21) DEFAULT "" NOT NULL',
                        'id_mot' => 'bigint(21) DEFAULT "" NOT NULL',
                    );
    • A la relecture, je pense qu’il faudrait rajouter un troisième index, qui pourrait etre un ’id_type’ ou bien un ’objet’ (selon la facilité de jointure de SPIP), étant entendu de plus que chaque id_ pourrait pointer vers... un autre id_triplet=occurence de momo [1]
  • Dans la partie publique, le plugin Momo propose:
    • un nouveau critère de la boucle MOTS: {id_mot_parent=xxx}xxx est un id_mot qui permet de ne retourner que les mots-clés ayant un parent donné.
    • Il y a un squelette de démo: /spip.php?page=demomo
    • Il y a des modèles pour tester :
      • enfants_mot qui donne récursivement tous les enfants d’un mot
      • parents_mot qui liste les parents d’un mot
      • doublons_enfants_mot qui retourne une liste des id_mot de tous les enfants d’un mot, récursivement. Cette liste est brute et peut être exploitée avec un |explode{','} dans les critères d’une boucle (ex.: <BOUCLE_Enfants du mot(MOTS){id_mot IN #MODELE{doublons_enfants_mot}{id_mot}|explode{','}}> voir le formulaire attache_momo)
      • doublons_parents_directs_mot qui retourne une liste des id_mot des parents directs d’un mot. Cette liste est brute et peut être exploitée avec un |explode{','} dans les critères d’une boucle (ex.: <BOUCLE_Mot_Parents_directs(MOTS){id_mot IN #MODELE{doublons_parents_directs_mot}{id_mot}|explode{','}}> voir le formulaire attache_momo)

des explications complémentaires

Assez simplement [2]les mots-parents sont les mots attachés à un mot-clé.

Ex.: tu as un mot-clé “carotte”, on peut lui attacher deux autres
mots-clés: “légume” et “tubercule”. Les mots-parents de “carotte” sont
donc “légume” et “tubercule” (quel que soient les groupes de mots dans
lequel sont ces mots-clés). Par conséquent, “légume” a comme enfant
“carotte”. “tubercule” a aussi comme enfant “carotte” (principe de
polyhiérarchie).

L’idée vient rapidement d’un réseau sémantique.

Car ces possibilités de mots multiples sont intéressantes pour un usage en polyhiérarchie.

Dans mon test, j’ai repris un groupe de mots-clés “personnes citées” pour lesquels le descriptif comprenait parfois le contenu “spectacle” (soit un musicien, une groupe, une troupe, etc.). Le plugin Momo est très bien pour libérer ce champ et, en plus, faire de belles boucles.

À l’usage, il manquerait la possibilité de mettre un mot comme indice à un autre mot pour indiquer que dans tel usage, il sert à cela. Ainsi, toujours dans mon groupe “personnes citées”, pour tel article le mot “le nom de la personne” devrait être indiciée/indexée “spectacle”, et sur un autre article non.

Exemple : un catalogue de revues (un article par revue) avec la liste des participants en mots-clés. Si le participant est illustrateur, je l’indique. Le problème c’est que pour une revue, le participant est juste auteur manuscrit mais que dans une autre, il sera aussi ou seulement illustrateur. Multiplier les groupes, une solution (déjà appliquée sur un site) revient à multiplier les doublons et les renvois à faire à la main.

Je ne vois pas comment “qualifier” l’utilisation d’un mot suivant l’article où il est lié. De plus, on peut compliquer si on choisit qu’une qualification peut-être simple (unique) ou multiple. Dans ce dernier cas, le mécanisme déjà utilisé par le “statut” des objets (article, brève, site… et peut-être d’autres) semble peu transposable.

- un exemple de soucis...(pour historique)
> Cette boucle affiche les enfants d’un mot clé dont l’id est passer en
> paramètre, mais je constate que la class EXPOSE on et le critère exclus
> ne marche pas. Est ce un bug?

> voici la boucle

>
>
> <BOUCLE_Liste_mots_enfants(MOTS){id_mot_parent = #ID_MOT}{par num
> titreexclus>
>

  • > title=“”>(#TITRE
  • >
    >
    >

    Ton problème vient de l’imbrication des deux boucles: exclus et expose
    se réfèrent à l’id_mot retourné par la première boucle
    (mot_parent_ou_tous)

    Dans Momo, il te suffit d’utiliser le modèle doublons_enfants_mot
    comme critère pour avoir la liste des enfants et tu pourras les
    manipuler comme tu veux dans une boucle.

    Je te propose de faire plutôt:

    <BOUCLE_Enfants du mot(MOTS){id_mot IN
    #MODELE{doublons_enfants_mot}{id_mot}|explode{','}}{par num
    titre}{exclus}>
    <li[ class="(#EXPOSE{on})"]><a
    href="[(#URL_MOT|parametre_url{'type',#ENV{id_mot}})]"
    title="">[(#TITRE|supprimer_numero)]</a></li>
    </BOUCLE_Enfants_du_mot>

    Là encore il vaut mieux utiliser le doublons fourni par
    le plugin: “doublons_parents_directs_mot”

    <BOUCLE_Mot_Parents_directs(MOTS){id_mot IN
    #MODELE{doublons_parents_directs_mot}{id_mot}|explode{','}}{par
    hasard}{0,1}>
    <a href="[(#URL_MOT|parametre_url{'type',#ENV{id_mot}})]"
    title="">[(#TITRE|supprimer_numero)]</a>
    </BOUCLE_Mot_Parents_directs>

    Par ailleurs, je ne sais pas quel est ton but, mais si c’est
    d’afficher la hiérarchie d’un mot donné, il vaut mieux te tourner vers
    “hierarchies_mot” par exemple en utilisant
    [(#MODELE{hierarchies_mot}{id_mot=#ID_MOT}{0,1})]
    (si tu as une
    préférence de groupe de mots à voir apparaître dans la hierarchie tu
    peux passer une liste de id_groupe. Voir les commentaires dans le code
    du modèle)


    ergonomie

    Sur un site avec beaucoup de groupes de mots, la page d’administration d’un mot, d’une part fait chargée, d’autre part complique la gestion des rédacteurs/administrateurs et rédactrices/administratrices (surtout quand il faut s’expliquer à distance et dans des langues différentes).

    suggestion : la page d’administration d’un groupe de mots permet de cocher l’objet que l’on s’autorise à lier. Pouvoir cocher que l’on autorise ce groupe à être parent (du moins à ce que les mots qu’il contient soient possiblement parents). Un plugin comme Agenda rajoute la possibilité de lier aux “événements”. Il n’est peut-être pas possible d’adapter le code directement puisque momo n’offre pas vraiment un nouvel objet.


    et des projets possibles

    Momo n’est pas prévu pour typer la relation entre les mots et
    les objets de Spip (articles, rubriques, etc.). Toutefois j’ai prévu
    (à très long terme !) de pouvoir typer les relations entre mots dans
    Momo.

    Mais ça pourrait être intéressant de typer la relation entre les
    objets. J’ai déjà été confronté au problème des auteurs qui ne sont
    parfois que des illustrateurs, des traducteurs ou simplement des
    rédacteurs ou des copistes, alors qu’il y avait aussi de vrais
    auteurs. Comment les différencier ? et ce dans chaque cas (un copiste
    pour un article donné, peut-être auteur pour un autre) ?

    • Du point de vue base de donnée ça ne paraît pas compliqué, il
      suffit d’ajouter un champ “relation” dans les tables de jointure
      (spip_mots_articles, spip_auteurs_articles, etc.) qui spécifie cette
      relation.
      • UN exemple : dans un prototype de site, on définit le terme de ’role’, avec 3 valeurs possibles : saisie, contact, tout
        Dans la déclaration des tables principales, il y avait :
        $spip_auteurs_articles = array(
            "id_auteur"    => "bigint(21) NOT NULL NOT NULL DEFAULT ''",
            "id_article"    => "bigint(21) NOT NULL NOT NULL DEFAULT ''",
            "role"        => "enum('saisie','contact','tout') NOT NULL DEFAULT 'saisie'"
        ); 
    • Côté interface graphique ça va être plus lourd, mais c’est jouable: il
      suffit à côté de l’auteur (ou du mot) ajouté, de proposer un
      sélecteur pour pouvoir typer la relation (avec un type de relation qui
      se met par défaut si on ne fait rien).
    • Là où ça se complique sacrément c’est pour l’interface avec la base de
      données: les boucles. Comment permettre simplement avec
      Boucles/Balises/critères de pouvoir manipuler ce champ qui serait sur
      les tables de jointure... À méditer.
      • Pas infaisable, car il me semble que déjà certaines boucles automatiques de SPIP récupèrent cette info...
      • ça marche assez simplement pour boucler en fait,
        et on peut aussi utiliser ce champ en critère.
            <BOUCLE_role(AUTEURS ARTICLES){id_auteur}{role}>
                #NOM #ROLE ... 

    Quelques contribs connexes

    Dans le désordre total...

    -  Étiquettes
    -  Rhizome
    -  Des mots clefs partout
    -  Plugin Mots Objets
    -  Abandonner les rubriques au profit des mots clés ...
    -  Sémantique SPIP
    -  MotsClesDeMotsCles

    (à compléter)

    Concrètement, pour ce plugin là, ce qui est sûr c’est qu’à moi il
    m’est super utile et sera notamment la pierre angulaire de futurs
    développements (et l’est déjà d’anciens développements: je fais des
    mots sur les mots depuis 2005, mais avant c’était de façon très sale,
    ce plugin a pour but de rendre tout ça plus propre).

    Je pense que s’il intéresse d’autres gens, il sortira progressivement
    de l’anonymat et son nom ne sera plus un obstacle. Sinon, ben il ne
    restera utile que pour moi et c’est déjà pas mal !