Zoek Suggestie

Door Nicoow Unknown, 18 jaar geleden, 5.748x bekeken

Een korte functie om zoek suggesties te maken.
Deze werkt alleen als je zoekt op tags.
Dus kan erg handig zijn voor tutorial sites, of blogs, die ook met tags werken.

Hij maakt gebruik van het Levenshtein algoritme, dit is eigenlijk degene die het echt werkt doet.

Voor de rest moeten de comments het allemaal wel duidelijk maken.

De database achter het systeem bevat momenteel maar 237 key words. dit zijn:
* Landen in het Engels.

Het config bestand laat ik buiten beschouwing, omdat dit toch geen code is die je geheel zal gaan gebruiken.
Alleen de functie kan handig zijn.

Graag al het commentaar dat jullie hebben.

EDIT 1:
MaxDistance automatisch terug naar 5, dit om beter te zoeken

EDIT 2:
Levensthein Costs geoptimaliseerd.

EDIT 3:
Nu een lijst van landen gebruikt, wel Engelstalig, maar wel een stuk groter.
Ook een klein usability foutje aangepast in de zoek functie.

Voorbeeld: http://phphulp.nicokaag.nl/zoek/index.php

Gesponsorde koppelingen

PHP script bestanden

  1. zoek-suggestie

 

Er zijn 18 reacties op 'Zoek suggestie'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Nicoow Unknown
Nicoow Unknown
18 jaar geleden
 
0 +1 -0 -1
Nog één laatste opmerking,
De standaard afwijking staat op 10, dat is vrij hoog. ik raad aan om deze bij de aanroep naar 5 te veranderen.
Het mooiste is natuurlijk als je hem van de lengte afhankelijk maakt, maar dat is aan jezelf om te beslissen.
Bart niethenk
bart niethenk
18 jaar geleden
 
0 +1 -0 -1
zal vast wel een leuk script zijn maar als ik " a " intyp krijg ik : Zoekt u soms: php?
nogal apart maar dat zal dat levenshtein wel zijn
B a s
B a s
18 jaar geleden
 
0 +1 -0 -1
Leuk script! Met zoek suggestie versta ik een AJAX autocomplete functie, maar ik zie nu wat je ermee bedoeld. Als je op 'website' zoekt komt er 'bedoelt u websites' te staan.

Hij werkt nog niet helemaal lekker. Misschien komt het omdat er spaties in zitten maar als ik zoek op 'Object Oriënted' of 'Programming' komt er niks uit..
Nicoow Unknown
Nicoow Unknown
18 jaar geleden
 
0 +1 -0 -1
Klopt, misschien nog een auto complete function.
Dit lost nu vooral nog type fouten op.
@Bart,
Dit is wel te fine-tunen.
Dan moet je een beetje spelen met de 1, 10, 1 in de levensthein functie.
De eerste 1 is de cost voor het inserten van een letter.
de 10 is voor het vervangen van een letter,
en de laatste voor het verwijderen van een.
Omdat het inserten van de hp heel weinig kost, kan hij deze suggestie vinden.
Misschien als je die op 3 zet, dat hij dan beter werkt.

Voor de rest zal ik nog een auto-complete functie proberen te schrijven.
Jaron T
Jaron T
18 jaar geleden
 
0 +1 -0 -1
Hoezo komt er met een 'a' -> 'php' op mn scherm?
Nicoow Unknown
Nicoow Unknown
18 jaar geleden
 
0 +1 -0 -1
Zoals hier boven ook al uitgelegd heeft dat te maken met de verschillende waardes die berekend worden voor insertion, deletion en replacement.
Ik zal deze even proberen fine te tunen voor een beter resultaat.

Verbeterd
Richard van Velzen
Richard van Velzen
18 jaar geleden
 
0 +1 -0 -1
Ik zou niet afgaan op de afstand maar de ratio:

lr = wl / ld

Oftewel:
levenshteinratio = lengte langst woord / levenshteinafstand
Nicoow Unknown
Nicoow Unknown
18 jaar geleden
 
0 +1 -0 -1
hoe bedoel je dat precies?
Vooral het gedeelte dat je het langste woord wilt gaan gebruiken.
Richard van Velzen
Richard van Velzen
18 jaar geleden
 
0 +1 -0 -1
Ik had het per ongeluk omgedraaid trouwens, het is lr = ld / wl

Zie het verschil:

ahp <> php === 1 (1 / 3 === 0.3333)
heellangwoord <> hellangwort === 2 (3 / 13 === 0.2308)

Ondanks dat de tweede een grotere levenshteinafstand heeft lijken de woorden toch meer op elkaar, en daarom is de levenshteinratio belangrijker dan de afstand.
Midas
Midas
18 jaar geleden
 
0 +1 -0 -1
Mooi, Nico! Bedankt voor het delen.
Nicoow Unknown
Nicoow Unknown
18 jaar geleden
 
0 +1 -0 -1
Ik heb zelf momenteel even geen tijd, morgen weer, maar die toevoeging van Van Velzen moet er wel in.
Dat geeft een nog beter resultaat.

Ik ben momenteel bezig met mijn eigen algoritme, die meer pc toetsenbord gericht typefouten zoekt.
En deze moet dan ook woorden aanvullen beter gaan doen, ik hoop deze zondag online te kunnen zetten.
(alleen als hij niet veel langzamer is als levensthein, anders heeft het weinig nut.)
Roel -
Roel -
18 jaar geleden
 
0 +1 -0 -1
Ligt het aan mij of krijg ik geen suggesties, nooit?
Nicoow Unknown
Nicoow Unknown
18 jaar geleden
 
0 +1 -0 -1
waarop zoek je precies, dan kan ik hier ook even naar kijken.
als je bijv mysqk zoekt, dan geeft hij wel mysql terug.
M Ypma
M Ypma
18 jaar geleden
 
0 +1 -0 -1
Paar puntjes:
Hij lijkt hoofdletter gevoelig:
website => geen resultaat
Website => Websites
En ook kleine typfoutjes zorgen ervoor dat er niets gevonden word terwijl je dat wel verwacht:
Websitt => geen resultaat
websitt => geen resultaat

Hij lijkt me dus iets te streng om een gebruiker ook echt daadwerkelijk te helpen
Nicoow Unknown
Nicoow Unknown
18 jaar geleden
 
0 +1 -0 -1
Bedankt,
Heb hem nu weer een stuk beter gemaakt, hoop ik.
Hij is niet meer hoofdletter gevoelig, en hij haalt type fouten er ook makkelijker uit.

Als mensen nog fouten tegenkomen met het testen, post deze dan graag hier, op de manier zoals Ypma dat gedaan heeft.
Dan kan ik het namelijk zelf ook testen.
Voor de rest zullen hier geen major changes meer in komen, omdat ik bezig ben met mij eigen algoritme.


Let trouwens wel op het feit, dat je tijdens de aanroep, ook kan aangeven wat de maximale afstand is, des te groter, des te minder streng.
(maak je hem te groot, kan hij foute resultaten opleveren.
Roel -
Roel -
18 jaar geleden
 
0 +1 -0 -1
Ah nu doet ie het wel :)
Steen
steen
18 jaar geleden
 
0 +1 -0 -1
zoeken doe je met $_GET, niet met post, dan kun je ook die suggesties linken zodat je niet zelf hoeft te typen zonder gebruik te maken van javascript.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Joris van Rijn
Joris van Rijn
18 jaar geleden
 
0 +1 -0 -1
@steen:

En ook omdat als je dan de pagina refreshed, niet een vervelende melding krijgt van data opnieuw verzenden.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. zoek-suggestie

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.