[mysql] rijen die ongeveer gelijk aan elkaar zijn

Pagina: 1
Acties:

  • BKJ
  • Registratie: April 2000
  • Laatst online: 16-04 16:06
In PHP heb je de functie levenstein die kijkt in hoeverre een string met een andere string overeenkomt. Dat werkt in principe goed.

Nu kan ik dit ook gebruiken om bv rijen te checken uit een tabel die overeenkomen in een kolom. Helaas wordt het dan heel omslachtig. Heeft MySQL daar geen ingebouwde functie voor? Ik heb het niet kunnen vinden op mysql.com....

Kamer huren


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Soundex misschien?
Kun je iets specifieker zijn wat je wil?

[ Voor 76% gewijzigd door RobIII op 11-06-2005 17:00 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • BKJ
  • Registratie: April 2000
  • Laatst online: 16-04 16:06
RobIII schreef op zaterdag 11 juni 2005 @ 16:59:
Soundex misschien?
Kun je iets specifieker zijn wat je wil?
Ik heb een kolom met clubnamen, probleem is alleen dat niet iedereen dezelfde manier gebruikt om de naam op te slaan.

Voorbeeld:

Man. Utd
Manchester United
Manchester Utd.
Man. United

Nu wil ik toch deze allemaal kunnen selecten op basis van een zekere mate van overeenkomst.... Of SOUNDEX daar geschikt voor is weet ik niet, levenstein in PHP is bijvoorbeeld al een betere oplossing... maar deze blijft omslachtig...Is er een quick way in mysql hiervoor? Of heeft iemand hier een idee over?

Kamer huren


Verwijderd

Correcte namen afdwingen misschien?

Als iemand Abracadabra hetzelfde vindt als simsalabim zal een routine al a soundex dat nooit vinden. Ook bv Man U en Manchester United hebben bar weinig met elkaar gemeen. Je kan dan ook niet verwachten dat je database even op magische wijze weet dat het gelijk aan elkaar is.

  • BKJ
  • Registratie: April 2000
  • Laatst online: 16-04 16:06
Verwijderd schreef op zaterdag 11 juni 2005 @ 18:57:
Correcte namen afdwingen misschien?

Als iemand Abracadabra hetzelfde vindt als simsalabim zal een routine al a soundex dat nooit vinden. Ook bv Man U en Manchester United hebben bar weinig met elkaar gemeen. Je kan dan ook niet verwachten dat je database even op magische wijze weet dat het gelijk aan elkaar is.
Laten we voorop stellen dat ik de juiste spelling niet kan afdwingen. (zie ook mijn andere topic in PW van gisteren)

Daarbij ga ik ervan uit dat Man U en Manchester United méér op elkaar lijken dan Man U en PSV om maar even een zijweg te noemen. Meestal is er 60 to 100% overeenkomst om te concluderen dat het om dezelfde gaat....

Kamer huren


  • Anders
  • Registratie: December 2000
  • Laatst online: 21-03 19:17
En wat is "Manc"? MANCester united of MANchester City? En is "SpaR" "Sparta Rotterdam" of Sparta Praag? Daar kun je niks mee aanvangen.

Aangezien het om een beperkt aantal clubs gaat lijkt het me verstandiger om van elke club een aantal aliassen in je database te zetten. Zal je bij elkaar misschien een paar uur kosten en scheelt je een hoop onzekerheid.

Ik spoor veilig of ik spoor niet.


  • BKJ
  • Registratie: April 2000
  • Laatst online: 16-04 16:06
Anders schreef op zondag 12 juni 2005 @ 10:18:
En wat is "Manc"? MANCester united of MANchester City? En is "SpaR" "Sparta Rotterdam" of Sparta Praag? Daar kun je niks mee aanvangen.

Aangezien het om een beperkt aantal clubs gaat lijkt het me verstandiger om van elke club een aantal aliassen in je database te zetten. Zal je bij elkaar misschien een paar uur kosten en scheelt je een hoop onzekerheid.
Ik heb ook nog de tegenstander in de DB. Dus de kans is klein dat de beide tegenstanders van manc ( :) ) ook nog op elkaar lijken....

Kamer huren


  • sju
  • Registratie: Juni 2000
  • Laatst online: 21-05-2025

sju

rrradio

Anders schreef op zondag 12 juni 2005 @ 10:18:
En wat is "Manc"? MANCester united of MANchester City? En is "SpaR" "Sparta Rotterdam" of Sparta Praag? Daar kun je niks mee aanvangen.

Aangezien het om een beperkt aantal clubs gaat lijkt het me verstandiger om van elke club een aantal aliassen in je database te zetten. Zal je bij elkaar misschien een paar uur kosten en scheelt je een hoop onzekerheid.
Maar je kunt het ook zo maken dat bij een vermoedelijke match (bv > 50% zekerheid) je de gebruiker de vermoedelijke match voorschoteld. Deze kan dan kiezen of dit inderdaad de club is die hij bedoelde, of dat het echt een nieuwe club is.

Het is dus weldegelijk handig om een functie te hebben die kan matchen (en het liefst met een match-percentage). Helaas weet ik die niet voor mysql of php, maar ik denk wel dat deze bestaat :)

blaat? BLAAAAAAAAT!


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
sju schreef op maandag 13 juni 2005 @ 03:10:
[...]


Maar je kunt het ook zo maken dat bij een vermoedelijke match (bv > 50% zekerheid) je de gebruiker de vermoedelijke match voorschoteld. Deze kan dan kiezen of dit inderdaad de club is die hij bedoelde, of dat het echt een nieuwe club is.

Het is dus weldegelijk handig om een functie te hebben die kan matchen (en het liefst met een match-percentage). Helaas weet ik die niet voor mysql of php, maar ik denk wel dat deze bestaat :)
Je zou met behulp van de Soundex functie die ik eerder noemde de waarschijnlijke matches eruit kunnen halen en die in een dropdown weergeven ofzo. Maar, zoals ook al aangegeven is, er dient toch enige vorm van structuur in aangebracht te worden als je wil dat dit gaat werken. Anders kan ik net zo goed "die club uit engeland" invullen en dan maar verwachten dat 't ding begrijpt welke ik bedoel. Da ga nie lukke :P

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • RickyHeijnen
  • Registratie: Maart 2005
  • Laatst online: 30-04-2025
hitchhacker schreef op zaterdag 11 juni 2005 @ 16:58:
In PHP heb je de functie levenstein die kijkt in hoeverre een string met een andere string overeenkomt. Dat werkt in principe goed.
Hoe ziet die functie eruit? Misschien als ik dat zie, dat ik dan ook wel een oplossing voor in MySQL weet...

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

rheijnen schreef op maandag 13 juni 2005 @ 18:57:
Hoe ziet die functie eruit? Misschien als ik dat zie, dat ik dan ook wel een oplossing voor in MySQL weet...
http://nl2.php.net/levenshtein :P

Overigens vind ik ook dat je met dit soort dingen op moet passen. In het kader van gebruikersvriendelijkheid kun je het gebruiken ("Geen matches gevonden voor 'Mancheter Untied', bedoelde u 'Manchester United'?"), maar je kan IMO geen keuzes gaan maken op basis van wat zo'n script je vertelt. Bovendien is de Levenshtein-afstand tussen Man. Utd. en Manchester United zo groot, dat je script de overeenkomst waarschijnlijk niet eens zal zien. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • BKJ
  • Registratie: April 2000
  • Laatst online: 16-04 16:06
-NMe- schreef op maandag 13 juni 2005 @ 19:22:
[...]

http://nl2.php.net/levenshtein :P

Overigens vind ik ook dat je met dit soort dingen op moet passen. In het kader van gebruikersvriendelijkheid kun je het gebruiken ("Geen matches gevonden voor 'Mancheter Untied', bedoelde u 'Manchester United'?"), maar je kan IMO geen keuzes gaan maken op basis van wat zo'n script je vertelt. Bovendien is de Levenshtein-afstand tussen Man. Utd. en Manchester United zo groot, dat je script de overeenkomst waarschijnlijk niet eens zal zien. :)
Om jullie een beetje op de hoogte te houden heb ik nu de volgende code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$query = "SELECT * FROM soccer ORDER BY id ASC";
$resultaat = mysql_query($query);

while($obj =  mysql_fetch_object($resultaat)){


$query2 = "SELECT * FROM soccer WHERE id > '$obj->id' ORDER BY id ASC";
$resultaat2 = mysql_query($query2);

while($obj2 =  mysql_fetch_object($resultaat2)){

     similar_text($obj->thuis."".$obj->uit, $obj2->thuis."".$obj2->uit, $p) ;
     if ($p > 80) {echo "<br>".$obj2->thuis." - ".$obj->uit."<br>".$obj2->thuis." - ".$obj2->uit."<br>";}

    
    
    }

    
}


Zoals je ziet heb ik levenshtein en soundex losgelaten en heb een soort combined string gevormd die zich uitermate goed laat meten met similar_text. 80% is een erg goeie ondergrens voor matches.

Probleem is nu een methode om precies die te krijgen die bijelkaar horen en verderop bij langskomen niet meer mee te nemen.

Iemand hier een idee over?

[ Voor 19% gewijzigd door BKJ op 13-06-2005 19:40 ]

Kamer huren


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

offtopic:
Waarom doe je dit?
PHP:
1
$obj->thuis."".$obj->uit
Waarom die lege string ertussen? Je kan toch net zo goed gewoon alleen thuis aan elkaar concatten?
PHP:
1
$obj->thuis.$obj->uit

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • BKJ
  • Registratie: April 2000
  • Laatst online: 16-04 16:06
-NMe- schreef op maandag 13 juni 2005 @ 19:46:
offtopic:
Waarom doe je dit?

[...]

Waarom die lege string ertussen? Je kan toch net zo goed gewoon alleen thuis aan elkaar concatten?
PHP:
1
$obj->thuis.$obj->uit
offtopic:

Daar stond eerst wat anders en ik ben lui.. :D

Kamer huren

Pagina: 1