IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Lier des mots entre eux pour former des concepts


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 11
    Points : 15
    Points
    15
    Par défaut Lier des mots entre eux pour former des concepts
    Bonjour,

    je m'amuse en ce moment en python et en text mining.
    J'ai un dataframe comme suit :
    col1 col2 col3 col4
    A B C D
    B C
    A C B
    A D

    Je cherche un moyen de créer un graphe indiquant les liens entre par exemple "A" et les autres entités, dans ce cas un 2nd cluster construit avec BC serait produit et un lien serait fait entre la ligne "B-C" et l'autre.
    L'objectif serait d'identifier quels sont les items le plus souvent associés.

    Il ne s'agit que d'un amusement, ni un travail universitaire, ni professionnel mais comme je suis curieux...

    Je suis allé cherché du côté de google bien sur, je soupçonne que les mots clés serait classification, multi-labels, network, clustering mais je n'arrive pas à trouver un "point d'entrée" pour résoudre mon problème (à part bien sûr retourner à l'école)

    Si vous avez des liens à partager, des tutos à recommander, des exemples à travailler... N'hésitez pas, je ne tiens pas tant à avoir le code pour résoudre ce problème que de créer le code moi-même.

    Merci de m'avoir lu (et honnêtement si mon énoncé est incompréhensible n'hésitez pas non plus, ca pourrait l'origine de mon blocage :-)

    Christophe

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Citation Envoyé par chris_boulot Voir le message
    Je cherche un moyen de créer un graphe indiquant les liens entre par exemple "A" et les autres entités, dans ce cas un 2nd cluster construit avec BC serait produit et un lien serait fait entre la ligne "B-C" et l'autre.
    C'est pas clair ce que tu souhaites obtenir. Comment souhaites tu construires ce que tu appelles un graph ? Pour l'exemple du tableau que tu as donné, le résultat donnerait quoi ? Le tableau se lit en ligne ?
    Ne serait pas juste une table de correspondance (plutot qu'un graph) que tu souhaites obtenir? Qqch du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A -> BCD, CB, D
    B -> ACD, C, AC
    C -> ABD, B, AB
    D -> ABC, A
    que l'on pourrait stocker sous la forme d'un dictoinnaire de liste.

  3. #3
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    Citation Envoyé par chris_boulot Voir le message
    Je cherche un moyen de créer un graphe indiquant les liens entre par exemple "A" et les autres entités, dans ce cas un 2nd cluster construit avec BC serait produit et un lien serait fait entre la ligne "B-C" et l'autre.
    je confirme : c'est pas clair du tout

    L'objectif serait d'identifier quels sont les items le plus souvent associés.
    on parle de couples de mots adjacents dans une phrase ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> z = 'le gros chat roux'.split()
    >>> zip(z, z[1:])
    [('le', 'gros'), ('gros', 'chat'), ('chat', 'roux')]
    ou de n'importe quel couple de mots au sein de la même phrase indépendamment de leur position ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> list(itertools.combinations(z, 2))
    [('le', 'gros'), ('le', 'chat'), ('le', 'roux'), ('gros', 'chat'), ('gros', 'roux'), ('chat', 'roux')]
    ou autre ? dans tous les cas prendre des exemples plus parlant que ABCD serait probablement une bonne idée

    la description pourrait faire penser à la recherche de n-grammes en traitement du langage

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 11
    Points : 15
    Points
    15
    Par défaut Mise en suspens
    Je vous remercie d'abord
    Ensuite vraiment en me relisant 2 jours après c'est vraiment du grand n'importe quoi.
    J'hésite à essayer d'éclaircir mais bon qui ne tente n'a rien
    En gros : A-C = 3, A-D=2...A-C-B = 2, ... B-D=1

    Donc on voit que la combinaison A-C est plus fréquente que la combinaison B-D ce qui me permet ensuite de faire un classement.

    Je me demandais si je ne devais pas passer par renommer A=1, B=2... jusqu'au dernier caractère puis faire tourner un algo de ML dessus (genre un algo de classification dans scikit) mais n'étant pas un expert (vous l'avez remarqué, c'est pourquoi d'aileurs j'hésite à parler d'intelligence artificielle, n'étant pas persuadé moi meme d'en posséder le début :-))

    Mais je crois que je vais approfondir mes docs de NLTP, TF-IDF et je reviendrai avec une solution (si j'en trouve une bien sûr :-))

    En tout cas merci pour votre aide, je vais me pencher sur vos commentaires je suis sûr qu'il y a quelque chose à en tirer car je crois bien en effet que ce sont des n-grams d'après ce que j'ai lu ailleurs

  5. #5
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Les combinaisons peuvent être vus comme des tuples. Tu peux créer un dictionnaire dont les clés sont des tuples, et les valeurs serait le nombre de fois que tu relèves la dite combinaison.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    from itertools import combinations
     
    data = [['A','B','C','D'],
            ['B','C'],
            ['A','C','B'],
            ['A','D']]
     
    letr = ['A','B','C','D']  ### Pourrait etre construit plutot que de l'ecrire à la main
    all_combinations = [ c for k in range(2,len(letr)+1) for c in combinations(letr,k) ]
     
    print(all_combinations)
     
    totaux = { c:0 for c in all_combinations}
     
    for phrase in data :
        totaux[ tuple(sorted(phrase)) ]+=1
     
    print(totaux)
    Note qu'ici je trie la phrase (qui n'est vu que comme une liste de mot) de sorte à ce que la combinaison A-B soit la meme que la combinaison B-A (à toi de voir si tu veux se comportement).
    De plus il faut voir aussi si par example tu as A-B-C est ce que tu veux juste compter 1 de plus pour A-B-C ou bien aussi 1 de plus pour A-B, B-C et A-C ...

Discussions similaires

  1. Comment lier des JCombobox entre eux ?
    Par Maro_21 dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 15/06/2016, 20h28
  2. Lier des objets entre eux !
    Par laurent94 dans le forum Powerpoint
    Réponses: 4
    Dernier message: 26/05/2015, 03h05
  3. [Débuter] Lier des boutons entre eux (comme des boutons radio)
    Par Avatar36 dans le forum Qt Quick
    Réponses: 11
    Dernier message: 10/12/2014, 19h40
  4. Archivage : Lier des documents entre-eux
    Par _Em'' dans le forum Configuration
    Réponses: 2
    Dernier message: 06/11/2012, 16h41
  5. Réponses: 6
    Dernier message: 22/11/2005, 17h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo