» »

levenshtein distance

levenshtein distance

BRBR ::

Kako se to implementira na veliko podatkov v bazi ?
Ok milijon stringov in primerjanje vsakega z vsakim ?
Vem za stram kjer naredi fuzzy match v parih sekundah, naprimer za tole

Fosilella farinosa (dani string)
Fosliella farinosa (string ki ga najde)

Če bi primerjali vsak string v bazi s danim stringom, par sekund ni variante ?
Da dela s sondex-om dvomim ker najde rešitve tudi za bolj zatipkane stringe.

windigo ::

Uporabi naprimer ujemanje v double metaphone (dela bolje kot soundex, lahko delaš seveda tudi s soundex) za iskanje potenicalnih kanidatov, potem pa na teh kandidatih računaj to razdaljo. Ni 100%, je pa za precej uporab zadosti dobro.

Problem pri tem je, da metaphone dela samo za posamezne besede in ni univerzalen (ne vem kako dela za Japonščino in Kitajščino, kaj šele za poljubne nize znakov), torej moraš razbiti stavek na besede in za vsako izračunati in shraniti metaphone, torej posebej za fosilella in za farinosa.

BRBR ::

Ok, si bom prebral kaj je ta metaphone.

Najbrž metaphone ne bi delal če bi stavek kar zlepil skupaj (ves presledke ven) ...

Hvala.

windigo ::

Ne bo delalo, če zlepiš stavek skupaj, metaphone je podobno kot soundex štiričrkovna zgoščevalna oznaka izračunana iz posamezne besede; (double) metaphone in soundex in podobno moraš računati in shraniti za vsako besedo posebej ob spremembi besedila.

Red_Mamba ::

a to rabis samo cele stringe primerjat?
ker ce ja izracunas hash vrednosti za vse in jih primerjas po teh
[st.slika https://img.shields.io/badge/Slo-Tech-green.svg test]
Linkedin >> http://goo.gl/839Aua
Mamba's Crypto & ICO's: https://t.me/joinchat/AAAAAExTkO4P4UDy0fIZdg

windigo ::

Če imaš pa veliko več denarja kot pa časa za razvoj, pa lahko tudi kupiš exorbyte. :)

Red_Mamba je izjavil:

a to rabis samo cele stringe primerjat?
ker ce ja izracunas hash vrednosti za vse in jih primerjas po teh

Ravno nasprotno, če prav razumem bi rad, da mu iskanje deluje tudi, če iskalni niz ni ravno 100% pravilen, torej da tolerira tudi zatipkovanja, napačno črkovanje ipd.
Torej rabi ravno nasprotno od razpršilne - zgoščevalno funkcijo, ki podobne besede združi v eno zgoščevalno oznako.

Zgodovina sprememb…

  • spremenilo: windigo ()

BRBR ::

Red_Mamba je izjavil:

a to rabis samo cele stringe primerjat?
ker ce ja izracunas hash vrednosti za vse in jih primerjas po teh


S tem si pač ne moreš pomagat nič, to ti samo pove če sta enaka, kar pa že tako ali tako veš brez hash - a.

Če dobro pogledaš ta dva stringa sta malo različna, drugi nekaj pomeni, prvi pa čisto nič.

Fosilella farinosa (dani string)
Fosliella farinosa (string ki ga najde)


alora nekaj, kar slućajno vem da ni nič (ali skoraj gotovo nič) (jih imam par 100 v eni tabeli), hočem primerjat z eno tabelo (recimo milijon recordov) kjer pa so zagotovo vredu stringi.

Zgodovina sprememb…

  • spremenil: BRBR ()

Red_Mamba ::

potem pa izluscis besede v graph (neo4j) bazo in pogledas koliko besed se ujema med dvema
rezultat obravnavas kot score in lahko posortiras po njih reultate.

a imas to slucajno za kak suggestion?
sproti izpisujes najboljse zadetke ko uporabnik nekaj tipka?
[st.slika https://img.shields.io/badge/Slo-Tech-green.svg test]
Linkedin >> http://goo.gl/839Aua
Mamba's Crypto & ICO's: https://t.me/joinchat/AAAAAExTkO4P4UDy0fIZdg

Zgodovina sprememb…

windigo ::

BRBR je izjavil:

alora nekaj, kar slućajno vem da ni nič (ali skoraj gotovo nič) (jih imam par 100 v eni tabeli), hočem primerjat z eno tabelo (recimo milijon recordov) kjer pa so zagotovo vredu stringi.

takale ad-hoc zadeva ni vredna kakšnega igranja z zgoščevanjem, to bi imelo smisel kvečjemu, če rabiš dati uporabniku trenutne povratne informacije, recimo ob vnosu, tako pa poženeš direkt levenstheina na celi miljonski tabeli enkrat, ko zadeva ni močno obremenjena, naslednje jutro preveriš rezultate, pa je.

BRBR ::

double metaphone


Double metaphone, za obe besedi ločeno z vejico.
"Aglitheis carinata","AKL0S;ALTS,KRNT"
Kaj pomeni secondary (To naj bi bilo tisto za';') ?

Zgodovina sprememb…

  • spremenil: BRBR ()

windigo ::

double metaphone ti izračuna do dve zgoščevalni oznaki za posamezno besedo, zaradi različnih črkovanj v različnih jezikih (v tvojem primeru ali je g v aglitheis tih je zgošč. oznaka ALTS, če se g izgovarja in je oznaka AKLOS, pri carinata teh razlik ni in je edina oznaka KRNT), pri nas smo uporabili ujemanje po katerikoli oznaki za identificiranje kandidata.

Nekako takole (primer je treba še popraviti, da ne bo ujemanja v null vrednosti, če imaš za besed samo en metaphone):
select originaltable.* from words word1 innerjoin words word2 on word1.foreignkey = word2.foreignkey inner join originaltable on word1.foreignkey = originaltable.key
where (word1.metaphone1 = @word1metaphone1 or word1.metaphone2 = @word1metaphone1 or word1.metaphone1 = @word1metaphone2 or word1.metaphone2 = @word1metaphone2)
and (word2.metaphone1 = @word2metaphone1 or word2.metaphone2 = @word2metaphone1 or word2.metaphone1 = @word2metaphone2 or word2.metaphone2 = @word2metaphone2)
and word1.ordinal +1 = word2.ordinal;


Indeksiraš, potem po potrebi query še optimiziraš, čez kandidate poženeš levenstheina in tudi pri miljonskih tabelah se da dobiti odziv v redu nekaj sto milisekund za približno iskanje.

Zgodovina sprememb…

  • spremenilo: windigo ()

BRBR ::

Ali lahko sprobaš tole, kaj izračuna pri tebi.

http://www.atomodo.com/code/double-meta... (link trenutno mrtev, ima pa mysql varianto double metaphone)
opt.: https://github.com/AtomBoy/double-metap...
Orchestria
ARKSTR
Orchestia
ARKSX

http://swoodbridge.com/DoubleMetaPhone/...
Orchestria
ARKS
Orchestia
ARKS

Zgodovina sprememb…

  • spremenil: BRBR ()

windigo ::

Sistem za katerega smo to pred mnogimi leti naredili je že nekaj časa v pokoju in ga ne bi oživljal. Koda za to je napisana v VBScriptu, ker se je poizvedbe delalo v ASP in pa celo v Outlookovem formularju (kjer je bil VBScript edina opcija). Sem pa poiskal kodo v starem repositoryju.

Download for 48 hours.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[mySQL] Vrstni red iskanja

Oddelek: Programiranje
91377 (1287) DeeJay
»

pc nov ali po delih?? (strani: 1 2 )

Oddelek: Kaj kupiti
854389 (3397) demon#666
»

Word 2007 nekaj zadev

Oddelek: Programska oprema
63690 (3513) StratOS
»

Nov prototipni lovec kinomatografskih piratov (strani: 1 2 )

Oddelek: Novice / Znanost in tehnologija
538343 (6363) BigWhale
»

Collision detection

Oddelek: Programiranje
81924 (1676) Senitel

Več podobnih tem