Bonjour à tous,

Je dois analyser plusieurs fichiers textes afin de constituer une liste de ngrams et pouvoir les analyser ensuite. J'ai déjà des fonctions écrites en Python mais je souhaiterai les réécrire en VBA car je voudrai les inclure dans une macro excel.
Voici un exemple pour comprendre ce que font ces fonctions en Python.
Si on a la phrase suivante: "menu gastronomique avec du foie gras". On souhaite générer tous les ngrams possibles à partir de cette phrase ayant une taille de 1 à 4 mots.
Grâce aux fonctions de génération on obtient la liste de ngrams suivante: [menu, gastronomique, avec, du ,foie, gras, menu gastronomique, gastronomique avec, avec du, du foie, foie gras, menu gastronomique avec, gastronomique avec du, avec du foie, du foie gras, menu gastronomique avec du, gastronomique avec du foie, avec du foie gras]

Voici le code Python qui permet de faire cela:

Code python : 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
19
20
21
22
23
24
25
26
27
28
29
30
31
def create_ngrams(sentence, nlength, separator):
    if nlength < len( sentence ):
        grams = []
        for i in range( len( sentence ) - ( nlength - 1 ) ):
            gram = sentence[i:i+nlength]
            if len(gram) == nlength:
                if separator:
                    grams.append( separator.join( gram ) )
                elif separator == '':
                    grams.append(''.join(gram))
                else:
                    grams.append(gram)
        return grams
    elif nlength == len(sentence):
        if separator:
            return [separator.join(sentence)]
        elif separator == '':
            return [''.join(sentence)]
        elif not separator:
            return [sentence]
    else:
        return []
 
def CollectNgram(nlength,sentence):
    ngrams_by_sentence = []
    separator = ' '
    for n in nlength:
        ngrams = create_ngrams(sentence.split(' '), nlength, separator)
        for ngram in ngrams:
            ngrams_by_sentence.add(ngram)
    return ngrams_by_sentence

Comment réécrire les mêmes fonctions en VBA?