jump to navigation

Come ordinare e “ripulire” una wordlist gigante 22 giugno 2008

Posted by fripp in GNU/Linux, Informatica, Mac OS X, Ordinamento, Programmazione, Python, Scripting, Sistemi Operativi, Unix.
Tags: , , , , , , , , , ,
trackback

In questi giorni ho contribuito ad aumentare la temperatura della mia stanza facendo lavorare come un matto il mio povero computer.

Mi sono ritrovato con una wordlist da 700MB con più di 75 milioni di parole; mi sono accorto che era piena di ripetizioni: la sola lettera “a” compariva 59 volte!

Mi sono ingegnato per risolvere il problema.

Occorreva innanzitutto ordinare la wordlist.

Per fare questo ho pensato di usare il comando sort dei sistemi Unix. Purtroppo il file gigante è codificato in unicode e sort si incazza un poco.

Per risolvere il problema ho reimpostato la variabile LC_ALL in questo modo:

export LC_ALL=C; sort wordlist.txt > sortedwordlist.txt

Dopo un poco di elaborazione, mi sono ritrovato con un bel file ordinato.

Occorreva eliminare le ripetizioni. Per fare questo ho implementato un piccolo script Python.
Ecco il codice:

#!/usr/bin/python

from __future__ import with_statement
import sys

with open(sys.argv[1],'w' ) as fileoutput:
	with open(sys.argv[2],'r' ) as fileinput:

		oldline=''

		for line in fileinput:

			if line!=oldline:
				fileoutput.write(line)

			oldline=line

Il primo argomento dello script è il file di output, il secondo è il file di input.

Dopo un poco di elaborazione, mi sono ritrovato una bella wordlist di 441 MB, 260MB in meno di quella di partenza; nella wordlist iniziale c’erano circa 35 milioni di ripetizioni!

Annunci

Commenti»

1. aparo - 23 giugno 2008

Forse con un bel:

export LC_ALL=C; sort wordlist.txt|uniq > sortedwordlist.txt

Ma penso che non era così geek come usare la keyword with di python 😉

2. fripp - 23 giugno 2008

In effetti il tuo metodo è più compatto! Non ricordavo l’esistenza del comando uniq sinceramente.
Dici che è da geek usare la “with”? 😉

3. luxio - 28 ottobre 2008

notevole.


Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: