La figa è di sinistra.

La figa è di sinistra. Dimostriamolo.

Per prima cosa installiamo un po' di intelligenza artificiale: apt-get install crm115.

Poi scriviamo due scriptini: uno per classificare:

1
2
3
4
5
6
7
8
9
#!/usr/bin/crm

isolate (:classify_status:) //
isolate (:lcr:) /[[:graph:]][-.,:[:alnum:]]*[[:graph:]]?/

{
   classify (destra.css sinistra.css) (:classify_status:) /:*:lcr:/
   output /:*:classify_status:/
}

...e uno per imparare:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/usr/bin/crm -( cat )

isolate (:cat:)
isolate (:lcr:) /[[:graph:]][-.,:[:alnum:]]*[[:graph:]]?/

{
   learn (:*:cat:) /:*:lcr:/
   output /Learned.\n/
}
alius
{
   output /No need to learn/
}

Poi creiamo i due file con le categorie:

cssutil -b -r destra.css
cssutil -b -r sinistra.css

Scarichiamo un po' di dati per imparare la differenza tra destra e sinistra:

lynx -dump http://www.ilrestodelcarlino.it > carlino.txt
lynx -dump http://www.repubblica.it > repubblica.txt
lynx -dump http://www.corriere.it > corriere.txt
lynx -dump http://www.ilgiornale.it/ > giornale.txt
lynx -dump http://www.unita.it/index.asp?sezione_cod=HP > unita.txt
lynx -dump http://www.ilmanifesto.it > manifesto.txt
lynx -dump http://www.lastampa.it/redazione/default.asp > stampa.txt
lynx -dump http://www.liberazione.it/ > liberazione.txt
lynx -dump http://www.marxismo.net/ > marxismo.txt

Uno script per vedere quanto impara:

1
2
3
4
5
6
#!/bin/sh

for i in *.txt
do
        echo -e "$i\t`./class.crm < $i | grep Best`"
done

Poi vediamo:

./view  -> Tutto di destra
./learn.crm --cat=sinistra.css < repubblica.txt
./view  -> Tutto di sinistra
./learn.crm --cat=destra.css < carlino.txt
# Si ripete (ometto i view, faccio learn sui soli errori, riporto solo la
# sequenza dei learn)
./learn.crm --cat=sinistra.css < liberazione.txt
./learn.crm --cat=destra.css < giornale.txt
./learn.crm --cat=sinistra.css < manifesto.txt
./learn.crm --cat=destra.css < corriere.txt
./learn.crm --cat=sinistra.css < unita.txt
# Ora è bravo.  Da notare che non ha avuto bisogno di training per
#   marxismo.txt e stampa.txt

Possiamo chiedergli anche quanta differenza c'è tra destra e sinistra:

$ cssdiff destra.css sinistra.css
Sparse spectra file destra.css has 1048577 bins total
Sparse spectra file sinistra.css has 1048577 bins total

 File 1 total features            :       139728
 File 2 total features            :       103392

 Similarities between files       :         5890
 Differences between files        :       123769

 File 1 dominates file 2          :       133838
 File 2 dominates file 1          :        97502

Sono molto di piú le differenze delle similarità. Strano: in Italia mi aspettavo il contrario.

Mettiamo alla prova la nostra intelligenza artificiale:

$ lynx -dump http://www.mariuana.it/ > maria
$ ./class.crm < maria
CLASSIFY succeeds; success probability: 1.0000  pR: 306.6527
Best match to file #1 (sinistra.css) prob: 0.7746  pR: 0.5361
Total features in input file: 178
#0 (destra.css): features: 139728, hits: 2323, prob: 2.25e-01, pR:  -0.54
#1 (sinistra.css): features: 103392, hits: 2070, prob: 7.75e-01, pR:   0.54

$ lynx -dump http://spazioinwind.libero.it/gastroepato/cocaina.htm > coca
$ ./class.crm < coca
CLASSIFY succeeds; success probability: 1.0000  pR: 306.6527
Best match to file #0 (destra.css) prob: 0.5691  pR: 0.1208
Total features in input file: 17775
#0 (destra.css): features: 139728, hits: 23679, prob: 5.69e-01, pR:   0.12
#1 (sinistra.css): features: 103392, hits: 21597, prob: 4.31e-01, pR:  -0.12

La cocaina è di destra e la mariuana e di sinistra: lo sanno tutti, e infatti lo sa anche crm.

È giunta finalmente ora di risolvere il grande quesito:

# Ma la figa, è di sinistra?
$ lynx -dump http://www.figa.it/figa_1.html > figa
$ ./class.crm < figa
CLASSIFY succeeds; success probability: 1.0000  pR: 306.6527
Best match to file #1 (sinistra.css) prob: 0.9993  pR: 3.1273
Total features in input file: 2408
#0 (destra.css): features: 139728, hits: 16334, prob: 7.45e-04, pR:  -3.13
#1 (sinistra.css): features: 103392, hits: 12168, prob: 9.99e-01, pR:   3.13

E vai! L'avevo sempre immaginato, ma ora ne ho avuto la conferma! :)