Autor Zpráva
vms
Profil *
Jakým způsobem se realizuje funkce Did you mean?

Uživatel vyhledává přes formulář něco v databázové tabulce a udělá překlep. Jak se dá naprogramovat funkce, která mu předhodí výraz bez překlepu (nebo nějakej nejpodobnější) ?

Jak se to běžně v praxi řeší?
Hugo
Profil
Toto je dost složitý problém. Můžeš například, pokud je výskyt hledaného výrazu velmi nízký nebo nulový, hledat podobné výrazy v databázi. Tady je problém s tím, jak vytvořit funkci, která je schopná ty podobné výrazy dohledat a velkou nevýhodou je to, že často to může uživateli nabídnout výraz, který je úplně mimo.

Druhou možností je dlouhodobé monitorování provozu a sledování pohybu uživatele. Pokud třeba deset uživatelů zadá výraz kopto a při dalším hledání ho opraví na kopyto, tak při dalším zadání kopto můžeš rovnou nabízet možnost Did you mean kopyto? Toto je samozřejmě náročné na čas a je to i dost těžké naprogramovat, ale výhodou je, že systém se bude postupně učit. Podobný algoritmus pravděpodobně používá google.
Joker
Profil
Jak se to běžně v praxi řeší?
Například Google myslím používá tu "statistickou" metodu, viz Hugo, první odstavec.

Taky by šlo zohlednit, jak často je daný výraz vyhledáván. Tj. nabízet výraz, který má hodně výsledků a návštěvníci ho často vyhledávají.
Hugo
Profil
Joker

Podle informací z rozhovorů s tvůrci googlu bych spíš řekl, že používá metodu monitorování pohybu uživatele, čili druhý odstavec.
Tomáš Hanus
Profil
Joker

Taky by šlo zohlednit, jak často je daný výraz vyhledáván. Tj. nabízet výraz, který má hodně výsledků a návštěvníci ho často vyhledávají.
- jenže stejně se dostaneš do situace, kdy musíš odhadnout podobný smysluplný výraz k výrazu vyhledávanému. A nabízet všechny, to je jak střílet od boku a uživatele by to akorát odradilo.
Joker
Profil
Hugo
Je to možné, tak možná moje informace nebyly úplně dokonalé.

Tomáš Hanus
jenže stejně se dostaneš do situace, kdy musíš odhadnout podobný smysluplný výraz k výrazu vyhledávanému
No jenže to vždycky.
U té první metody (Hugo, 1. odstavec) se musejí hledat výsledky podobných výrazů.
U druhé metody (Hugo, 2. odstavec) se musí zjistit, že jde o téhož návštěvníka a porovnávat, jestli je další hledaný výraz podobný tomu předchozímu.
U třetí metody (co jsem psal já) se musí hledat počet zadání podobných výrazů.
Hugo
Profil
Joker

Asi jsem to špatně napsal, ale jde o to, že systém registruje chování uživatelů (všech, není nutné nijak uživatele identifikovat) a podle zaregistrovaných opravy překlepů nabízíš uživateli podobné výrazy. Toto bude samozřejmě fungovat jen u systému, který běží delší dobu a který je hodně využívaný.
Joker
Profil
Hugo
No ale potřebuju uživatele identifikovat, abych zjistil, že ten překlep opravil.
Tj. potřebuju vědět, že konkrétní uživatel zadal například nejdřív "Koker" a potom "Joker", abych mohl zjistit, že ten uživatel opravil překlep.
Tomáš Hanus
Profil
Joker
A jak si poradis s tímto: Kotel | Hotel :D
Hugo
Profil
Joker

A jo, špatně čtu.

Tomáš Hanus

Samozřejmě žádný takový systém nefunguje bez chyb. Google taky občas nabízí ptákoviny.
Joker
Profil
Tomáš Hanus
A jak si poradis s tímto: Kotel | Hotel :D
Asi bych prostě spoléhal na to, že takových překlepů moc nebude a v nejhorším ten systém nebude dokonalý, no :)

Kdyby ten systém měl být (skoro) dokonalý, mohl by to kombinovat se slovníkem a nejlépe i s rozpoznáváním slov podle kontextu, ale naprogramovat to by nebylo tak úplně jednoduché ;-)
Tomáš Hanus
Profil
Joker
A to je ten důvod, proč volit druhou variantu, tedy kdy se systém bude učit. Pokud někdo o takové fci uvažuje, je to určitě do budoucna, proto by se vyplatilo jít cestou statistiky. Tím by se i odfiltrovaly překlepy typu HOTEL | KOTEL

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: