Partage
  • Partager sur Facebook
  • Partager sur Twitter

matrice de cooccurrence

    1 avril 2024 à 14:20:31

    Bonjour, il faudrait que j'écrive une fonction qui étant données une (liste de) phrase(s) retourne la matrice de cooccurrences de bigram

    exemple : 'le chat mange' :

          a  c  e  g  h  l  m  n  t  esp <s> </s>
    a     0  0  0  0  1  0  1  1  1  0   0   0
    c     0  0  0  0  1  0  0  0  0  1   0   0
    e     0  0  0  1  0  1  0  0  0  1   0   1
    g     0  0  1  0  0  0  0  1  0  0   0   0
    h     1  1  0  0  0  0  0  0  0  0   0   0
    l     0  0  1  0  0  0  0  0  0  0   1   0
    m     1  0  0  0  0  0  0  0  0  1   0   0
    n     1  0  0  1  0  0  0  0  0  0   0   0
    t     1  0  0  0  0  0  0  0  0  1   0   0
    esp   0  1  1  0  0  0  1  0  1  0   0   0
    <s>   0  0  0  0  0  1  0  0  0  0   0   0
    </s>  0  0  1  0  0  1  0  0  0  0   0   0

    il y a un 1 quand les deux lettres/symboles se touchent.

    je n'y arrive pas, j'avais essayé ça mais ça ne fonctionne pas :

    def co_occurrence_matrix(corpus):
        vocab = set(corpus)
        vocab = list(vocab)
    
        # Key:Value = Word:Index
        vocab_to_index = { word:i for i, word in enumerate(vocab) }
    
        # Create bigrams from all words in corpus
        bi_grams = list(bigrams(corpus))
    
        # Frequency distribution of bigrams ((word1, word2), num_occurrences)
        bigram_freq = nltk.FreqDist(bi_grams).most_common(len(bi_grams))
    
        # Initialise co-occurrence matrix
        # co_occurrence_matrix[current][previous]
        co_occurrence_matrix = np.zeros((len(vocab), len(vocab)))
    
        # Loop through the bigrams in the frequency distribution, noting the 
        # current and previous word, and the number of occurrences of the bigram.
        # Get the vocab index of the current and previous words.
        # Put the number of occurrences into the appropriate element of the array.
        for bigram in bigram_freq:
            current = bigram[0][1]
            previous = bigram[0][0]
            count = bigram[1]
            pos_current = vocab_to_index[current]
            pos_previous = vocab_to_index[previous]
            co_occurrence_matrix[pos_current][pos_previous] = count 
    
        co_occurrence_matrix = np.matrix(co_occurrence_matrix)
    
        return co_occurrence_matrix


     

    -
    Edité par MarieLilou 1 avril 2024 à 16:31:02

    • Partager sur Facebook
    • Partager sur Twitter
      1 avril 2024 à 15:13:08

      Bonjour,

      Le message qui suit est une réponse automatique activée par un membre de l'équipe de modération. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

      Manque de Politesse

      Votre message ne comporte pas ou peu de formules de politesse (« Bonjour », « Merci », « Au revoir », etc.). Les règles du site exigent que chaque nouveau message comporte un minimum de politesse. Après tout, les gens qui répondent le font gratuitement, sur leur temps libre. Ils méritent bien un minimum de considération, n'est-ce pas ?

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        2 avril 2024 à 14:01:07

        Bonjour,

        Ca peut se faire très simplement:

        letters = {'a':0, 'c':1, 'e':2, 'g':3, 'h':4 ,'l':5 ,'m':6 ,'n':7, 't':8 , ' ':9}
        mat = [[0 for j in range(10)] for i in range(10)]
        
        sentence = 'le chat mange'
        
        for k in range(0,len(sentence)-1):
            r1, r2 = letters[sentence[k]], letters[sentence[k+1]]
            mat[r1][r2], mat[r2][r1] = 1, 1
        
        print('  ', end = '')
        for key, v in letters.items(): print(key, end = ' ')
        print('\n')
        
        for k in range(10):
            for key, v in letters.items():
                if(v == k):print(key, end = ' ')
            for j in range(10): print(mat[k][j], end = ' ')
            print('\n')



        • Partager sur Facebook
        • Partager sur Twitter

        matrice de cooccurrence

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        • Editeur
        • Markdown