căutare fuzzy - macro-uri și programul VBA - Excel - Articole Directory - perfectă Excel
Problema de cautare fuzzy
Atunci când avem de a face cu textul, introdus de om, atunci este erori neintenționate inevitabile. În loc de „pen. Gogol“ Oamenii pot apela „Lane. Nogolya“, pur și simplu pentru că promahnotsya pe tasta dorită și apasă următorul. Având în vedere acest lucru, provocarea este de a pune în linie cuvântul în dicționarul cuvânt introdus, care este cel mai similar cu ceea ce a intrat utilizatorul. Problema clasică - verificarea numelor de străzi, așezări, etc. Căutare standard aici fără putere, așa cum cuvântul este în dicționar lipsește. Căutare standard numai în măsură să stabilească acest lucru, dar nu este în măsură să ofere utilizatorului să aleagă cea mai apropiată. Aveți nevoie de punerea în aplicare a căutării neclare.
Ceea ce oferim
Pentru cei în grabă, să anunțe imediat că în cazul în care subiectul este relevant, atunci vă sugerez să utilizați funcția personalizată foaie de lucru, care se numește FS_GetClosestWord și are 2 parametri obligatorii și opționale 4.
Formatul de apel: = FS_GetClosestWord (Ce, Unde, [NumItem]; [MinLen]; [Compară]; [dbg]). în cazul în care:
[NumItem] - în procesul de cercetare este o colecție de cuvintele cele mai potrivite, care sunt clasificate în funcție de un anumit algoritm. NumItem determină numărul de cuvinte returnate din această colecție are. NumItem = 1 returnează cea mai apropiată potrivire conform algoritmului cuvânt folosit. Dacă numărul menționat este prea mare și colectarea rezultată conține un astfel de număr de elemente, atunci se returnează o eroare # N / A;
[MinLen] - lungimea minimă a șirului de caractere, în care un cuvânt din dicționar, și care apoi a căutat în cuvântul Ce. Nu poate fi mai mic de 3. Dacă specificați 3 sau mai puțin nu specifică, valoarea 3 vor fi utilizate;
[Compară] - tipul de siruri de comparare: sau fără contabilitate sensibile la caz. 0 - include cazul, 1 - lipsiti de sensibilitate;
[DBG] - dacă specificați aici un număr mai mare de 1, apoi activați modul de depanare, și în funcție de ceea ce ești aici ukazhaete, va fi capabil să:1 - comportamentul implicit de a se întoarce cel mai apropiat de cuvântul În cazul în care;
2 - string potrivire;
3 - cast a găsit cuvintele vocabular;
4 - diferența de modul între replica și a găsit cuvântul de căutare, care este folosit pentru clasarea cuvintelor găsite de nivelul de similitudine cu cuvântul original (mai mici diferența, mai asemănătoare sunt considerate cuvânt).
Cei mai mulți utilizatori vor gestiona primii doi parametri.
Descărcați fișierul cu funcția
Dacă va transporta în mâinile tale proiect Excel VBA, asigurați-vă că modulul plus Fuzzy, de asemenea, transferul de clasă de căutare.
Teoria cautare fuzzy
Prin studierea întrebarea de la început m-am uitat la Nikolay Pavlov aceasta este rețeta lui. Chiar și el a găsit erori. Cu toate acestea, de la bun început a fost clar că algoritmul propus pentru cazul general este inacceptabilă din cauza vitezei lent, astfel încât anchetele au fost continuate. O recenzie excelenta a algoritmilor de cautare fuzzy date în acest articol. Pentru punerea sa în aplicare, am ales metoda de N-grame, care implică hashing de semnătură pentru a evalua opțiunile găsite.
Să presupunem că avem un cuvânt în tomate dicționar. Algoritmul meu împarte cuvântul cu lungimea șirului de caractere de la 7 la 3 caractere. 7 - lățimea, în acest caz, o combinație de simboluri mai scurte de trei caractere pentru a utiliza nici o semnificație specială.
7 caractere - 1 variantă (TOMATE)
6 caractere - varianta 2 (tomate ,, OMIDOR)
5 caractere - 3 variante (tomate ,, Omidi, Midori)
4 caractere - 4 varianta (PDMI, Omidi Mido, IDOR)
3 simboluri - 5 opțiuni (POM, Omi AMF, IDO, DOR)
In total, am primit de la cuvântul ROSII 15 combinații diferite de litere.
Toate aceste 15 combinații am pus în dicționar. Același dicționar conține toate combinațiile noi formate de la alte cuvinte din dicționar. În continuare, cuvântul de căutare este luată și, de asemenea, rupt în subșiruri și este forțat să creeze un meci cu un dicționar de combinații de litere. Toate operațiune sunt înregistrate în colectarea și ordonate în funcție de nivelul de similitudine.
Probleme de realizare a căutării neclare
În opinia mea, principala problemă aici - viteza de căutare. Trebuie remarcat faptul că, înainte am primit codul pe care îl oferiți, am scris un articol despre eficiența structurilor de date intermediare și au încercat o mulțime de opțiuni pentru structurile intermediare și algoritmi.
Din moment ce toate puse în aplicare sub forma unei formule a foii de lucru, principala modalitate de a îmbunătăți performanța - că fiecare formulă nu este invocată colecția sa de scrisoare combinații de vocabular și utilizate rezultatele zilei de lucru. Acest lucru a fost realizat printr-o structură globală. Cu toate acestea, toate acestea înseamnă că formula nu urmărește modificările în cazul în matrice. Asta este, se crede că intervalul În cazul în care statică și rareori se schimbă.
Sper că veți găsi această opțiune utilă. Dacă aveți această decizie pentru un motiv oarecare nu a venit, sau care au nevoie de modificări serioase, atunci lasă-mă să știu, poate că o voi modifica destul ca un subiect interesant.