Soundex? Klinkt als... ?
http://php.net/manual/en/function.soundex.php
De gebruikersbijdragen daaronder tonen eigen functies voor het Duits en het Frans.
Heeft iemand een hint of link van een poging van zoiets voor het Nederlandse taalgebied?
Of wellicht een hint voor een modernere/betere oplossing voor het Nederlands?
Gewijzigd op 28/10/2016 15:04:40 door Paul Ulje
https://github.com/Haran/BMDMSoundex
"Currently there are 16 languages supported: Czech, Dutch, English, French, German ..."
soundex() combineert met levenshtein() voor het sorteren. Net zoals soundex() is levenshtein() geschikt voor zoekopdrachten van het type 'lijkt op'.
Soundex geeft ook voor Nederlands vaak goede resultaten omdat bijvoorbeeld de fout 'brantweer' en de correctie 'brandweer' in het Engels hetzelfde klinken.
Je kunt vrij gemakkelijk goede resultaten boeken als je Soundex geeft ook voor Nederlands vaak goede resultaten omdat bijvoorbeeld de fout 'brantweer' en de correctie 'brandweer' in het Engels hetzelfde klinken.
Mijn aanpak in zoekmachines is dan ook om eerst een lijst aan te leggen van woorden die in de te-doorzoeken dat staan, en de opgegeven zoekterm daarmee te vergelijken.
- Als er in de zoekterm woorden staan die niet in de doeldata voorkomen dan hoef je daar ook niet op te zoeken.
- Als woorden in de zoekterm wel voorkomen in een iets andere spellen (het woord verschilt 1-2 tekens in lengte en/of levenshtein zegt dat er 1-2 tekens verschillen) dan stel je de gebruiker voor "bedoelde u soms ....".
- Wat overblijft is een zoekterm die zinnig is voor de data, en dan kan FULLTEXT het prima aan (nee, niet de fulltext van MySQL, die is ruk, ik bedoel de fulltext van PostgreSQL).
Maar maak het jezelf niet te moeilijk, er zijn kant en klare zoeksystemen, zoals die van elasticsearch, die hebben al dit geneuzel al uitgezocht en werken prima.
BMDM: "Currently there are 16 languages supported: Czech, Dutch, English, French, German ..."
Helaas kan ik de taaltabellen niet vinden, die liggen volgens de broncode in een onderliggende directory...
En ook bij de overige 75.400 resultaten voor soundex dutch php vond ik zo snel niks bruikbaars. :-(
Elasticsearch blijkt (lijkt?) een enorm pakket, iets teveel van het goede.
Levenshtein kende ik niet. Ga ik uitproberen.
Nogmaals dank.
Bak ik er wat van, dan zal ik het laten weten.
Quote:
Elasticsearch blijkt (lijkt?) een enorm pakket, iets teveel van het goede.
Het punt is het waarschijnlijk langer duurt om zelf een zoekfunctie in elkaar te fietsen die ook echt zinnige resultaten geeft, dan dat het duurt om iets als elasticsearch op te zetten.
Maargoed ga je eerst verdiepen in zoektheorie, want alleen met soundex en levenhtein kom je er sowieso niet. Het ingewikkeldst aan zoeken is bepalen of een resultaat relevant is.
Het punt is dus juist om zelf iets te maken.
Hulp is daarbij vanzelfsprekend erg welkom, maar aan een 'out of the box' oplossing beleef ik geen plezier.
Nu doe ik het als volgt (nog uit mijn Clipper tijd..)
Een extra veld in de DB met een verhaspeling, die natuurlijk ook op de zoekterm wordt toegepast:
- verwijder slot n van de woorden
- verwijder alles dat geen letter is
- haal dan klinkers weg
- zet stemhebbende medeklinkers om in stemloze
- verander dubbele medeklinkers in enkele
Dat werkt voor geschreven tekst heel aardig.
Maar de klank van 'klinkt als...' zit hem juist in de klinkers :-)
Dus daar moet zoek ik nog een oplossing voor.
Uiteraard ben ik daarvoor in gesprek met taalkundigen.
Maar het zou leuk zijn als ik een voorbeeld van andere pogingen kom inzien.
Wat betekent "klinkt als" in jouw geval? Probeer je tikfouten te voorkomen of letterlijk te zoeken naar woorden die hetzelfde klinken? En hoeveel mogen ze dan verschillen om nog "hetzelfde" te zijn?