[PHP/MySQL] 'lijkt op' queries

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
Waarschijnlijk een bekend fenomeen voor de meesten, de database vol met klantgegevens die langzaam vol zit met fouten. Nou heb ik een db van de PTT met postcodes, straten, noem maar op. Als ik die tegenover de db zet zal er waarschijnlijk een hoop matchen, maar een hoop goede gegevens ook niet.

Voorbeeld:

'Burgemeester Jansenlaan' als 'Burg. Jansenlaan' schrijven. Je brief komt altijd aan (als de postcode klopt), maar het is wel een error als je matcht op de de PTT database.

Is er een methode waarmee ik dit soort bijna-matches die een mens meteen ziet kan automatiseren? Dat 80% van de naam overeen komt?

iOS developer


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Je hebt in MySQL functies als fulltext search en wellicht dat je ook nog iets met like kan doen.

Acties:
  • 0 Henk 'm!

  • RAJH
  • Registratie: Augustus 2001
  • Niet online
Je zou ook nog 'levenshtein' kunnen proberen om zo de woordafstand tussen twee woorden te bepalen. Woorden die dan veel op elkaar lijken krijgen kun je er dan uitpakken.

Acties:
  • 0 Henk 'm!

Verwijderd

Kijken hoeveel letters matchen, deze letters v-l-n-r achter elkaar zetten, en vergelijken hoeveel dit resultaat op dat in de PTT database lijkt?

Acties:
  • 0 Henk 'm!

Verwijderd

RAJH schreef op donderdag 01 maart 2007 @ 16:31:
Je zou ook nog 'levenshtein' kunnen proberen om zo de woordafstand tussen twee woorden te bepalen. Woorden die dan veel op elkaar lijken krijgen kun je er dan uitpakken.
Hoe is dit gemakkelijk toe te passen bij MySQL als je 1 zoekwoord hebt als ik vragen mag? Aangezien dat algoritme 2 woorden gebruikt waaruit de 'distance' volgt.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op donderdag 01 maart 2007 @ 16:35:
Kijken hoeveel letters matchen, deze letters v-l-n-r achter elkaar zetten, en vergelijken hoeveel dit resultaat op dat in de PTT database lijkt?
Voorbeeld:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Burgemeester Jansenlaan
en
Burg. Jansenlaan

====
Matchend: Burg Jansenlaan (84%)
====

Burg Jansenlaan
en
Burg. Jansenlaan
====
Matchend: Burg Jansenlaan (95%)

Acties:
  • 0 Henk 'm!

  • RAJH
  • Registratie: Augustus 2001
  • Niet online
Verwijderd schreef op donderdag 01 maart 2007 @ 16:35:
[...]

Hoe is dit gemakkelijk toe te passen bij MySQL als je 1 zoekwoord hebt als ik vragen mag? Aangezien dat algoritme 2 woorden gebruikt waaruit de 'distance' volgt.
Je matched het zoekwoord op een database veld en daar komt dan weer de distance uit. Er zijn wel een aantal levenshtein functies te vinden voor MySQL denk ik. Volgensmij is er voor Linux een UDF.

[ Voor 42% gewijzigd door RAJH op 01-03-2007 16:38 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Er zijn idd een aantal UDF voor MySQL te vinden die de levenshtein-distance kunnen bepalen, niet aan gedacht.

@Geqxon
Dat gaat niet op bij typefouten waar het TS het over heeft toch?

[ Voor 7% gewijzigd door Verwijderd op 01-03-2007 16:41 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op donderdag 01 maart 2007 @ 16:41:

@Geqxon
Dat gaat niet op bij typefouten waar het TS het over heeft toch?
Als het hoger dan 85% is kun je er vanuit gaan dat de twee woorden hetzelfde zijn.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op donderdag 01 maart 2007 @ 16:46:
[...]

Als het hoger dan 85% is kun je er vanuit gaan dat de twee woorden hetzelfde zijn.
Maar zoeken op pool als er loop in de database staat geeft bij jou een hoog percentage?

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op donderdag 01 maart 2007 @ 16:49:
[...]

Maar zoeken op pool als er loop in de database staat geeft bij jou een hoog percentage?
In mijn methode werk je van links naar rechts. Dus dan matched: "oo". Dat is slechts 50%, en valt erbuiten.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Waarom match je niet gewoon enkel op postcode en huisnummer? Dat is wat de ptt tnt ook doet.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
Het zijn geen FULLTEXT velden maar gewoon VARCHAR velden. Volgens mij wordt dat MATCH verhaal dan ook erg lastig.
Janoz schreef op donderdag 01 maart 2007 @ 17:03:
Waarom match je niet gewoon enkel op postcode en huisnummer? Dat is wat de ptt tnt ook doet.
Sommige adressen zijn incompleet. Wel een straatnaam, huisnummer en plaatsnaam, geen landnummer of postcode. Ik wil zo weinig mogelijk handwerk overhouden, en zo veel mogelijk adressen fixen en meenemen.

iOS developer


Acties:
  • 0 Henk 'm!

Verwijderd

Fulltext is geen veldtype maar een index die je maakt van (bijvoorbeeld) VARCHAR velden. Zie de MySQL-manual.

Acties:
  • 0 Henk 'm!

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

Ik weet niet of het handig is dat met MySQL alleen op te lossen; er bestaan talloze oplossingen die afstanden/relevantie van termen af kunnen stemmen met behulp van sequence alignment algoritmes als bijvoorbeeld smith-watermann's.
Als dat je te ver gaat moet je zo'n soort search uitoefenen _voor_ het opslaan zodat je database in ieder geval consistent is; anders is dit werkelijk een ramp om vol te houden.

Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
Verwijderd schreef op donderdag 01 maart 2007 @ 18:52:
Fulltext is geen veldtype maar een index die je maakt van (bijvoorbeeld) VARCHAR velden. Zie de MySQL-manual.
Ik ging er van uit dat het alleen mogelijk was bij de grotere text types, als dit werkt dan denk ik dat ik er wel uit ben :)
GX schreef op donderdag 01 maart 2007 @ 20:48:
Als dat je te ver gaat moet je zo'n soort search uitoefenen _voor_ het opslaan zodat je database in ieder geval consistent is; anders is dit werkelijk een ramp om vol te houden.
Er zit een groot verschil tussen 'hoe het zou moeten' en 'hoe het in de praktijk het beste is' en 'hoe het in 90% van de gevallen gaat' :+

[ Voor 38% gewijzigd door BikkelZ op 02-03-2007 08:52 ]

iOS developer


Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
Fulltext helpt niet, als je EINHOVEN in plaats van EINDHOVEN hebt dan werkt het al niet meer.

Ik kan even niets installeren op deze MySQL database, blijft dan alleen de scriptmatige oplossing over?

iOS developer

Pagina: 1