Gøy med Perl og MySQL

For ikke så lenge siden lagde jeg en enkel parser i Perl som leser en tekstfil, splitter opp linjene med regex og legger resultatet i en MySQL database. Enkel og lite inteligent sak, men den virker. For et par dager siden lastet jeg ned norsk ordbok til FireFox. Da fikk jeg en ide, scriptet skulle få litt å bryne seg på. WinRar klarte å lese FireFox-filen og pakket ut en stor tekstfil full av ord på et veldig enkelt format. Jeg justerte scriptet litt og lagde en ny tabell i MySQL. Etter noen sekunder med tygging hadde jeg 125000 ord tilgjengelig med en rask SQL-spørring. Kjekt. Jeg la også til et felt med antall bokstaver slik at jeg kan hente ord med bestemt lengde. Så ble jeg vågal. Jeg modifiserte perl-koden igjen og lagde en tabell med felt for bokstav, plassering og referanse til tabellen med ord. F.eks. ble ‘ord’ lagret som o-1, r-2 og d-3. Dermed kan jeg raskt hente alle ord med ‘f’ som fjerde bokstav e.l. Problemet er at det er ganske mange bokstaver i ordlisten. Perl kom gjennom fila på et par minutter, men resultatet ble en tabell med 1,5mill. linjer som ikke var så lett å håndtere. MySQL brukte nesten et sekund på en enkel spørring og når jeg prøvde JOIN meed begge tabellene stoppet det helt opp. Jeg hadde tenkt at tabellen med bokstaver kunne brukes til å finne ord til Scrabble, men det blir nok for tregt.

Tags: , , ,

One Response to “Gøy med Perl og MySQL”

  1. […] For noen måneder siden lagde jeg en database med ord som jeg tenkte kunne brukes til å finne gode løsninger i Scrabble. Det stoppet litt fordi jeg ikke fant noe effektiv metode for å finne ord som bestod av bokstavene spilleren hadde. For en stund siden gikk det plutselig opp for meg, jeg trenger bare et felt i databasen med bokstavene i ordet sortert alfabetisk. Dette feltet kan jeg sammenligne med spillerens bokstaver som også er sortert alfabetisk. Enkelt og genialt synes jeg. Dette har jeg laget til nå og det ser ut til å fungere bra. Neste utfordring blir å finne ord som ikke bruker alle bokstavene spilleren har, jeg har noen tanker, men jeg har ikke testet dem enda. […]

Leave a Reply