Soundex? Klinkt als... ?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Paul Ulje

Paul Ulje

28/10/2016 14:46:19
Quote Anchor link
Als ik zoek naar een 'klink als..' filtering in PHP kom ik terecht bij soundex().
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
 
PHP hulp

PHP hulp

24/12/2024 17:14:36
 
Ozzie PHP

Ozzie PHP

28/10/2016 15:25:07
Quote Anchor link
Even googlen levert dit op:

https://github.com/Haran/BMDMSoundex

"Currently there are 16 languages supported: Czech, Dutch, English, French, German ..."
 
Ward van der Put
Moderator

Ward van der Put

28/10/2016 15:59:34
Quote Anchor link
Je kunt vrij gemakkelijk goede resultaten boeken als je 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.
 
Pg Vincent

Pg Vincent

28/10/2016 16:52:10
Quote Anchor link
Zoeken is een kunst, geen wetenschap. Soundex klinkt leuk in theorie maar in de praktijk zoek je niet naar woorden die hetzelfde klinken. Je zoekt naar woorden die *hetzelfde* zijn als de opgegeven zoekterm, met het toegevoegde probleem dat de zoekterm spelfouten kan bevatten.

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.
 
Paul Ulje

Paul Ulje

30/10/2016 16:37:27
Quote Anchor link
Dank voor de tips.

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.
 
Pg Vincent

Pg Vincent

30/10/2016 16:59:32
Quote Anchor link
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.
 
Paul Ulje

Paul Ulje

30/10/2016 17:21:41
Quote Anchor link
Programmeren is een liefhebberij voor mij.
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.
 
Pg Vincent

Pg Vincent

30/10/2016 19:02:35
Quote Anchor link
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?
 



Overzicht Reageren

 
 

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.