Sep.04

Fonetisch ("klinkt als") zoeken

loep.jpg’t is al weer even geleden na een heerlijke vakantie in Frankrijk hoop ik weer wat frequenter artikeltjes te plaatsen.

Misschien herken je het probleem. Je wilt zoeken op een persoon met een bepaalde naam maar was het nu “Kees” of “Cees” en Janssen, Jansen, Jensen of Johnson. Dit probleem is op te lossen met een fonetisch zoek algoritme. Er zijn genoeg bedrijven die hier in het bijzonder in zijn gespecialiseerd. Als “arme” developer moet je dan echter je baas zover zien te krijgen met zo’n partij in zee te gaan en dat is voor simpele zaken als een intranet zoekfunctie niet altijd haalbaar. Geen nood, ik kwam er achter dat er meerder open source algoritmen bestaan voor dit probleem. Een van de betere tot nu toe is het zogenaamde Double Metaphone algoritme van Lawrence Phillips.

De werking komt in feite neer op het vastleggen van een fonetische primaire en een alternatieve sleutel voor een bepaald woord. Deze sleutel is maximaal 4 karakters lang en bestaat alleen uit medeklinkers. Zo is de primaire sleutel van de naam “Snoei”, “SN” en de alternatieve sleutel “XN”. De namen “Snoo”, “Snoeij” en “Snoey” hebben exact dezelfde sleutels en worden bij het fonetisch zoeken ook als resultaat meegenomen. De sleutel van een woord kunnen via het algoritme van Lawrence razendsnel worden vastgesteld. Een praktische implementatie zou zijn dat je in een database voor elk te zoeken woord de fonetische sleutels vaststeld. Bij het daadwerkelijk zoeken worden de fonetische sleutels vastgesteld van de zoekterm en deze worden middels een query tegen de database aangehouden.

Meer over de werking van het algoritme is te vinden het 6-delige artikel Implement Phonetic (“Sounds-like”) Name Search With Double Metaphone. In dit artikel worden een aantal implementaties ter beschikking gesteld voor ASP, VB Script, C++ maar ook voor C# verder zijn er diverse interessante links te vinden met betrekking tot fonetisch zoeken.

Deel dit Verhaal:
  • facebook
  • twitter
  • gplus

Over Ton Snoei

Een enthousiaste ontwikkelaar in de allerbreedste zin van het woord.

Het aansturen maar vooral coachen van mensen geeft me veel plezier en een leuke uitdaging. Ik houdt me graag bezig met het bouwen van software maar ook met alle anderen dingen die komen kijken bij het vak dat IT heet.

Met als achtergrond ontwikkelaar heb ik veel ervaring met C# .NET en alles wat daarbij komt kijken. Deze kennis komt nog regelmatig goed van pas. Mijn liefde voor ontwikkeling van software is nooit verdwenen en heb mij daarom in het afgelopen jaar meer verdiept in Java, Android, iOS/iPhone/iPad (Monotouch/Xamarin), PHP en Unity 3D development. Ik noem dat altijd maar: "Lego-spelen voor grote mensen" ;-)

Kortom van de grote lijnen naar projecten tot hands-on problem solven.

Laat een reactie achter

Comment