[ALG]Algoritme om alle voorletters achterin te krijgen

Pagina: 1
Acties:
  • 486 views sinds 30-01-2008
  • Reageer

  • ErikRo
  • Registratie: Juni 2001
  • Laatst online: 07-03 23:42
Wij krijgen een bestand met 18.000 namen die we nodig hebben voor koppelingen. Heel leuk alleen is dat bestand zo slecht gevuld dat de dat het tegelijkertijd zo goed als waardeloos is.

Wat is namelijk het geval de namen worden blijkbaar door iedereen ingebracht en zijn de ene keer echte namen en de andere keer gebouwsnamen en ze staan allemaal in één veld.
Wat is het eindresultaat?

A.B.C. de Graaf-Boer
ABC de boer
A. Karper
Graaf-Boer, A.B.C. de
Shell Olie

Bestaan er slimme algoritmen om de namen voorin te krijgen en voorletters achterin? Eventueel punten tussen de hoofdletters zetten als dat niet het geval is.

Dus:
Graaf-Boer, A.B.C de
Karper, A
Boer, A.B. de
Shell Olie

Sorry dit is een onzin vraag, het moet natuurlijk zijn is de naam ontleden en in 3 velden stoppen indien mogelijk, namelijk voorletters, voorvoegsels en achternaam cq naam.

Iemand hier al eens mee te maken gehad? De externe partij opvoeden hebben we al opgegeven.

[ Voor 4% gewijzigd door ErikRo op 10-08-2005 20:29 ]

"I don't have any solution but I certainly admire the problem." -- Ashleigh Brilliant


  • nightowl
  • Registratie: April 2002
  • Laatst online: 14-03-2009

nightowl

always too early to sleep

Ik verwacht toch dat het opvoeden vaan de externe partij je enige echte mogelijkheid is. Daarnaast is het ook het best om het probleem aan de bron aan te pakken. Wat jij wil doen is symptoombestrijding. Denk aan namen zoals Jan Jansen, Willem Willems etc. Als de externe partij zo random je data ingeeft moet je er ook rekening mee houden dat men niet voorletters maar voornamen in geeft. Een algorithme om de entry gedeeltelijk te verbeteren zal nog wel lukken maar een algorithme werkt in het algemeen voor/op een homogene massa/situatie en daarvan is in de door jou geschetste situatie geen sprake van.

De tijd die je nodig hebt om de externe partij op te voeden is waarschijnlijk korter dan de ontwikkeltijd van een werkend en betrouwbaar algorithme.

Succes

Ik pas in mijn jas. Mijn jas past in mijn tas. Dus ik pas in mijn tas.


  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Hier kan je toch al een heleboel informatie uithalen?
A.B.C. de Graaf-Boer
de / van / van der / 't en dergelijke zijn tussenvoegsels. Alles na het tussenvoegsel is achternaam, alles ervoor is voorletters. Hier de voorletters splitsen op punten.
ABC de boer
Die werkt hier dus ook. Je moet de voorletters alleen even splitsen zonder punten. Eigenlijk kan je gewoon alle crap dat geen letter is weggooien, en daarna alleen de letters splitsen.
A. Karper
Als het uit twee delen bestaat, dan is de eerste voorletters, en de tweede achternaam.
Graaf-Boer, A.B.C. de
Als er een komma in zit, staat de achternaam vooraan, daarna voorletters en daarna tussenvoegsel.
Shell Olie
Zie twee regels terug, de eerste is voorletters en de tweede achternaam. Maar in dit geval duiden de kleine in het eerste deel erop dat het een hele naam is, en geen afkorting.


Ik denk dat je met deze regels al een heleboel zou kunnen fixen. Als je een testlijstje neemt van, zeg, 100 namen kan je dat gemakkelijk uitproberen. Je moet alleen deze regels even in de juiste volgorde zetten en programmeren, maar dat kan niet zo moeilijk zijn :).

Problemen krijg je met deze regels bijvoorbeeld bij de volgende namen :

jan jansen

Eerste zijn voorletters, tweede is achternaam. Maar bij de voorletters filter je eigenlijk de kleine letters eruit, dus dat gaat hier mis. Dan moet je iets verzinnen als 'wanneer de eerste letter klein is, is het altijd een naam' oid...

maar dan zit je weer met

JAN JANSEN

Enzovoorts ;)

Verwijderd

eamelink schreef op woensdag 10 augustus 2005 @ 20:49:
de / van / van der / 't en dergelijke zijn tussenvoegsels. Alles na het tussenvoegsel is achternaam, alles ervoor is voorletters. Hier de voorletters splitsen op punten.
Niet als iemand zn naam invoert als

De Groot, Jan of De Groot, J.

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 23:21

ripexx

bibs

Op mijn werken maken we gebruik van de software van Human Inference, onze applicatie gebruikt de output dan weer om het op de juiste plaatsen in te voeren. Zeer handig en het voorkomt heel veel foutieve invoer. Alleen is het prijs kaartje niet niks ;)

Voor een import deel is er een stuk geschreven wat volgens een aantal basis regels zaken probeert te splitsen maar dat is ook niet fail safe. Het is en blijft een kwestie van slim de verschillende onder delen te splitsen. Maar namen als Jan Willem Jansen zijn best lastig en dan heb je het niet eens over meisjesnamen. Voorletters kan je vrij eenvoudog achterhalen als er netjes puntjes worden gebruikt maar dat is blijkbaar ook niet altijd het geval.
ErikRo schreef op woensdag 10 augustus 2005 @ 20:28:
Sorry dit is een onzin vraag, het moet natuurlijk zijn is de naam ontleden en in 3 velden stoppen indien mogelijk, namelijk voorletters, voorvoegsels en achternaam cq naam.
Nou als je het goed wil doen heb je aan drie velden echt niet genoeg. (Voorletters, roepnaam, tussenvoegsel, achtenaam, voorvoegsels, achtervoegsels, titels, meisjesnamen enz enz.)
Iemand hier al eens mee te maken gehad? De externe partij opvoeden hebben we al opgegeven.
Sorry maar het moet wel een heel speciaal geval zijn wil je hiervoor betalen.

buit is binnen sukkel


  • André
  • Registratie: Maart 2002
  • Laatst online: 28-04 11:43

André

Analytics dude

Je kunt voor de meest voor de hand liggende zaken een algoritme verzinnen om daarna alleen de uitzonderingen uit te zoeken (eventueel handmatig).

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 23:13

alienfruit

the alien you never expected

Je kan natuurlijk ook een stagair inhuren, die het voor een habbekrats aanpast en/of controleert.
Als nacontrole na zo'n filter/algoritme bijvoorbeeld...

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 25-04 11:59

TrailBlazer

Karnemelk FTW

wat ik eerst zal doen is alles is alle velden splitsen op basis van spaties.
Vervolgens kijken wat elk onderdeel van een veld is. Je hebt dan 3 mogelijkheden
  1. tussenvoegsel
  2. initialen
  3. naam
is het een tussenvoegsel -> achteraan plaatsen.
Tussenvoegsels zal je met het handje moeten definieren. Zoveel zijn dit er niet denk aan
  • de
  • den
  • van
zijn het initialen -> ertussen in gooien
regex van perl kan je helpen
de rest zal een naam zijn en blijft inde huidige volgorde staan. Zelfde geldt voor tussenvoegsels.
Met Perl kan je denk ik een heel eind komen

  • Ciqniz
  • Registratie: Oktober 2002
  • Laatst online: 07-09-2023

Ciqniz

On the move...

Maar,

Jan Jansen
Jansen Jan

Wie bepaald welke in de juiste volgorde staat? Kortom, het is vrijwel onmogelijk, je kunt een eind komen, maar nooit all the way.

Dit had je goed moeten laten gaan terwijl de input door de gebruiker ingevoerd wordt. Dat valideren, en dan in de juiste velden zetten (vanuit meerdere velden, náár meerdere velden).

Dit gaat gewoon niet meer goedkomen.

Je kunt een overbrugging maken, als de gebruikers bijvoorbeeld moeten inloggen. Dwing ze om hun gegevens opnieuw in te voeren voor dat ze verder gaan. Maar dan wel op zo'n manier dat het nu wel 'clean' gaat gebeuren. Na een tijdje gebruik je deze data standaard.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Heb je al nagedacht over de steeds grotere hoeveelheid allochtonen? Dat maakt het nog moeilijker. Zelfs Spanjaarden zijn een probleem (2 achternamen). Bovendien is het cultureel bepaald waar voorvoegsels horen. In veel landen zijn "voorvoegsels" gewoon onderdeel van de achternaam.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 25-04 11:59

TrailBlazer

Karnemelk FTW

KreaToh schreef op donderdag 11 augustus 2005 @ 08:28:
Maar,

Jan Jansen
Jansen Jan

Wie bepaald welke in de juiste volgorde staat? Kortom, het is vrijwel onmogelijk, je kunt een eind komen, maar nooit all the way.

Dit had je goed moeten laten gaan terwijl de input door de gebruiker ingevoerd wordt. Dat valideren, en dan in de juiste velden zetten (vanuit meerdere velden, náár meerdere velden).

Dit gaat gewoon niet meer goedkomen.

Je kunt een overbrugging maken, als de gebruikers bijvoorbeeld moeten inloggen. Dwing ze om hun gegevens opnieuw in te voeren voor dat ze verder gaan. Maar dan wel op zo'n manier dat het nu wel 'clean' gaat gebeuren. Na een tijdje gebruik je deze data standaard.
klopt naja je kan een 1e schifting doen op deze manier daarna een stagiar (ge)/(mis)bruiken :p

  • netiul
  • Registratie: December 2001
  • Laatst online: 02-05 14:00
Zelfs voor een stagiair is het niet duidelijk of het nu Jan Jans is of Jans Jan ;)

  • Ciqniz
  • Registratie: Oktober 2002
  • Laatst online: 07-09-2023

Ciqniz

On the move...

Replicator schreef op donderdag 11 augustus 2005 @ 11:12:
Zelfs voor een stagiair is het niet duidelijk of het nu Jan Jans is of Jans Jan ;)
Exact. Dat is het hele idee.
Stel iemand geeft op "Li Hu" (Chinees). Heet ie dan "Hu Li" of "Li Hu"? Als jij dat al niet kan weten, dan kan software het onmogelijk weten!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

KreaToh schreef op donderdag 11 augustus 2005 @ 08:28:
Maar,

Jan Jansen
Jansen Jan

Wie bepaald welke in de juiste volgorde staat? Kortom, het is vrijwel onmogelijk, je kunt een eind komen, maar nooit all the way.
Maar ik denk dat er op 18000 mensen echt maar hééél weinig mensen zijn die eerst hun achternaam en dan hun voornaam neerzetten zónder een komma ertussen te zetten.

  • ErikRo
  • Registratie: Juni 2001
  • Laatst online: 07-03 23:42
Thanks ik reageer wat later dan gepland. Wij "lenen" het bestand om nze eigen gegevens te verijken. Omdat er verder geen relatie is tussen onze bedrijven is de kans klein dat ze zin hebben hun werkwijze aan te passen. Ze zijn namelijk nooit met iets flexibel geweest :-)
Maar we gaan wel wat wijzigsverzoeken sturen dus wie weet over een jaar ....

Aanpassen aan de hand van regels zal idd een flinke kluif worden en nooit 100% volledig of goed zijn. Er blijken nog veel meer viarianten te zijn. Bv in bedrijfsnamen.
Advocatenkantoor xyz makkelijk zou zijn xyz, advocatenkantoor
Apotheek de vreemde Aker makkelijker zou zijn ??? Aker, de vreemde, apotheek
Bij beide zou het misschien handiger zijn geweest als ze advocatenkantoor en apotheek niet in de naam hadden gezet. Alhoewel ik niet weet of het bedrijf daar altijd blij mee is, want misschien is het beroep wel onderdeel van de naam cq de aanhef in bv een brief.
Anderen hebben wel weer het beroep achteraan.

Dan hebben we het idd niet over li hu of hu li en jan jansen

Heb nog wat gevonden over bepaalde schrijfregels bij bedrijven en instellingen, maar die spreken elkaar soms tegen waardoor ik zelf ook niet altijd zou weten hoe iets officieel te schrijven. Kortom toch een lastigere klus dan ik had gedacht in de eerste instantie, moet ik nu toegeven
Maar ik denk dat er op 18000 mensen echt maar hééél weinig mensen zijn die eerst hun achternaam en dan hun voornaam neerzetten zónder een komma ertussen te zetten.
Het zijn niet 18000 mensen maar een groepje die gezamelijk een IQ van 100 lijken te hebben gezien de vulling, er is en er wordt gewoon niet over nagedacht.

[ Voor 12% gewijzigd door ErikRo op 11-08-2005 20:33 ]

"I don't have any solution but I certainly admire the problem." -- Ashleigh Brilliant


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 18:51

Tomatoman

Fulltime prutser

Je zult hoe dan ook tegen een probleem oplopen dat je met de database niet kunt oplossen en dat alleen in het Nederlands optreedt: een spelprobleem. De regel is als volgt:

Bij een persoonsnaam wordt het eerste tussenvoegsel met hoofdletter geschreven als de voornaam geheel achterwege blijft. Het eerste tussenvoegsel wordt met een kleine letter geschreven als het vooraf wordt gegaan door een voornaam of voorletter(s).

Aanheffen en titels veranderen hier niets aan. Voorbeelden:

Van der Veer
de heer Van der Veer
Drs. Van der Veer
Jan van der Veer (er staat nu een voornaam voor van)
J. van der Veer (er staat nu een voorletter voor van)
J.A. van der Veer
de heer J.A. van der Veer

Uitzondering zijn straatnamen waar de naam niet volgens deze regel is gespeld, meestal omdat de gemeenteambtenaar die de naam verzon de spelregels niet goed kende. Zo zou de Burgemeester van der Veerstraat zou volgens de regels eigenlijk Burgemeester Van der Veerstraat moeten heten, maar als hij bij het Kadaster bekend is met een kleine letter v, houd je die gewoon aan en stuur je de Dienst Stadsbeheer een briefje dat ze hun ambtenaar een spelcursus moeten laten volgen. :P

Het voorgaande heeft niets met programmeren te maken, maar ik meld het toch maar omdat het vaker fout dan goed gaat. :)

Een goede grap mag vrienden kosten.


  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 25-04 11:59

TrailBlazer

Karnemelk FTW

werk hier overignes bij een internationaal bedrijf en ik moet ook regelmatig naar het e-mail adres kijken wat nu de voor en achternaam is en waar deze ophoudt :p

  • ErikRo
  • Registratie: Juni 2001
  • Laatst online: 07-03 23:42
tomatoman schreef op donderdag 11 augustus 2005 @ 23:37:
Je zult hoe dan ook tegen een probleem oplopen dat je met de database niet kunt oplossen en dat alleen in het Nederlands optreedt: een spelprobleem. De regel is als volgt:

Bij een persoonsnaam wordt het eerste tussenvoegsel met hoofdletter geschreven als de voornaam geheel achterwege blijft. Het eerste tussenvoegsel wordt met een kleine letter geschreven als het vooraf wordt gegaan door een voornaam of voorletter(s).

Aanheffen en titels veranderen hier niets aan. Voorbeelden:

Van der Veer
de heer Van der Veer
Drs. Van der Veer
Jan van der Veer (er staat nu een voornaam voor van)
J. van der Veer (er staat nu een voorletter voor van)
J.A. van der Veer
de heer J.A. van der Veer

Uitzondering zijn straatnamen waar de naam niet volgens deze regel is gespeld, meestal omdat de gemeenteambtenaar die de naam verzon de spelregels niet goed kende. Zo zou de Burgemeester van der Veerstraat zou volgens de regels eigenlijk Burgemeester Van der Veerstraat moeten heten, maar als hij bij het Kadaster bekend is met een kleine letter v, houd je die gewoon aan en stuur je de Dienst Stadsbeheer een briefje dat ze hun ambtenaar een spelcursus moeten laten volgen. :P

Het voorgaande heeft niets met programmeren te maken, maar ik meld het toch maar omdat het vaker fout dan goed gaat. :)
Toch zeer nuttige info waarvoor bedankt. Want ik kende deze regels niet (meer) en dus wseer wel :)

"I don't have any solution but I certainly admire the problem." -- Ashleigh Brilliant

Pagina: 1