Fuzzy keresés - makrók és VBA programot - egy Excel - cikkek Directory - tökéletes excel
A probléma a fuzzy keresés
Ha van dolgunk a szöveg által bevezetett ember, akkor ez elkerülhetetlen véletlen hibák. Ahelyett, hogy „tollat. Gogol” Az emberek dial „sávban. Nogolya” egyszerűen azért, mert promahnotsya a kívánt gombot és megnyomja a következő. Tekintettel erre, a kihívás az, hogy összhangban a beírt szó szótári szót, ami a legjobban hasonlít ahhoz, amit a felhasználó által megadott. A klasszikus probléma - ellenőrzését utcanevek, települések, stb Standard keresés itt tehetetlen, mivel a szó a szótárban hiányzik. Standard keresés csak képes létrehozni ezt a tényt, de nem olyan helyzetben, hogy a felhasználó választhat a legközelebb. Szüksége végrehajtása fuzzy keresést.
Amit kínálunk

Azok siet, hogy be azonnal, hogy ha a téma nem megfelelő, akkor azt javasoljuk, hogy használja az egyéni munkalapfüggvénnyel, melynek neve FS_GetClosestWord és 2 kötelező paraméter és az opcionális 4.
Hívás méret: = FS_GetClosestWord (Mi, hol [NumItem] [MinLen] [Összehasonlítás] [dbg]). ahol:
[NumItem] - a folyamat a vizsgálat egy gyűjtemény a legmegfelelőbb szavakat, rangsorolása szerint egy adott algoritmus. NumItem meghatározza a szavak száma visszatért a gyűjteményben. NumItem = 1 visszatér a legközelebbi egyezést beszéde szerint algoritmust. Ha az említett szám túl nagy, és az így kapott gyűjtemény tartalmaz egy ilyen elemeinek számát, akkor egy hibaüzenetet ad vissza # N / A;
[MinLen] - a minimális hosszúságú karakterlánc, amelybe egy szót a szótárban, és aki azután kérik a szó a mi. Nem lehet kevesebb, mint 3. Ha adja 3 vagy annál kevesebb nem határozza, a 3. érték kerül felhasználásra;
[Összehasonlítás] - típusú össze húrok: a kis- és nagybetűk, vagy anélkül számvitel. 0 - tartalmazza azt az esetet, 1 - érzéketlen;
[Dbg] - ha az itt megadott szám nagyobb, mint 1, akkor kapcsolja be debug módban, és attól függően, hogy mit te itt ukazhaete, képes lesz:1 - alapértelmezett viselkedését visszatérnek a legközelebb szavát Ahol;
2 - kiegyenlített string;
3 - cast találta a szókincset;
4 - a különbség modulus között a replika, és megtalálta a keresett szót, mellyel a rangsor szava által megállapított szintje hasonlóságot az eredeti szót (minél kisebb a különbség, annál több hasonló tartják szó).
A legtöbb felhasználó fogja kezelni az első két paraméter.
Töltse le a fájlt a funkciót
Ha viszi a kezedben Excel VBA projekt, biztos, hogy felül modul Fuzzy is át osztály Search.
Az elmélet a fuzzy keresés
Tanulmányozva a kérdés az elején néztem, hogy Nikolay Pavlov ez az ő receptje. Még ő is talált hibákat. Azonban kezdettől fogva világos volt, hogy a javasolt algoritmus az általános esetre elfogadhatatlan, mert a lassú, így felmérések folytatódott. Egy kiváló felülvizsgálata fuzzy keresési algoritmusok az ebben a cikkben. Ennek végrehajtása, én választottam a módszer N-gramm bevonásával tördelő aláírás, hogy értékelje a lehetőségeket talált.
Tegyük fel, hogy egy szót a szótárban paradicsom. Saját algoritmus osztja az igét húr hossza 7-3 karakter. 7 - szélessége, ebben az esetben, jelkombináció rövidebb három karaktert kell használni nincs különösebb jelentősége.
7 karakter - 1 variáns (paradicsom)
6 karakter - 2-variáns (paradicsom ,, OMIDOR)
5 karakter - 3 variánsok (paradicsom ,, Omidi, Midori)
4 karakter - 4 kiviteli alakban (pDMI.l Omidi Mido, IDOR)
3 szimbólum - 5 lehetőségek (POM, OMI, MFA, IDO, DOR)
Összesen megkaptuk a szó PARADICSOMSZÓSSZAL 15 különböző betű kombinációk.
Mindezek a 15 kombinációk tettem a szótárban. Ugyanez szótár tartalmazza az összes új kombinációkat előállíthatjuk más szótári szó. Ezután a keresett szót kell venni, és szintén betörtek alkarakterláncok és arra kényszerül, hogy hozzanak létre egy mérkőzés a szótár betűkombinációk. Minden művelet rögzítik a gyűjtemény és rangsorolják a hasonlóság foka.
Problémák megvalósításának fuzzy keresés
Véleményem szerint a fő probléma itt - a keresés sebességét. Meg kell jegyezni, hogy mielőtt megkaptam a kódot, amit kínálnak, írtam egy cikket a hatékonyságát közbenső adatstruktúrák és próbáltak egy csomó lehetőséget a köztes struktúrák és algoritmusok.
Mivel minden formájában valósítjuk meg egy képlet a munkalap, a legfőbb módja a teljesítmény javítása érdekében -, hogy minden képlet nem támaszkodott a gyűjtemény a levél szókincs kombinációk és eredményeit használta fel a munkanap. Ez azért történt, egy globális struktúra. Mindez azonban azt jelenti, hogy a képlet nem követni a változásokat a Amennyiben a tömbben. Ez, úgy véljük, hogy a tartományban, ahol a statikus és ritkán változik.
Remélem, hogy ezt a funkciót hasznos. Ha ez a döntés valamilyen okból nem jött, vagy szoruló súlyos módosítást, akkor tudassa velem, talán majd módosítsa a meglehetősen érdekes témát.