[mysql/perl] alle rijen met elkaar vergelijken

Pagina: 1
Acties:

  • BKJ
  • Registratie: April 2000
  • Laatst online: 21-05 15:04
Ik moet voor een opdracht twee strings met elkaar vergelijken dmv een algoritme.
De database bestaat uit plm. 500 rijen en ik moet voor iedere rij aangeven hoe vaak er een tekst in de database is voorgekomen die daar genoeg op lijkt. Dat betekent dus:

1 met 2, 1 met 3, 1 met 4,..., 1 met n
2 met 3, 2 met 4, 2 met 4,..., 2 met n

etc etc etc

Dit vreet echt tijd. Als ik dit limit op 10 is dit prima en gaat dit retesnel. Mis ik nu net bepaalde combinaties? Wat is de slimste manier om dit te doen? Iemand ervaring hier mee?

Kamer huren


  • RvdH
  • Registratie: Juni 1999
  • Laatst online: 12:11

RvdH

Uitvinder van RickRAID

Hoe doe je dat nu? Met een LIKE ofzo? Prepend je sql statement eens met "EXPLAIN" in een mysql console en analyseer de output.
Misschien heb je iets aan fulltext indices?

  • BKJ
  • Registratie: April 2000
  • Laatst online: 21-05 15:04
RickJansen schreef op 13 juli 2004 @ 16:28:
Hoe doe je dat nu? Met een LIKE ofzo? Prepend je sql statement eens met "EXPLAIN" in een mysql console en analyseer de output.
Misschien heb je iets aan fulltext indices?
Ik gebruik de functie van lehvenstein icm met de "longest common string" en op basis van deze twee dingen beslis ik of een tekst samenhangt met een andere tekst zo ja, dan krijgt deze tekst een punt. De tekst met de meeste punten is dan belangrijk.

[ Voor 9% gewijzigd door BKJ op 13-07-2004 16:31 ]

Kamer huren


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Kun je niet beter een cross join doen?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • BKJ
  • Registratie: April 2000
  • Laatst online: 21-05 15:04
drm schreef op 13 juli 2004 @ 16:37:
Kun je niet beter een cross join doen?
En wat is daar het voordeel van?

Kijk het gaat om het volgende (om even wat specifieker te worden):

De dingen die moeten worden vergeleken zijn onderwerpen van discussie in een forum, nu wil ik graag weten, dmv vergelijking van de onderwerpen wat er speelt. Dus ik kijk naar het 1e onderwerp, vergelijk die met de andere en geef iedere keer een punt als er overeenkomst is volgens dat algoritme. Een onderwerp met hoge punten is dus belangrijk.

Kamer huren


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

hitchhacker:
En wat is daar het voordeel van?
Dat je de database alle optimalisaties kan laten uitvoeren voor zover die van toepassing zijn, en gewoon een fulltext-search kunt gebruiken in de ON en/of SELECT clause zonder je daar in perl verder druk om te maken. Je kan volgens mij met 1 query klaar zijn als je een crossjoin gebruikt. Je moet alleen even uitvogelen hoe je dan de woorden van record a met de woorden uit record b vergelijkt.

Als dat niet lukt kun je als nog een cartethisch product opvragen door de crossjoin te gebruiken. Dan heb je grote kans dat het een stuk sneller gaat dan met Perl, omdat je die resultset iteratief kunt doorlopen. Als je de scores dan in een hash bijhoudt ben je volgens mij klaar.

of mis ik nou iets cruciaals :?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1