Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Besoin en optimisation de fonction de recherche .find

Gorzyne

XLDnaute Nouveau
Bonjour à tous,

J'utilise la fonction .find pour compter un nombre d'occurences dans un gros corpus (50 000 lignes comptant de 10 à 1000 caractères).

Donc je fais un .findnext, jusqu'à ce que j'ai une erreur, et je passe au suivant

Je dois faire ce traitement sur environ 1.8 millions de tests et le temps de calcul est a vu de nez de plusieurs centaines d'heures. Par ailleurs l'élément cherché est de type "mot1*mot2"

Bien sûr je parallélise l'opération sur plusieurs postes de travail et j'ai bien sûr mis des screenupdating false mais je cherche des idées ou solution pour gagner en temps de calcul.
-> est ce que du VBA Access me permettrait d'aller plus vite ? de combien de x ?
-> est ce qu'en organisant le problème autrement je peux aller plus vite ? par exemple découpage en mots et find mot à mot sans expression régulière ? (split de la ligne avec 1 mot par colonne et .find en option cellule entière) j'ai peur que le find sur tableau soit difficile à gérer...
-> autre idée utiliser une table de codification mot/nombre et "crypter" ma table avec des nombres, avec en premier les mots les + fréquents ? cette solution me paraît sans doute bonne car permettrait de réduire la taille des entrées du corpus et de le débruiter au passage

un petit extrait du code
Code:
While rowcurrent > rowini  'boucle infinie seulement interrompue si erreur
      Selection.FindNext(After:=ActiveCell).Activate
      rowcurrent = ActiveCell.Row
      ThisWorkbook.Sheets("Tableau").Cells(i, j) = ThisWorkbook.Sheets("Tableau").Cells(i, j) + 1 'on incrémente à chaque occurrence trouvée
Wend

N'hésitez pas à poser des questions si c'est un peu confus. Il s'agit vous l'aurez peut être compris d'un sujet de linguistique informatique.

Tout élément bienvenue.
Merci

Gorz'
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Besoin en optimisation de fonction de recherche .find

Re

Merci de ton feedback.
Tu parles de RegExp mais pas l'ombre d'une queue de Pattern dans ton code VBA ?

Pour moi RegExp, c'est ce genre de chose, non ?
Code:
Sub a()
Dim z$, test$
z = Format(Date, "dddd dd mmmm yyyy ") & Time
test = z & Chr(13)
test = test & Chr(13) & ExtraireChiffre(z)
MsgBox test, vbInformation, "Extraction Chiffres"
End Sub
Private Function ExtraireChiffre(x$) As String
With CreateObject("vbscript.regexp")
    .Global = True: .Pattern = "[^\d]+"
    ExtraireChiffre = .Replace(x, vbNullString)
End With
End Function
 

Gorzyne

XLDnaute Nouveau
Re : Besoin en optimisation de fonction de recherche .find

oui t'as raison, mais ça c'est pour le raffinement... la l'objectif c'est d'avoir des quadruplets de patrons lexicaux mota*motb*motc*motd, pour ce faire l'opérateur Like est suffisant, et il s'agit bien d'une expression régulière, certes simple

comme c'est impossible de tout faire tourner d'un coup, (5000 milliards de combinaisons) et que déjà avec les duplets je vais pouvoir virer la majorité des duplets invalides, je procède en plusieurs étapes... D'abord j'obtiens une liste de duplets valides disons 1 sur 10, ensuite je rajoute un mot je teste les triplets, et ensuite les quadruplets. Mais il y a également des considérations de poids sémantique à prendre en compte

Les pattern je commence juste à fouiller les possibilités, ça va surtout me servir pour de la détection d'hyperonyme

"Hier j'ai mangé <plat>" va me détecter l'ensemble des plats que j'aurais renseigné dans une base préalable... etc...
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Besoin en optimisation de fonction de recherche .find

Bonsoir

Désolé mais je décroche quand mon œil croise un post tout plein de "jargonage"
quadruplets de patrons lexicaux
avec les duplets
considérations de poids sémantique
de la détection d'hyperonyme
et mon tube de A*KA S*LTZ*R est déjà vide

PS: N'oublie pas que nous sommes pas dans ta branche
 

Gorzyne

XLDnaute Nouveau
Re : Besoin en optimisation de fonction de recherche .find

duplet: mota*motb
triplet: mota*motb*motc
quadruplet: mota*motb*motc*motd

poids sémantique: la valeur informative d'un mot quant au sujet traité et au contexte

hyperonyme: le domaine auquel un mot se rattache, exemple animal est l'hyperonyme de chien et de chat animal.chien
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…