File: bogofilter-faq-it.html

package info (click to toggle)
bogofilter 1.2.5-1
  • links: PTS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 5,896 kB
  • sloc: ansic: 35,768; sh: 8,350; perl: 2,320; xml: 1,381; makefile: 751; lex: 483; lisp: 179; asm: 11
file content (1555 lines) | stat: -rw-r--r-- 69,424 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
    <title>Bogofilter FAQ</title>
    <style type="text/css">
      h2 {
	margin-top: 1em;
	font-size: 125%;
      }
      h3 {
	margin-top: 1em;
	font-size: 110%;
      }
      p {
	margin-top: 0.5em;
	margin-bottom: 0.5em;
      }
      ul {
	margin-top: 1.5em;
	margin-bottom: 0.5em;
      }
      ul ul {
	margin-top: 0.25em;
	margin-bottom: 0;
      }
      li {
	margin-top: 0;
	margin-bottom: 1em;
      }
      li li {
	margin-bottom: 0.25em;
      }
      dt {
	margin-top: 0.5em;
	margin-bottom: 0;
      }
      hr {
	margin-top: 1em;
	margin-bottom: 1em;
      }
    </style>
  </head>

  <body>
     <h1>Bogofilter FAQ</h1>

     <p>Versioni ufficiali: in
     <a href="http://bogofilter.sourceforge.net/faq.shtml">Inglese</a> o
     <a href="http://bogofilter.sourceforge.net/faq_fr.shtml">Francese</a> o
     <a href="http://bogofilter.sourceforge.net/faq_it.shtml">Italiano</a> o
     <a href="http://bogofilter.sourceforge.net/faq_bg.shtml">Bulgaro</a><br>

     Maintainer: David Relson &lt;relson@osagesoftware.com&gt;<br>
     Traduzione italiana di Marco Bozzolan &lt;&#98;&#111;&#122;&#122;&#111;&#108;&#97;&#110;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&gt;</p>

    <p>Con questo documento si intende rispondere alle domande poste
    frequentemente riguardanti bogofilter.</p>

    <h3>Convenzioni tipografiche</h3>

    <ul>
      <li>Se mostriamo un comando d'esempio che inizia con un simbolo di dollaro ($), questo significa che questi comandi dovrebbero essere eseguiti come utente senza provilegi, NON come utente root.</li>
      <li>Se mostriamo comandi d'esempio che iniziano con un cancelletto (#), ci&ograve; significa che questi comandi devono essere eseguiti come utente root.</li>
    </ul>

    <h3>Domande poste frequentemente e loro risposte</h3>

    <ul>

    <li>Informazioni generali
      <ul>
	<li><a href="#what-is-bogofilter">Che cos'&egrave; bogofilter?</a></li>
	<li><a href="#bogo-what">Bogo che?</a></li>
	<li><a href="#bogo-how">Come funziona bogofilter?</a></li>
	<li><a href="#lists">Liste di discussione su bogofilter</a></li>
      </ul>
    </li>
    
    <li>Domande operative
      <ul>
	<li><a href="#training">Come avvio l'apprendimento di bogofilter?</a></li>
	<li><a href="#production">Come posso mantenere alta l'accuratezza nell'assegnazione del punteggio?</a></li>
	<li><a href="#mboxformats">Quali formati di posta sono supportati da bogofilter?</a></li>
	<li><a href="#vvv">Cosa significa l'output verboso di bogofilter?</a></li>
	<li><a href="#unsure">Che cos'&egrave; la modalit&agrave; <i>insicura</i>?</a></li>
	<li><a href="#train-on-error">Cosa sono l'&quot;apprendimento dagli errori&quot; e l'&quot;apprendimento per esaurimento&quot;</a></li>
	<li><a href="#autoupdate">Cosa fa l'opzione '-u' (autoaggiornamento)?</a></li>
	<li><a href="#spamassassin">Come posso utilizzare SpamAssassin per istruire bogofilter?</a></li>
	<li><a href="#asian-spam">Cosa posso fare contro lo spam asiatico?</a></li>
      </ul>
    </li>

    <li>Domande sul database
      <ul>
	<li><a href="#compact-database">Come posso compattare il database?</a></li>
	<li><a href="#query-database">Come si fa una ricerca manuale sul database?</a></li>
	<li><a href="#multiple">Posso usare liste di termini multiple?</a></li>
	<li><a href="#ignore">Posso dire a bogofilter di ignorare certi termini?</a></li>
	<li><a href="#update">Come faccio ad aggiornare da un database di termini separati al formato con liste di termini combinate?</a></li>
	<li><a href="#unicode">Come converto la mia lista di termini in/da unicode?</a></li>
	<li><a href="#rescue">Come faccio a capire se le mie liste di termini sono corrotte?</a></li>
      </ul>
    </li>
    <li>Domande sul database Berkeley
      <ul>
	<li><a href="#enable-transactions">Come passo dalla modalit&agrave; non-transaction a quella transaction?</a></li>
	<li><a href="#disable-transactions">Come passo dalla modalit&agrave; transaction a quella non-transaction?</a></li>
	<li><a href="#locksize">Perch&eacute; bogofilter muore dopo aver stampato<br>
	&quot;Lock table is out of available locks&quot; oppure<br>
	&quot;Lock table is out of available object entries&quot;?
	</a></li>
	<li><a href="#page-notfound">Perch&eacute; ottengo messaggi DB_PAGE_NOTFOUND?</a></li>
	<li><a href="#db-private">Perch&eacute; ottengo &quot;Berkeley
	    DB library configured to support only DB_PRIVATE
	    environments&quot; o &quot;Berkeley DB library configured to
	    support only private environments&quot;?</a></li>
      </ul>
    </li>
    <li>Problemi tecnici
      <ul>
	<li><a href="#multi-user">Bogofilter pu&ograve; essere usato in un ambiente multiutente?</a></li>
	<li><a href="#nfs">Posso condividere le liste di termini attraverso NFS?</a></li>
	<li><a href="#return-codes">Perch&eacute; bogofilter restituisce codici come 0 e 256 quando viene lanciato dall'interno di un programma?</a></li>
	<li><a href="#changed-options">Ora che ho aggiornato perch&eacute; si sono corrotti i miei scripts?</a></li>
	<li><a href="#changed-tagging">Ora che ho aggiornato perch&eacute; bogofilter sta lavorando peggio?</a></li>
	<li><a href="#remove-spam-or-nonspam">Come posso eliminare tutti i token dello spam (o quelli non-spam)?</a></li>
      </ul>
    </li>
    <li>Problemi di compilazione e portabilit&agrave;
      <ul>
	<li><a href="#port-notes">Come faccio a far funzionare bogofilter su Solaris, BSD, ecc?</a></li>
	<li><a href="#make-notes">Posso usare il comando make sul mio sistema operativo?</a></li>
	<li><a href="#build">Come compilo bogofilter come utente non-root per installarlo in una directory non standard?</a></li>
	<li><a href="#patch">Come compilo bogofilter con le patch?</a></li>
	<li><a href="#small">Come rendo gli eseguibili pi&ugrave; piccoli?</a></li>
	<li><a href="#relativepath">datastore_db.c non compila!</a></li>
      </ul>
    </li>
    <li>Usare bogofilter con differenti programmi di posta
      <ul>
	<li><a href="#which-muas">Con quali programmi di posta funziona bogofilter?</a></li>
	<li><a href="#with-mutt">Come uso bogofilter con mutt?</a></li>
	<li><a href="#with-sc">Come uso bogofilter con Sylpheed Claws?</a></li>
	<li><a href="#with-vm">Come uso bogofilter con VM (uno strumento di Emacs per la posta)?</a></li>
	<li><a href="#with-mh-e">Come uso bogofilter con MH-E (l'interfaccia Emacs al sistema di posta MH)?</a></li>
      </ul>
    </li>
    </ul>

    <hr>

    <h2 id="what-is-bogofilter">Che cos'&egrave; bogofilter?</h2>

    <p>Bogofilter &egrave; un filtro bayesiano veloce contro lo spam
    implementato secondo le linee indicate da <a
    href="http://www.paulgraham.com/">Paul Graham</a> nel suo articolo
    &quot;<a href="http://www.paulgraham.com/spam.html">A plan for
    spam</a>&quot; (&quot;Un piano per lo spam&quot;). Bogofilter usa l'<a
    href="http://radio-weblogs.com/0101454/stories/2002/09/16/spamDetection.html">algoritmo</a>
    per la media geometrica di Gary Robinson insieme alla <a
    href="http://www.linuxjournal.com/article.php?sid=6467">modifica</a>
    del metodo di Fisher per classificare i messaggi come spam o
    non-spam.</p>

    <p>La <a href="http://bogofilter.sourceforge.net/">pagina</a> dedicata
    a bogofilter presso SourceForge &egrave; il punto di riferimento per
    le risorse relative a bogofilter.</p>

    <p>Bogofilter &egrave; stato iniziato da <a
    href="http://catb.org/%7Eesr/">Eric S. Raymond</a> il 19 agosto
    2002. Ha guadagnato popolarit&agrave; nel settembre 2002, e un gruppo
    di altri autori hanno iniziato a contribuire al progetto.</p>

    <p>Il file <a href="http://bogofilter.sourceforge.net/NEWS">NEWS</a>
    descrive la cronologia delle versioni di bogofilter.</p>

    <hr>

    <h2 id="bogo-what">Bogo-che?</h2>

    <p>Bogofilter &egrave; una sorta di bogometro (<a
    href="http://www.catb.org/%7Eesr/jargon/html/B/bogometer.html">bogometer</a>)
    o filtro bogon (<a
    href="http://www.catb.org/%7Eesr/jargon/html/B/bogon-filter.html">bogon
    filter</a>), ovvero tenta di identificare i messaggi impropri (<a
    href="http://www.catb.org/%7Eesr/jargon/html/B/bogus.html">bogus</a>)
    misurandone la bogosit&agrave; (<a
    href="http://www.catb.org/%7Eesr/jargon/html/B/bogosity.html">bogosity</a>).</p>

    <hr>

    <h2 id="bogo-how">Come funziona bogofilter?</h2>

    <p>Vedi la sezione <a
    href="http://bogofilter.sourceforge.net/man_page.shtml#theory">Theory
    of operation</a> (<i>teoria dell'operazione</i>) per
    un'introduzione. La fonte principale per la comprensione &egrave;
    questo articolo di Gary Robinson apparso sul Linux Journal: <a
    href="http://www.linuxjournal.com/article.php?sid=6467">"A Statistical
    Approach to the Spam Problem"</a> (<i>Un approccio statistico al
    problema dello spam</i>).</p>

    <p>Dopo aver letto tutto ci&ograve; potresti avere delle domande. La
    prima potrebbe essere &quot;Bogofilter &egrave; davvero un filtro
    baesiano?&quot;. Bogofilter &egrave; basato sul teorema di Bayes e lo
    usa per i calcoli iniziali e successivamente per altri metodi
    statistici. Senza dubbio &egrave; un filtro statistico per lo spam
    baesiano sotto molti aspetti.</p>

    <p>Altre domande che potresti avere potrebbero riguardare gli assunti
    di base della teoria di Bayes. Due brevi risposte sono: &quot;No, non
    sono soddisfatte&quot; e &quot;A noi non interessano, fintanto che
    funziona&quot;. Una risposta pi&ugrave; articolata spiegher&agrave;
    che l'ipotesi di partenza che &quot;una e-mail &egrave; una raccolta
    casuale di parole, ciascuna indipendente dalle altre&quot; &egrave;
    violata. Ci sono diversi casi in cui la pratica non segue la
    teoria. Alcuni sono sempre presenti, altri dipenderanno dal modo in
    cui usi bogofilter:</p>

    <ul>
      <li>le parole in una e-mail non sono mai indipendenti. In tutte le lingue &egrave; vero il contrario.</li>
      <li>le parole usate non sono casuali, bench&eacute; alcuni spammer inseriscano termini &quot;a casaccio&quot;</li>
      <li>l'apprendimento completo utilizzando un campione casuale segue i principi di Bayes. Una scelta dei messaggi da usare per l'apprendimento violerebbe l'ipotesi che tali messaggi siano un campione casuale dei messaggi ricevuti. Questo principio viene anche violato dalla funzione per l'autoaggiornamento di bogofilter (con il parametro thresh_update) <a href="#train-on-error">training on error</a>, o qualunque altro approccio simile a questo.</li>
      <li>lo stesso accade se usi per l'apprendimento lo stesso messaggio pi&ugrave; di una volta.</li>
      <li>altri problemi sorgono se modifichi il tuo database rimuovendo tokens (per esempio usando bogoutil con -a o -c).</li>
      <li>senza dubbio ce ne sono altri.</li>
    </ul>

    <p>Come spiegato dalla man page, bogofilter cerca di capire quanto
    malamente fallisce l'ipotesi nulla. Alcune persone sostengono che
    &quot;tali scostamenti dalla realt&agrave; di solito sono a nostro
    favore&quot; (dall'articolo di Gary). Altri sostengono che, anche in
    tali casi, non dovremmo scostarci troppo. Nessuno davvero
    <em>sa</em>. Tieni solo a mente che potresti avere dei problemi se
    spingi troppo. La chiave nell'approccio di Bogofilter &egrave;: quello
    che importa maggiormente &egrave; semplicemente quello che funziona
    nel mondo reale.</p>

    <p>Ora che sei stato avvisato, divertiti e usa Bogofilter come meglio
    ti sembra.</p>

    <hr>

    <h2 id="lists">Liste di discussione</h2>

    <p>Ci sono attualmente quattro liste di discussione per
    bogofilter:</p>

    <ol>
      <li>bogofilter-announce@bogofilter.org: <a href="http://www.bogofilter.org/mailman/listinfo/bogofilter-announce">[iscriviti]</a>[archivi: <a href="http://www.bogofilter.org/pipermail/bogofilter-announce">mailman</a>, <a href="http://news.gmane.org/thread.php?group=gmane.mail.bogofilter.announce">gmane</a>]. Una lista di soli annunci dove vengono presentate le nuove versioni.</li>
      <li>bogofilter@bogofilter.org: <a href="http://www.bogofilter.org/mailman/listinfo/bogofilter">[iscriviti]</a>[archivi: <a href="http://www.bogofilter.org/pipermail/bogofilter">mailman</a>, <a href="http://news.gmane.org/thread.php?group=gmane.mail.bogofilter.general">gmane</a>]. Una lista di discussione dove parlare di bogofilter.</li>
      <li>bogofilter-dev@bogofilter.org: <a href="http://www.bogofilter.org/mailman/listinfo/bogofilter-dev">[iscriviti]</a>[archivi: <a href="http://www.bogofilter.org/pipermail/bogofilter-dev">mailman</a>, <a href="http://news.gmane.org/thread.php?group=gmane.mail.bogofilter.devel">gmane</a>]. Una lista per condividere patch e discussioni tecniche e sullo sviluppo.</li>
      <li>bogofilter-cvs@lists.sourceforge.net: <a href="http://lists.sourceforge.net/mailman/listinfo/bogofilter-cvs">[iscriviti]</a><a href="http://sourceforge.net/mailarchive/forum.php?forum=bogofilter-cvs">[archivio]</a>. Lista per annunciare le modifiche al codice nell'archivio CVS.</li>
    </ol>

    <p>La lista bogofilter-announce &egrave; moderata e viene utilizzata
    solo per annunci importanti (come quelli relativi a nuove
    versioni). &Egrave; una lista poco trafficata. Se sei iscritto alla
    lista degli utilizzatori o a quella degli sviluppatori, non hai
    bisogno di iscriverti a quella degli annunci. I messaggi inviati alla
    lista degli annunci vengono anche inoltrati alle altre liste.</p>

    <hr>

    <h2 id="training">Come avvio l'apprendimento di bogofilter?</h2>

    <p>Per classificare i messaggi come ham (non spam) o come spam,
    bogofilter ha bisogno di imparare dalla tua posta. Per iniziare
    &egrave; meglio avere collezioni (il pi&ugrave; estese possibili) di
    messsaggi che sai essere ham o spam. (Errori in questa fase causeranno
    dei problemi in seguito, dunque fai attenzione
    <code>;-)</code>. Attenzione: usa soltanto la tua posta; usare altre
    collezioni (come una collezione di spam trovata sul web) potrebbe
    portare bogofilter a conclusioni errate &#8212; dopo tutto tu vuoi che
    capisca la <i>tua</i> posta.</p>

    <p>Una volta che hai le collezioni di spam e ham, puoi scegliere tra
    quattro opzioni. In tutti i casi funziona meglio se la tua base
    d'apprendimento (le collezioni di cui sopra) sono pi&ugrave; estese,
    piuttosto che pi&ugrave; ristrette. Pi&ugrave; la tua base
    d'apprendimento &egrave; ristretta, pi&ugrave; alto sar&agrave; il
    numero di errori che bogofilter far&agrave; in produzione. Assumiamo
    che la tua base sia composta da due files: ham.mbox e spam.mbox.</p>

    <ul>
    <li><p>Metodo 1. Apprendimento completo. Passa a bogofilter tutti
    i tuoi messaggi. Nel nostro esempio:</p>

    <pre>    bogofilter -s &lt; spam.mbox
    bogofilter -n &lt; ham.mbox</pre>
    </li>
    </ul>

    <p>Nota: la directory contrib di Bogofilter contiene due script che
    utilizzano la tecnica train-on-error. Questa tecnica assegna un
    punteggio a ogni messaggio e aggiunge al database solo quei messaggi
    che erano stati valutati in modo scorretto (messaggi valutati come
    incerti, ham valutato come spam, o spam valutato come
    ham). L'obiettivo &egrave; costruire un database di quelle parole
    <em>necessarie</em> per classificare correttamente i messaggi. Il
    database risultante &egrave; pi&ugrave; piccolo di quello costruito
    utilizzando l'apprendimento completo.</p>

    <ul>
    <li><p>Metodo 2. Usa lo script bogomintrain.pl (nella directory
    contrib). Esso controlla i messaggi nello stesso ordine dei tuoi file
    mailbox. Puoi usare l'opzione <code>-f</code> che ripeter&agrave;
    questa operazione finch&eacute; tutti i messaggi nella tua collezione
    per l'apprendimento saranno classificati correttamente (puoi anche
    correggere il livello di certezza). Poich&eacute; lo script si
    assicura che il database comprenda la tua collezione iniziale
    &quot;esattamente&quot; (con la precisione da te richiesta), funziona
    molto bene. Puoi usare <code>-o</code> per creare un margine di
    sicurezza attorno al tuo spam_cutoff. Assumendo spam_cutoff=0.6
    potresti voler assegnare a tutto lo ham nella tua collezione sotto 0.3
    e tutto lo spam sopra 0.9. Il nostro esempio &egrave;:</p>

    <pre>    bogominitrain.pl -fnv ~/.bogofilter ham.mbox spam.mbox '-o 0.9,0.3'</pre>
    </li>

    <li><p>Metodo 3. Usa lo script randomtrain (nella directory
    contrib). Lo script genera una lista di tutti i messaggi nelle
    mailbox, riordina la lista in modo casuale, e poi valuta ogni
    messaggio, con l'apprendimento se richiesto. Nel nostro esempio:</p>

    <pre>    randomtrain -s spam.mbox -n ham.mbox</pre>

    <p>Come con il metodo 4, funziona meglio se inizi con l'apprendimento
    completo usando alcune migliaia di messaggi. Questo fornir&agrave; un
    database che sar&agrave; pi&eacute; comprensivo e significativamente
    pi&eacute; esteso.</p></li>

    <li><p>Metodo 4. Se hai abbastanza messaggi spam e non spam nella tua
    collezione iniziale, separa dal resto circa 10 000 messaggi di spam e
    10 000 non spam in file mbox separati, ed esegui l'apprendimento come
    nel metodo 1. Poi usa bogofilter per classificare i rimanenti spam e
    non spam. Prendi ogni messaggio che viene classificato scorrettamente
    o come incerto, e fai l'apprendimento con quelli. Qui ci sono due
    brevi script che puoi utilizzare per classificare i messaggi nel
    train-on-error:</p>

    <pre>    #! /bin/sh
    #  class3 -- classify one message as bad, good or unsure
    cat &gt;msg.$$
    bogofilter $* &lt;msg.$$
    res=$?
    if [ $res = 0 ]; then
	cat msg.$$ &gt;&gt;corpus.bad
    elif [ $res = 1 ]; then
	cat msg.$$ &gt;&gt;corpus.good
    elif [ $res = 2 ]; then
	cat msg.$$ &gt;&gt;corpus.unsure
    fi
    rm msg.$$</pre>

    <pre>    #! /bin/sh
    # classify -- put all messages in mbox through class3
    src=$1;
    shift
    formail -s class3 $* &lt;$src</pre>

    <p>Nel nostro esempio (dopo l'apprendimento completo iniziale):</p>

    <pre>    classify spam.mbox [bogofilter options]
    bogofilter -s &lt; corpus.good
    rm -f corpus.*
    classify ham.mbox [bogofilter options]
    bogofilter -n &lt; corpus.bad
    rm -f corpus.*</pre></li>
    </ul>

    <h3>Confronto tra i metodi</h3>

    <p>&Egrave; importante capire le conseguenze dei metodi appena
    descritti. Fare l'apprendimento completo come nei metodi 1 e 4 produce
    un database pi&ugrave; esteso di quanto facciano i metodi 2 e 3. Se
    hai bisogno che la dimensione del database rimanga piccola (per
    esempio a causa di limitazioni di quota) usa i metodi 2 o 3.</p>

    <p>L'apprendimento completo con il metodo 1 &egrave; il pi&ugrave;
    rapido. L'apprendimento sugli errori (nei metodi 2, 3 e 4) &egrave;
    efficente, ma l'apprendimento iniziale richiede pi&ugrave; tempo.</p>

    <hr>

    <h2 id="production">Come posso mantenere alta l'accuratezza nell'assegnazione del punteggio?</h2>

    <p>Bogofilter far&agrave; degli errori di tanto in tanto. Dunque
    l'apprendimento costante &egrave; importante. Ci sono due metodi
    principali per fare ci&ograve;. Primo, puoi usare ogni messaggio in
    arrivo come base d'apprendimento (usando l'opzione
    <code>-u</code>). Secondo, puoi fargli imparare dagli errori.</p>

    <p>Poich&eacute; potresti voler ricostruire il tuo database ad un
    certo punto, per esempio quando una nuova funzionalit&agrave; viene
    implementata in bogofilter, pu&ograve; essere molto utile aggiornalre
    la tua collezione d'apprendimento continuamente.</p>

    <p>Bogofilter fa sempre del suo meglio con le informazioni che ha in
    suo possesso. Comunque, far&agrave; degli errori, ad esempio
    classificare ham come spam (falsi positivi) o spam come ham (falsi
    negativi). Per ridurre la possibilit&agrave; che l'errore si ripeta,
    &egrave; necessario far imparare a bogofilter dal messaggio
    classificato erroneamente. Se un messaggio viene classificato
    scorrettamente come spam, usa l'opzione <code>-n</code> per
    notificarlo come ham. Usa <code>-s</code> per riclassificare un
    messaggio di spam.</p>

    <p>Bogofilter ha un'opzione <code>-u</code> che aggiorna
    automaticamente la lista delle parole dopo aver valutato ogni
    messaggio. Poich&eacute; bogofilter talvolta sbaglia nella
    classificazione di un messaggio, un monitoraggio &egrave; necessario
    per correggere eventuali errori. Le correzioni possono essere fatte
    usando <code>-Sn</code> per cambiare la classificazione da spam a non
    spam e <code>-Ns</code> per cambiarla da non spam a spam.</p>

    <p>La correzione della classificazione di un messaggio potrebbe
    influenzare la classificazione di altri messaggi. Pi&ugrave; piccolo
    &egrave; il database, pi&ugrave; alta &egrave; la possibilit&agrave;
    che un errore nell'apprendimento causi una classificazione errata.</p>

    <p>L'utilizzo di un metodo come il 2 o il 3 (sopra) pu&ograve;
    compensare questo effetto. Ripeti l'apprendimento con la collezione
    iniziale completa (includendo tutti i nuovi messaggi aggiunti dal
    precedente apprendimento). Questo aggiunger&agrave; messaggi al
    database, il quale mostrer&agrave; effetti opposti ad entrambi i lati
    fino a che avrai un nuovo equilibrio.</p>

    <p>Una strategia alternativa, basata sul metodo 4 nella sezione
    precedente, &egrave; il seguente: periodicamente prendi blocchi di
    messaggi e usa gli script indicati nel metodo 4 per classificarli. Poi
    controlla manualmente quelli corretti, quelli scorretti e gli incerti,
    correggi gli errori e dividi gli incerti tra spam e non spam. Quando
    hai accumulato circa 10 000 messaggi spam e 10 000 non spam, esegui
    l'apprendimento con quelli corretti, non corretti e con quelli
    scorretti separati e gli incerti; poi, esegui l'apprendimento solo con
    quelli separati e gli incerti, scartando i messaggi che bogofilter
    gi&agrave; classifica correttamente.</p>

    <hr>

    <h2 id="mboxformats">Quali formati di posta sono supportati da bogofilter?</h2>

    <p>Bogofilter supporta il formato tradizionale delle mailbox Unix e i
    formati Maildir e MH. Nota per&ograve; che bogofilter non supporta le
    sottocartelle, dovrai elencarle esplicitamente tra le cartelle MH o
    Maildir++ - basta menzionare il percorso completo fino alla
    sottocartella.</p>

    <p>Per i formati non supportati, dovrai convertire la mailbox in un
    formato utilizzato anche da bogofilter. Mbox risulta spesso
    conveniente perch&eacute; pu&ograve; essere passato direttamente a
    bogofilter.</p>

    <p>Per convertirlo formato UW-IMAP/PINE in mbox: 

    <pre>    mailtool copy /percorso/completo/di/mail.mbox '#driver.unix//percorso/completo/di//mbox'</pre>

    <p>o:</p>

    <pre>    for MSG in /full/path/to/maildir/* ; do 
	    formail -I Status: < "$MSG" >> /full/path/to/mbox
    done</pre>

    <hr>

    <h2 id="vvv">Cosa significa l'output verboso di bogofilter?</h2>

    <p>Bogofilter pu&ograve; essere istruito per mostrare informazioni
    sulla valutazione di un messaggio lanciandolo con le opzioni
    &quot;-v&quot;, &quot;-vv&quot;, &quot;-vvv&quot; o
    &quot;-R&quot;.</p>

    <ul>
      <li>
        Utilizzando &quot;-v&quot; bogofilter genera la riga d'intestazione &quot;X-Bogosity:&quot;, come nell'esempio:
        <pre>    X-Bogosity: Ham, tests=bogofilter, spamicity=0.500000</pre>
      </li>
      <li>
        Utilizzando &quot;-vv&quot; bogofilter genera un istogramma, per esempio:
    <pre>    X-Bogosity: Ham, tests=bogofilter, spamicity=0.500000
      int  cnt    prob   spamicity  histogram
     0.00   29  0.000209  0.000052  #############################
     0.10    2  0.179065  0.003425  ##
     0.20    2  0.276880  0.008870  ##
     0.30   18  0.363295  0.069245  ##################
     0.40    0  0.000000  0.069245
     0.50    0  0.000000  0.069245
     0.60   37  0.667823  0.257307  #####################################
     0.70    5  0.767436  0.278892  #####
     0.80   13  0.836789  0.334980  #############
     0.90   32  0.984903  0.499835  ################################</pre>

    <p>Ogni riga mostra un intervallo, il conteggio dei termini con i
    valori in quell'intervallo, la probabilit&agrave; media che tali
    termini siano spam, il punteggio del messaggio (per quei termini e per
    tutti quelli con punteggio inferiore), e un grafico a barre
    corrispondente al conteggio dei termini.</p>

    <p>Nell'istogramma sopra riportato ci sono un sacco di termini con
    punteggio basso e un sacco di termini ad alto punteggio. Essi si
    bilanciano a vicenda per fornire un punteggio per il messaggio di
    0.5000.</p></li>

    <li>Usando &quot;-vvv&quot; si ottiene una lista di <em>tutti</em> i termini nei messaggi con le informazioni relative a ciascuno, come nell'esempio:
    <pre>    X-Bogosity: Ham, tests=bogofilter, spamicity=0.500000
			      n    pgood     pbad      fw     U
    "which"              10  0.208333  0.000000  0.000041 +
    "own"                 7  0.145833  0.000000  0.000059 +
    "having"              6  0.125000  0.000000  0.000069 +
    ...
    "unsubscribe.asp"     2  0.000000  0.095238  0.999708 +
    "million"             4  0.000000  0.190476  0.999854 +
    "copy"                5  0.000000  0.238095  0.999883 +
    N_P_Q_S_s_x_md      138  0.00e+00  0.00e+00  5.00e-01
			     1.00e-03  4.15e-01  0.100</pre>
    Le colonne stampate contengono le seguenti informazioni:
    <dl>
    <dt>"&#8230;"</dt><dd>il blocco in questione</dd>
    <dt>n</dt><dd>il numero di volte che il blocco &egrave; stato trovato nell'apprendimento</dd>
    <dt>pgood</dt><dd>la porzione di messaggi buoni che contenevano questo blocco</dd>
    <dt>pbad</dt><dd>la porzione di messaggi spam che contenevano questo blocco</dd>
    <dt>fw</dt><dd>l'indice pesato di Robinson, che combina pgood e pbad per fornire un valore che sar&agrave; vicino a zero se un messaggio contenente questo blocco non sembra essere spam, mentre sar&agrave; vicino a uno se sembrer&agrave; essere spam</dd>
    <dt>U</dt><dd>'<b>+</b>' se questo blocco contribuisce al punteggio finale del messaggio, '<b>-</b>' in caso contrario. Un blocco viene escluso quando il suo punteggio &egrave; pi&ugrave; vicino a 0.5 di min_dev.</dd>
    </dl>

    <p>Le linee finali mostrano:</p>

    <ul>
    <li>I totali relativi alle colonne</li>
    <li>I valori della <b>s</b> e della <b>x</b> di Robinson e di <b>min_dev</b></li>
    </ul>
    </li>
    <li>Usando &quot;-R&quot; si ottiene lo stesso risultato di &quot;-vvv&quot; sopra descritto pi&ugrave; due colonne aggiuntive:
    <dl>
    <dt>invfwlog</dt><dd>logaritmo di fw</dd>
    <dt>fwlog</dt><dd>logaritmo di (1-fw)</dd>
    </dl>

    <p>L'output di &quot;-R&quot; &egrave; formattato per l'utilizzo con
    il linguaggio R per il calcolo statistico. Maggiori informazioni sono
    disponibili presso <a href="http://www.r-project.org/">Il progetto R
    per il calcolo statistico</a>.</p>

    </li>
    </ul>

    <hr>

    <h2 id="unsure">Che cos'&egrave; la modalit&agrave; <i>insicura</i>?</h2>

    <p>La configurazione predefinita di bogofilter classificher&agrave; un
    messaggio come spam o non spam. Per fare ci&ograve; viene utilizzato
    il parametro SPAM_CUTOFF. Messaggi con punteggio maggiori o uguali a
    SPAM_CUTOFF sono classificati come spam. Gli altri messaggi sono
    catalogati come ham.</p>

    <p>Esiste anche un parametro HAM_CUTOFF. Quando questo viene
    utilizzato, i messaggi devono avere punteggi minori o uguali a
    HAM_CUTOFF per essere riconosciuti come ham. I messaggi con punteggi
    compresi tra HAM_CUTOFF e SPAM_CUTOFF sono classificati come
    incerti. Se guardi in bogofilter.cf, vedrai le seguenti linee:</p>

    <pre>    #### CUTOFF Values
    #
    #    both ham_cutoff and spam_cutoff are allowed.
    #    setting ham_cutoff to a non-zero value will
    #    enable tri-state results (Spam/Ham/Unsure).
    #
    #ham_cutoff  = 0.45
    #spam_cutoff = 0.99
    #
    #    for two-state classification:
    #
    ## ham_cutoff = 0.00
    ## spam_cutoff= 0.99</pre>

    <p>Per attivare la classificazione con S&igrave;/No/Incerto rimuovi i
    caratteri # dalle ultime due righe.</p>

    <p>Alternativamente, se preferisci utilizzare le etichette
    S&igrave;/No/Incerto invece di Spam/Ham/Incerto, rimuovi i caratteri #
    dalle seguenti righe di bogofilter.cf:</p>

    <pre>    ## spamicity_tags = Yes, No, Unsure</pre>

    <p>Una volta fatto ci&ograve;, potresti voler impostare le regole del
    tuo programma di filtraggio della posta per includere qualcosa
    come:</p>

    <pre>    Se l'intestazione contiene "X-Bogosity: Spam", metti il messaggio nella cartella Spam
    Se l'intestazione contiene "X-Bogosity: Unsure", metti il messaggio nella cartella Incerti</pre>

    <p>In alternativa, bogofilter.cf contiene delle direttive per
    modificare la linea dell'oggetto, es:</p>

    <pre>    #### SPAM_SUBJECT_TAG
    #
    #    dicitura aggiunta alla linea "Oggetto:" per identificare spam o gli incerti
    #    l'impostazione predefinita non aggiunge nulla
    #
    ##spam_subject_tag=***SPAM***
    ##unsure_subject_tag=???UNSURE???</pre>

    <p>Con queste diciture nell'oggetto, le regole per il filtraggio
    diventerebbero:</p>

    <pre>    Se l'oggetto contiene "***SPAM***" metti il messaggio nella cartella Spam
    Se l'oggetto contiene "???UNSURE???" metti il messaggio nella cartella Incerti</pre> 

    <hr>

    <h2 id="train-on-error">Cosa sono l'&quot;apprendimento dagli errori&quot; e l'&quot;apprendimento per esaurimento&quot;</h2>

    <p>L'&quot;apprendimento dagli errori&quot; comporta la scansione di
    un corpus di messaggi noti come spam e non spam; solo quelli che
    vengono classificati in modo errato, o come incerti, vengono
    registrati nel database d'apprendimento. &Egrave; stato verificato che
    presentare solo messaggi inclini ad una classificazione scorretta sia
    un metodo efficiente di apprendimento; se alleni bogofilter con
    messaggi di difficile classificazione, esso apprende anche a
    riconoscere i messaggi palesemente di spam e non spam.</p>

    <p>Questo metodo pu&ograve; essere rafforzato utilizzando un
    &quot;margine di sicurezza&quot;. Aumentando il valore di soglia dello
    spam e diminuendo il valore di soglia dello ham, i messaggi che sono
    vicini ai valori di soglia saranno utilizzati per
    l'apprendimento. L'utilizzo del margine di sicurezza migliora i
    risultati quando si sta apprendendo dagli errori. In generale, margini
    di sicurezza pi&ugrave; ampi aiutano di pi&ugrave; (ma neanche
    impostarli troppo ampi &egrave; una scelta ottimale). Come regola
    empirica il valore di soglia pi&ugrave; o meno 0.3 d&agrave; buoni
    risultati. Per la modalit&agrave; a tre stati, potresti provare la
    met&agrave; dell'intervallo per i messaggi incerti pi&ugrave; o meno
    0.3.</p>

    <p>Ripetere l'apprendimento dagli errori sullo stesso insieme di
    messaggi pu&ograve; migliorare la precisione. L'idea &egrave; che i
    messaggi che erano stati valutati correttamente nella prima occasione
    potrebbero non esserlo pi&ugrave; dopo nuovo apprendimento, e in
    questo modo sarebbero corretti.</p>

    <p>L'&quot;apprendimento per esaurimento&quot; consiste nel ripetere
    l'apprendimento dagli errori, con lo stesso insieme di messaggi,
    finch&eacute; non viene commesso pi&ugrave; alcun errore. Anche questo
    metodo pu&ograve; essere migliorato con i margini di sicurezza. Vedi
    la pagina <a
    href="http://www.garyrobinson.net/2004/02/spam_filtering_.html">Gary
    Robinson's Rants</a> su questo argomento per maggiori dettagli.</p>

    <p>Nota: <code>bogomintrain.pl</code> ha un'opzione <code>-f</code>
    per fare l'apprendimento per esaurimento. Usando <code>-fn</code> si
    evita di ripetere l'apprendimento per ogni messaggio.</p>

    <hr>

    <h2 id="autoupdate">Cosa fa l'opzione '-u' (autoaggiornamento)?</h2>

    <p>L'opzione <code>-u</code> (autoaggiornamento) viene utilizzato per
    espandere automaticamente il dizionario. Quando viene utilizzata
    questa opzione e bogofilter classifica un messaggio come ham o spam, i
    termini che costituiscono il messaggio vengono aggiunti al dizionario
    con un indicatore di spam/ham (come appropriato).</p>

    <p>Come esempio, supponiamo che arrivi un nuovo messaggio
    &quot;Refinance now - best Mortgage rates&quot;. Esso conterr&agrave;
    alcune parole che bogofilter ha gi&agrave; incontrato e
    (probabilmente) altre nuove. Usando <code>-u</code> le nuove parole
    saranno aggiunte al dizionario in modo che bogofilter possa
    riconoscere il messaggio che segue.</p>

    <p>Se/quando usi <code>-u</code>, devi stare all'erta per individuare
    gli errori di classificazione e segnalare a bogofilter ogni messaggio
    venga erroneamente classificato. Un messaggio non riconosciuto
    correttamente potrebbe far commettere altri errori a bogofilter in
    futuro. Si tratta dello stesso problema che si presenta quando tu
    (l'amministratore di sistema) registri scorrettamente un messaggio ham
    come spam (o viceversa).</p>

    <hr>

    <h2 id="spamassassin">Come posso utilizzare SpamAssassin per istruire bogofilter?</h2>

    <p>Se hai un'installazione funzionante di SpamAssassin (o ne crei
    una), puoi utilizzare i suoi <em>return codes</em> per istruire
    bogofilter. Il modo pi&ugrave; semplice &egrave; di creare uno script
    per il tuo MDA che esegue SpamAssassin, verifica il return code e
    lancia bogofilter per registrare il messaggio come spam (o non
    spam). Il file di regole per procmail che segue mostra un modo per
    fare ci&ograve;:</p>

    <pre>    BOGOFILTER     = "/usr/bin/bogofilter"
    BOGOFILTER_DIR = "training"
    SPAMASSASSIN  = "/usr/bin/spamassassin"

    :0 HBc
    * ? $SPAMASSASSIN -e
    #spam yields non-zero
    #non-spam yields zero
    | $BOGOFILTER -n -d $BOGOFILTER_DIR
    #else (E)
    :0Ec
    | $BOGOFILTER -s -d $BOGOFILTER_DIR

    :0fw
    | $BOGOFILTER -p -e

    :0:
    * ^X-Bogosity:.Spam
    spam

    :0:
    * ^X-Bogosity:.Ham
    non-spam</pre>

    <hr>

    <h2 id="asian-spam">Cosa posso fare contro lo spam asiatico?</h2>

    <p>Molte persone ricevono mail indesiderate che utilizzano i set di
    caratteri delle lingue asiatiche. Poich&eacute; non conoscono quelle
    lingue e non conoscono gente di laggi&ugrave;, concludono si tratti di
    spam.</p>

    <p>La buona notizia &egrave; che bogofilter individua quei messaggi
    con buon successo. Quella cattiva &egrave; che questo pu&ograve;
    essere costoso. Puoi scegliere tra due opzioni:</p>

    <ul>

    <li><p>Puoi semplicemente lasciare che bogofilter gestisca questi
    messaggi. Istruisci bogofilter utilizzando i messaggi in lingua
    asiatica identificati come spam. Bogofilter legger&agrave; i messaggi
    nel miglior modo e aggiunger&agrave; i termini al dizionario dello
    spam. Il dizionario conterr&agrave; molti termini che non avranno
    senso per te (visto che il set di caratteri non pu&ograve; essere
    visualizzato), ma bogofilter pu&ograve; lavorare senza problemi con
    essi e identificare con successo lo spam asiatico.</p></li>

    <li><p>Un secondo metodo consiste nell'utilizzare l'opzione
    &quot;replace_nonascii_characters&quot; nel file di
    configurazione. Questo sostituir&agrave; i caratteri con bit alto,
    ovvero quelli compresi tra 0x80 e 0xFF, con punti interrogativi,
    '?'. Questo terr&agrave; il database molto pi&ugrave;
    piccolo. Sfortunatamente questo metodo non &egrave; adatto ai messaggi
    scritti nelle lingue europee, che hanno molte vocali accentate e
    consonanti nell'intervallo con bit alto.</p></li>

    <li><p>Se sei sicuro che non riceverai nessun messaggio scritto in
    queste lingue, puoi escluderli fin dall'inizio. Questo manterr&agrave;
    il database di dimensioni contenute. Puoi farlo con uno script per
    MDA.</p>

    <p>Segue un file di regole per procmail che accantoner&agrave; i
    messaggi scritti con set di caratteri asiatici:</p>

    <pre>    ## Silently drop all Asian language mail
    UNREADABLE='[^?"]*big5|iso-2022-jp|ISO-2022-KR|euc-kr|gb2312|ks_c_5601-1987'
    :0:
    * 1^0 $ ^Subject:.*=\?($UNREADABLE)
    * 1^0 $ ^Content-Type:.*charset="?($UNREADABLE)
    spam-unreadable

    :0:
    * ^Content-Type:.*multipart
    * B ?? $ ^Content-Type:.*^?.*charset="?($UNREADABLE)
    spam-unreadable</pre>

    <p>Con la regola appena descritta, bogofilter non vedr&agrave;
    <em>mai</em> il messaggio.</p>

    </li>
    </ul>

    <hr>

    <h2 id="compact-database">Come posso compattare il database?</h2>

    <p>Puoi compattare periodicamente il database in modo che occupi
    sempre un minimo spazio su disco. Assumendo che il tuo dizionario si
    trovi nella directory ~/.bogofilter, con bogofilter 0.93.0 (o
    pi&ugrave; recente) userai:</p>

    <pre>    bf_compact ~/.bogofilter wordlist.db</pre>

    <p>Con una versione precedente alla 0.93.0 usa invece:</p>

    <pre>    cd ~/.bogofilter
    bogoutil -d wordlist.db | bogoutil -l wordlist.db.new
    mv wordlist.db wordlist.db.prv
    mv wordlist.db.new wordlist.db</pre>

    <p>Lo script &egrave; necessario per duplicare il tuo ambiente di
    database (per poter supportare il processo delle transazioni
    BerkeleyDB). La tua directory originale verr&agrave; rinominata in
    ~/.bogofilter.old e ~/.bogofilter conterr&agrave; il nuovo ambiente
    database.</p>

    <p>Poich&eacute; versioni precedenti di bogofilter non usano le
    transazioni Berkeley DB, il database &egrave; un file singolo
    (wordlist.db) e non &egrave; necessario usare lo script. I comandi
    mostrati sopra creano un nuovo database compatto e rinominano il file
    originale in wordlist.db.prv.</p>

    <p>Nota: va bene anche usare lo script con vecchie versioni di
    bogofilter.</p>

    <hr>

    <h2 id="query-database">Come si fa una ricerca manuale sul database?</h2>

    <p>Per trovare i valori spam e ham per un termine usa l'opzione
    <code>-w</code> di bogoutil. Per esempio, <code>bogoutil -w
    $BOGOFILTER_DIR/wordlist.db example.com</code> fornisce il numero di
    messaggi ham e spam contenenti &quot;example.com&quot;.</p>

    <p>Se vuoi anche il punteggio spam in aggiunta ai valori ham e spam
    per un termine usa l'opzione <code>-p</code> di bogoutil. Per esempio,
    <code>bogoutil -p $BOGOFILTER_DIR/wordlist.db example.com</code>
    fornisce il numero di messaggi ham e spam contenenti
    &quot;example.com&quot;</p>

    <p>Per sapere quanti messaggi ci sono nel tuo dizionario interroga il
    termine speciale .MSG_COUNT, ad esempio con il comando <code>bogoutil
    -w $BOGOFILTER_DIR/wordlist.db .MSG_COUNT</code> per vedere i conteggi
    per i dizionari di ham e spam.</p>

    <p>Per sapere quanti termini ci sono nei tuoi dizionari concatena
    l'output del comando dump di bogoutil con il comando <code>wc</code>:
    <code>bogoutil -d $BOGOFILTER_DIR/wordlist.db | wc -l </code>
    mostrer&agrave; il totale.</p>

    <hr>

    <h2 id="multiple">Posso usare liste di termini multiple?</h2>

    <p>S&igrave;. Bogofilter pu&ograve; essere lanciato con dizionari
    multipli. Per esempio, se hai dizionari di sistema e per singoli
    utenti, bogofilter pu&ograve; essere configurato in modo che controlli
    il dizionario dell'utente e, se non trova la parola, allora controlli
    il dizionario di sistema. Alternativamente, pu&ograve; essere
    configurato in modo da unire le informazioni dalle due liste.</p>

    <p>Seguono le opzioni per il file di configurazione e alcuni
    esempi.</p>

    <p>Un dizionario ha diversi attributi, solitamente tipo, nome, nome
    del file e priorit&agrave;.</p>

    <ul>
    <li>Tipo: 'R' e 'I' (per &quot;regolare&quot; e &quot;ignora&quot;). I dizionari in uso sono di tipo 'R'. Il tipo 'I' significa &quot;non assegnare punteggio al termine se trovato nella lista di quelli da ignorare&quot;</li>
    <li>Nome: un breve simbolo identificativo usato nella stampa dei messaggi di errore. Esempi sono &quot;globale&quot;, &quot;utente&quot; e &quot;ignora&quot;, ma puoi usare qualunque identificativo tu voglia.</li>
    <li>Nome del file: il nome (percorso) del file. All'apertura del dizionario, se il nome &egrave; completamente descritto (con un '/' o '~' iniziale) viene usato quel nome. Altrimenti bogofilter premetter&agrave; la directory, seguendo il normale ordine di ricerca: $BOGOFILTER_DIR, $BOGODIR, $HOME.</li>
    <li>Priorit&agrave;: un intero come 1, 2, 3, ... I dizionari sono consultati per ogni parola in ordine ascendente. Se il termine cercato viene trovato, vengono consultate le altre liste con uguale priorit&agrave; (e i valori addizionati tra loro). Liste con priorit&agrave; pi&ugrave; alta non verranno consultate.</li>
    </ul>

    <p>Esempio 1 - unisce liste di sistema e per singolo utente:</p>

    <pre>    wordlist R,user,~/wordlist.db,1
    wordlist R,system,/var/spool/bogofilter/wordlist.db,1</pre>

    <p>Esempio 2 - preferisce il dizionario utente a quello di
    sistema:</p>

    <pre>    wordlist R,user,~/wordlist.db,2
    wordlist R,system,/var/spool/bogofilter/wordlist.db,3</pre>

    <p>Esempio 3 - preferisce il dizionario di sistema a quello
    dell'utente:</p>

    <pre>    wordlist R,user,~/wordlist.db,5
    wordlist R,system,/var/spool/bogofilter/wordlist.db,4</pre>

    <p>Nota 1: le opzioni di bogofilter per la registrazione
    (<code>-s</code>, <code>-n</code>, <code>0u</code>, <code>-S</code>,
    <code>-N</code>) si applicheranno alla lista con numerazione
    inferiore.</p>

    <p>Nota 2: non &egrave; consentito avere liste di tipo 'R' e 'I' con
    la stessa priorit&agrave; perch&eacute; i tipi sono
    contraddittori.</p>

    <hr>

    <h2 id="ignore">Posso dire a bogofilter di ignorare certi termini?</h2>

    <p>Bogofilter ignorer&agrave; i termini contenuti in una lista da
    ignorare nell'assegnare il punteggio al messaggio.</p>

    <p>Esempio:</p>

    <pre> wordlist I,ignore,~/ignorelist.db,7
      wordlist R,system,/var/spool/bogofilter/wordlist.db,8</pre>

    <p>Poich&eacute; <code>ignorelist.db</code> ha un indice (7) minore di
    <code>wordlist.db</code> (8), bogofilter smetter&agrave; di cercare
    una volta trovato un termine in <code>ignorelist.db</code>.</p>

    <p>Nota: tecnicamente, bogofilter assegna un punteggio di ROBX ai
    termini e li esclude alla valutazione del parametro min_dev.</p>

    <p>Ci sono due metodi per creare/mantenere una lista di termini da
    ignorare.</p>

    <p>Primo, un file di testo pu&ograve; essere creato e mantenuto usando
    un qualsiasi editor di testi. Bogoutil pu&ograve; convertire il file
    di testo nel formato database, es.: <code>bogoutil -l ignorelist.db
    &lt; ignorelist.txt</code>.</p>

    <p>Alternativamente <code>echo ... | bogoutil ...</code> pu&ograve;
    essere utilizzato per aggiungere un singolo termine, per esempio
    &quot;ignorami&quot;, come segue:</p>

    <pre>  echo ignore.me | bogoutil -l ~/ignorelist.db</pre>

    <hr>

    <h2 id="update">Come faccio ad aggiornare da un database di termini separati al formato con liste di termini combinate?</h2>

    <p>Lancia lo script bogoupgrade. Per maggiori informazioni lancia
    <code>bogoupgrade -h</code> per visualizzare il suo messaggio di aiuto
    o esegui <code>man bogoupgrade</code> per leggere la sua pagina di
    manuale.</p>

    <hr>

    <h2 id="rescue">Come faccio a capire se le mie liste di termini sono corrotte?</h2>

    <p><strong>NOTA:</strong> alcuni distributori rinominano tutte le
    utilit&agrave; db_ nominate di seguito inserendo o postponendo il
    numero di versione, con o senza punti; per esempio db4.1_verify o
    db_verify4.2. Non esiste uno standard nel rinominare queste
    utilit&agrave;.</p>

    <p>Se pensi che i tuoi dizionari contengano errori, puoi vedere cosa
    ne pensa BerkeleyDB lanciando</p>

    <pre>    db_verify wordlist.db</pre>

    <p>Potresti riuscire a recuperare alcuni (o tutti) i termini e i loro
    valori con i seguenti comandi:</p>

    <pre>    bogoutil -d wordlist.db | bogoutil -l wordlist.new.db</pre>

    <p>oppure - se c'&egrave; stati un danno maggiore all'elenco dei
    temini - con</p>

    <pre>    db_dump -r wordlist.db &gt; wordlist.txt
    db_load wordlist.new.db &lt; wordlist.txt</pre>

    <p>Puoi anche usare un file di testo al posto della concatenazione,
    come segue:</p>

    <pre>    bogoutil -d wordlist.db &gt; wordlist.txt
    bogoutil -l wordlist.db.new &lt; wordlist.txt</pre>

    <hr>

    <h2 id="unicode">Come converto la mia lista di termini in/da unicode?</h2>

    <p>I dizionari possono essere convertiti dal formato grezzo a unicode
    usando:</p>

    <pre>    bogoutil -d wordlist.db &gt; wordlist.raw.txt
    iconv -f iso-8859-1 -t utf-8 &lt; wordlist.raw.txt &gt; wordlist.utf8.txt
    bogoutil -l wordlist.db.new &lt; wordlist.utf8.txt</pre>

    <p>oppure</p>

    <pre>    bogoutil --unicode=yes -m wordlist.db</pre>

    <p>I dizionari possono essere convertiti da unicode al formato grezzo
    usando:</p>

    <pre>    bogoutil -d wordlist.db &gt; wordlist.utf8.txt
    iconv -f utf-8  -t iso-8859-1 &lt; wordlist.utf8.txt &gt; wordlist.raw.txt
    bogoutil -l wordlist.db.new &lt; wordlist.raw.txt</pre>

    <p>oppure</p>

    <pre>    bogoutil --unicode=no -m wordlist.db</pre>

    <p>I metodi sopra citati funzionano meglio quando il dizionario
    &egrave; basato sul set di caratteri iso-8859-1. Se il tuo dizionario
    &egrave; basato su un set di caratteri differente, per esempio CP866 o
    KOI8-R, usa quel set di caratteri nei comandi presentati.</p>

    <p>Per un dizionario contenente termini in molteplici lingue, in
    particolare lingue non europee, i metodi di conversione appena
    descritti potrebbero non funzionare bene. La costruzione di un nuovo
    dizionario (da zero) funzioner&agrave; sicuramente meglio
    perch&eacute; sarebbe basato unicamente su unicode.</p>

    <hr>

    <h2 id="enable-transactions">Come passo dalla modalit&agrave; non-transaction a quella transaction?</h2>

    <p>La procedura &egrave; ampiamente documentata nel file doc/README.db
    sezione 2.2.1. Ti suggeriamo di leggere l'intera sezione.</p>

    <p>In breve, usa questi comandi:</p>

    <pre>    cd ~/.bogofilter
    bogoutil -d wordlist.db &gt; wordlist.txt
    mv wordlist.db wordlist.db.old
    bogoutil --db-transaction=yes -l wordlist.db &lt; wordlist.txt</pre>

    <p>Se tutto &egrave; andato bene, puoi rimuovere i file di backup:</p>

    <pre>    rm wordlist.db.old wordlist.txt</pre>

    <hr>

    <h2 id="disable-transactions">Come passo dalla modalit&agrave; transaction a quella non-transaction?</h2>

    <p>La procedura &egrave; ampiamente documentata nel file doc/README.db
    sezione 2.2.2. Ti suggeriamo di leggere l'intera sezione.</p>

    <p>In breve, puoi usare bogoutil per stampare/caricare il dizionario,
    per esempio:</p>

    <pre>    cd ~/.bogofilter
    bogoutil -d wordlist.db &gt; wordlist.txt
    mv wordlist.db wordlist.db.old
    rm -f log.?????????? __db.???
    bogoutil --db-transaction=no -l wordlist.db &lt; wordlist.txt</pre>

    <hr>

    <h2 id="locksize">Perch&eacute; bogofilter muore dopo aver stampato &quot;Lock table is out of available locks&quot; oppure &quot;Lock table is out of available object entries&quot;?</h2>

    <p>Le modalit&agrave; transaction e concurrent del BerkeleyDB
    richiedono una tabella dei lock che corrisponda in dimensione al
    database. Vedi il file README.db per una spiegazione dettagliata e una
    soluzione al problema.</p>

    <p>La dimensione della tabella dei lock pu&ograve; essere impostata in
    bogofilter.cf o in DB_CONFIG. Bogofilter.cf usa le direttive
    db_lk_max_locks e db_lk_max_objects, mentre DB_CONFIG usa le direttive
    set_lk_max_objects e set_lk_max_locks.</p>

    <p>Dopo aver cambiato questi valori in DB_CONFIG, lancia il comando

    <pre> bogoutil --db-recover /your/bogofilter/directory</pre> 

    <p>perricompilare le tabelle dei lock.</p>

    <hr>

    <h2 id="page-notfound">Perch&eacute; ottengo messaggi DB_PAGE_NOTFOUND?</h2>

    <p>Hai un problema con il BerkeleyDB database. Ci sono due cause
    probabili: o hai raggiunto un limite di dimensione massima o il
    database &egrave; corrotto.</p>

    <p>Alcuni MTA, come Postfix, impongono dei limiti alla dimensione dei
    file. Quando il database di bogofilter raggiunge quel limite, si
    avranno problemi in scrittura.</p>

    <p>Per vedere la dimensione del database usa:</p>

    <pre>    ls -lh $BOGOFILTER_DIR/wordlist.db</pre>

    <p>Per vedere l'impostazione di postfix:</p>

    <pre>    postconf | grep mailbox_size_limit</pre>

    <p>Per impostare il limite a 73MB (o qualunque altra sia la dimensione
    giusta per te):</p>

    <pre>    postconf -e mailbox_size_limit=73000000</pre>

    <p>Se pensi che il tuo database si possa esser corrotto, leggi la
    domanda <a href="#rescue">Come faccio a capire se le mie liste di
    termini sono corrotte?</a></p>

    <hr>

    <h2 id="db-private">Perch&eacute; ottengo &quot;Berkeley DB library configured to support only DB_PRIVATE environments&quot; o &quot;Berkeley DB library configured to support only private environments&quot;?</h2>

    <p>Alcuni distributori (per esempio il Fedora project) preparano il
    pacchetto BerkeleyDB con il supporto per i thread POSIX e quindi per i
    mutex POSIX, ma il tuo sistema non supporta i mutex POSIX (che lo
    faccia o meno dipende dalla versione del kernel e dall'esatto tipo di
    processore).</p>

    <p>Per risolvere questo problema:</p>
    <ol>
	<li>scarica, compila e installa <a
	href="http://www.sleepycat.com/products/db.shtml">BerkeleyDB</a>
	per conto tuo e poi riconfigura bogofilter:
	<ol>
	<li><kbd>cd build_unix</kbd></li>
	<li><kbd>../dist/configure --enable-cxx</kbd></li>
	<li><kbd>make</kbd></li>
	<li><kbd>make install</kbd></li>
	</ol>
	<li>Ricompila ed installa bogofilter:
	<ol>
	<li><kbd>./configure
	    --with-libdb-prefix=/usr/local/BerkeleyDB.4.3</kbd>
	<em>(sostituisci con la tua versione di Berkeley DB)</em></li>
	<li><kbd>make &amp;&amp; make check</kbd></li>
	<li><kbd>make install</kbd> <em>(se lo spazio &egrave; prezioso usa <kbd>make install-strip)</kbd></em></li>
	</ol>
    </ol>

    <hr>

    <h2 id="multi-user">Bogofilter pu&ograve; essere usato in un ambiente multiutente?</h2>

    <p>S&igrave;, &egrave; possibile. Ci sono multiple, distinte strategie
    per farlo. I due estremi sono:</p>

    <ul>
    <li>c'&egrave; un amministratore di bogofilter che mantiene un dizionario globale che tutti usano</li>
    <li>ogni utente mantiene un proprio dizionario.</li>
    </ul>

    <p>Nel mezzo, l'amministratore di bogofilter pu&ograve; creare e
    mantenere i dizionari globali e a ogni utente pu&ograve; essere data
    la scelta di usare un dizionario globale o uno privato. Un MDA, come
    procmail, pu&ograve; essere programmato per applicare prima il
    dizionario globale (con un valore di soglia dello spam molto
    stringente) e poi (se necessario) applicare il dizionario
    dell'utente.</p>

    <hr>

    <h2 id="nfs">Posso condividere le liste di termini attraverso NFS?</h2>

    <p>Se le stai solo leggendo, non ci sono problemi. Se le vuoi
    aggiornare, allora hai bisogno di usare il meccanismo di blocco dei
    file corretto per evitare perdite di dati. Quando compili bogofilter,
    dovrai verificare che lo script di configurazione abbia impostato
    <code>#define HAVE_FCNTL 1</code> nel tuo config.h. I pi&ugrave;
    diffusi sistemi operativi UNIX supporteranno tutti questa opzione. Se
    stai usando un sistema operativo atipico, o una versione pi&ugrave;
    vecchia, accertati che supporti fcntl(). Se il tuo sistema non
    supporta fcntl(), allora non potrai condividere i file di dizionario
    attraverso NFS senza il rischio di corruzione dei dati.</p>

    <p>Poi, accertati di avere configurato correttamente NFS, con
    &quot;lockd&quot; in esecuzione. Fai riferimento alla documentazione
    di NFS per maggiori informazioni sull'esecuzione di 'lockd' o
    'rpc.lockd'. La maggior parte dei sistemi operativi con NFS lo
    attivano automaticamente.</p>

    <p>Per le directory condivise (directory NFS usate da macchine
    multiple, per esempio, Sparc/Itanium/Alpha e x86), le parti specifiche
    per l'architettura pu&ograve; essere installata separatamente dando un
    diverso <code>--exec-prefix</code> (quello predefinito sar&agrave;
    <code>--prefix</code>).</p>

    <hr>

    <h2 id="return-codes">Perch&eacute; bogofilter restituisce codici come 0 e 256 quando viene lanciato dall'interno di un programma?</h2>

    <p>Probabilmente i return codes sono stati riformattati da
    waitpid(2). In C usa WEXITSTATUS(status) in sys/wait.h, o una macro
    simile, per ottenere il valore corretto. In Perl puoi usare
    semplicemente 'system("bogofilter $input") &gt;&gt; 8'. Se vuoi
    maggiori informazioni digita <code>"man waitpid"</code>.</p>

    <hr>

    <h2 id="changed-options">Ora che ho aggiornato perch&eacute; si sono corrotti i miei scripts?</h2>

    <p>Nel tempo bogofilter ha accumulato un gran numero di
    funzioni. Alcune di queste sono state abbandonate o modificate. Leggi
    il file <a href="http://bogofilter.sourceforge.net/NEWS">NEWS</a> per
    i dettagli.</p>

    <hr>

    <h2 id="changed-tagging">Ora che ho aggiornato perch&eacute; bogofilter sta lavorando peggio?</h2>

    <p>Il lexer, ovvero la parte di bogofilter che estrae i termini da un
    messaggio, si evolve. Questo comporta letture differenti dei messaggi
    con la conseguenza che alcuni termini nel database non possono
    pi&ugrave; essere usati.</p>

    <p>Se ti imbatti in questo problema sei caldamente invitato a
    ricostruire il tuo database. Se ci&ograve; non &egrave; possibile per
    te, potresti voler usare la versione <a
    href="http://sourceforge.net/project/showfiles.php?group_id=62265&amp;package_id=59357">0.15.13</a>
    e leggere la documentazione allegata per sapere come migrare il tuo
    database.</p>

    <hr>

    <h2 id="remove-spam-or-nonspam">Come posso eliminare tutti i token dello spam (o quelli non-spam)?</h2>

    <p>Bogoutil ti permette di stampare un dizionario e di caricare i
    termini in uno nuovo. Attraverso l'uso di awk e grep i conteggi
    possono essere azzerati e i termini con valori pari a zero per spam e
    non spam possono essere eliminati.</p>

    <p>I seguenti comandi elimineranno i termini dai messaggi di spam:</p>

    <pre>    bogoutil -d wordlist.db | \
    awk '{print $1 " " $2 " 0"}' | grep -v " 0 0" | \
    bogoutil -l wordlist.new.db</pre>

    <p>I seguenti comandi elimineranno i termini dai messaggi non
    spam:</p>

    <pre>    bogoutil -d wordlist.db | \
    awk '{print $1 " 0 " $3}' | grep -v " 0 0" | \
    bogoutil -l wordlist.new.db</pre>

    <hr>

    <h2 id="port-notes">Come faccio a far funzionare bogofilter su Solaris, BSD, ecc?</h2>

    <p>Se non hai gi&agrave; una versione 3.0 o maggiore di <a
    href="http://www.sleepycat.com/">BerkeleyDB</a>, allora <a
    href="http://www.sleepycat.com/download/db/">scaricala</a> (prendi una
    tra le versioni 4.4.X, 4.3.X o 4.2.X), scompattala ed esegui questi
    comandi nella directory db:</p>

    <pre>    $ cd build_unix
    $ sh ../dist/configure
    $ make
    # make install</pre>

    <p>Poi scarica una <a
    href="http://sourceforge.net/projects/bogofilter/files/">versione
    portabile</a> di bogofilter.</p>

    <h3>Su Solaris</h3>

    <p>Assicurati che la tua variabile d'ambiente PATH inizi con
    <code>/usr/xpg6/bin:/usr/xpg4/bin:/usr/ccs/bin</code> (/usr/xpg6/bin
    esiste solo su Solaris 10 e pu&ograve; essere omessa su Solaris 9 e
    versioni precedenti). Ci&ograve; &egrave; richiesto per
    compatibilit&agrave; POSIX.</p>

    <p>Scompattalo, e digita:</p>

    <pre>    $ ./configure --with-libdb-prefix=/usr/local/BerkeleyDB.4.4
    $ make
    # make install-strip</pre>

    <p>Potresti voler mettere un collegamento simbolico a libdb.so sotto
    /usr/lib, o usare una variabile d'ambiente LD_LIBRARY_PATH modificata
    prima di lanciare bogofilter. Su sistemi recenti, la via pi&ugrave;
    conveniente &egrave; di usare <code>crle(1)</code> per impostare il
    percorso permanentemente in modo che BerkeleyDB sia disponibile per
    tutte le applicazioni.</p>

    <pre>    $ LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:/usr/local/BerkeleyDB.4.4
    $ export LD_LIBRARY_PATH</pre>

    <p>Nota che alcune versioni di <code>make</code> fornite con vecchie
    versioni di Solaris falliscono se tenti di compilare bogofilter fuori
    dalla sua directory dei sorgenti. Compila nella directory dei sorgenti
    (come suggerito sopra) o usa GNU make (<code>gmake</code>).</p>

    <p>Se il tuo Solaris GCC si lamenta dicendo &quot;ld: fatal: file
    values-Xa.o: open failed: No such file or directory&quot;, installa il
    pacchetto SUNWarc.</p>

    <h3>Su FreeBSD</h3>

    <p>La collezione di ports di FreeBSD fornisce la pi&ugrave; recente
    versione stabile di bogofilter. Questo approccio usa i pacchetti di
    software portupgrade e portsnap, altamente raccomandati. Per
    installare pirtupgrade digita (dovrai farlo solo una volta), come
    root:</p>

    <pre>    # pkg_add -r portupgrade</pre>

    <p>Su versioni di FreeBSD pi&ugrave; recenti portsnap fa parte del
    sistema base. Se digitando <kbd>portsnap help</kbd> non viene stampata
    la pagina di aiuto di portsnap devi installarlo dai ports. Per farlo
    (basta una volta soltanto) digita, come root:</p>

    <pre>    # pkg_add -r portsnap</pre>

    <p>Per installare o aggiornare bogofilter, basta <a
    href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/portsnap.html">aggiornare</a>
    il tuo albero dei ports usando portsnap, poi digita, come root:</p>

    <pre>    # portupgrade -N bogofilter</pre>

    <p><em>Nota: si suppone che tu sia root.</em> Se non &egrave; questo
    il caso, leggi il seguito di questa sezione su FreeBSD e guarda come
    puoi compilare se non hai i privilegi di root.</p>

    <p>A seconda del tuo sistema potresti dover impostare alcune variabili
    d'ambiente per il comando <code>./configure</code>. Per esempio:</p>

    <pre>    $ env CPPFLAGS=-I/usr/local/include/db3 LIBS=-ldb3 LDFLAGS=-L/usr/local/lib ./configure</pre>

    <p>I percorsi reali da usare qui dipendono dal tuo sistema e dalle
    versioni di database che sono installate. Controlla e sostituisci di
    conseguenza.</p>

    <h3>Su NetBSD e altri sistemi che usano &quot;pkgsrc&quot;</h3>

    <p>pkgsrc dovrebbe offrire una versione stabile di bogofilter
    ragionevolmente recente. Vedi <a
    href="http://www.pkgsrc.org/">http://www.pkgsrc.org/</a> per
    informazioni su pkgsrc.</p>

    <h3>Su HP-UX</h3>

    <p>Leggi il file <a
    href="http://cvs.sourceforge.net/viewcvs.py/*checkout*/bogofilter/bogofilter/doc/programmer/README.hp-ux?rev=HEAD&amp;content-type=text/plain">doc/programmer/README.hp-ux</a>
    nella distribuzione con i sorgenti.</p>

    <hr>

    <h2 id="make-notes">Posso usare il comando make sul mio sistema operativo?</h2>

    <p>Bogofilter &egrave; stato compilato correttamente su molti sistemi
    operativi usando GNU make e i comandi nativi di make. Comunque, il
    Makefile di bogofilter non funziona con alcuni make.</p>

    <p>GNU make &egrave; raccomandato per compilare bogofilter
    perch&eacute; noi sappiamo come lavora. Non possiamo supportare
    comandi make meno potenti. Se il tuo comando make non GNU riesce a
    compilare correttamente bogofilter, va benissimo. Se per&ograve;
    incontri problemi la cosa giusta da fare &egrave; installare GNU
    make. Se il tuo make non-GNU non pu&ograve; compilare bogofilter, ci
    spiace ma sarai da solo. Se richiede soltanto una minima e pulita
    patch per renderlo compatibile, potremmo includerla.</p>

    <hr>

    <h2 id="build">Come compilo bogofilter come utente non-root per installarlo in una directory non standard?</h2>

    <p>Per installare bogofilter in un percorso non standard (come utente
    non-root non hai i permessi per le directory normali) hai bisogno di
    fornire il prefisso d'installazione quando lanci
    <code>./configure</code>.</p>

    <p>Dopo aver scaricato e scompattato il <a
    href="http://sourceforge.net/projects/bogofilter/files/">codice
    sorgente</a>, lancia <code>./configure --prefix=PATH</code> dove PATH
    &egrave; il prefisso di installazione per i file generati (binari,
    pagine man, ecc). Poi lancia i soliti comandi di compilazione:
    <code>make &amp;&amp; make check &amp;&amp; make install</code></p>

    <hr>

    <h2 id="patch">Come compilo bogofilter con le patch?</h2>

    <p>Se hai bisogno di applicare delle patch, recupera il <a
    href="http://sourceforge.net/projects/bogofilter/files/">codice
    sorgente</a> e scompattalo usando <code>tar -xzf</code> o <code>gunzip
    | tar -xf -</code> (come appropriato). Spostati nella directory dei
    sorgenti e lancia <code>./configure --prefix=PATH</code> dove PATH
    &egrave; il prefisso di installazione per i file generati (binari,
    pagine man, ecc). Applica le tue patch e poi lancia <code>make
    &amp;&amp; make install</code>.</p>

    <hr>

    <h2 id="small">Come rendo gli eseguibili pi&ugrave; piccoli?</h2>

    <p>Quando lo spazio &egrave; scarso, puoi usare <code>make
    install-strip</code> al posto di <code>make
    install</code>. Cos&igrave; facendo risparmierai spazio, ma i crash
    non potranno essere debuggati a meno che maggiori informazioni sul
    come riprodurre il crash non vengano fornite agli sviluppatori.</p>

    <hr>

    <h2 id="relativepath">datastore_db.c non compila!</h2>

    <p>Se stai configurando il percorso di un database, per esempio con
    --with-libdb-prefix o attraverso CPPFLAGS e LIBS, accertati di passare
    un <em>percorso assoluto</em> (con barra iniziale), un percorso
    relativo non funzionerebbe. Esempio: usa
    <kbd>--with-libdb-prefix=/usr/local/BerkeleyDB.4.2</kbd>, ma
    <em>non</em> <kbd>--with-libdb-prefix=../BerkeleyDB.4.2</kbd>.</p>

    <hr>

    <h2 id="which-muas">Con quali programmi di posta funziona bogofilter?</h2>

    <p>Sappiamo che bogofilter funziona con kmail, mozilla-mail, mutt,
    alpine, sylpheed-claws. Una ricerca con google ti
    aiuter&agrave; a trovare maggiori informazioni sull'utilizzo di
    bogofilter insieme al programma di posta che utilizzi.</p>

    <hr>

    <h2 id="with-mutt">Come uso bogofilter con mutt?</h2>

    <p>Usa un filtro per la posta elettronica (procmail, maildrop, ecc)
    per dividere i messaggi in gruppi differenti in base al return code di
    bogofilter e imposta delle associazioni di tasti per l'apprendimento
    basato sugli errori:</p>

    <pre>    macro index S "|bogofilter -s\ns=junkmail"  "Ricorda come spam e cestinalo"
    macro pager S "|bogofilter -s\ns=junkmail"  "Ricorda come spam e cestinalo"
    macro index H "|bogofilter -n\ns="          "Ricorda come ham e salvalo"
    macro pager H "|bogofilter -n\ns="          "Ricorda come ham e salvalo"</pre>

    <p>Queste associazioni filtreranno il messaggio selezionato attraverso
    bogofilter, indicandogli un falso-ham come spam o viceversa, e poi
    proponendo di salvare il messaggio in una destinazione differente.</p>

    <hr>

    <h2 id="with-sc">Come uso bogofilter con Sylpheed Claws?</h2>

    <p>Aggiungi un filtro per passare a bogofilter i messaggi in arrivo e
    un'azione da eseguire se si tratta di spam:</p>

    <pre>    condition:
    * test "bogofilter &lt; %F"
    action:
    * move "#mh/YOUR_SPAM_BOX"</pre>

    <p>Nota: si assume che bogofilter sia nel tuo path!</p>

    <p>Crea due azioni Claws - una per segnare i messaggi come spam e
    l'altra per segnarli come ham. Usa l'azione &quot;Segna come
    Spam&quot; per i messaggi erroneamente classificati come ham e usa
    &quot;Segna come Ham&quot; su quelli erroneamente classificati come
    spam.</p>

    <pre>    Mark as ham / spam:
    * bogofilter -n -v -B "%f" (mark ham)
    * bogofilter -s -v -B "%f" (mark spam)</pre>

    <p>Un altro approccio consiste nel salvare i messaggi non riconosciuti
    correttamente in una cartella e lanciare uno script come:</p>

    <pre>    #!/bin/sh
    CONFIGDIR=~/.bogofilter
    SPAMDIRS="$CONFIGDIR/spamdirs"
    MARKFILE="$CONFIGDIR/lastbogorun"
    for D in `cat "$SPAMDIRS"`; do
	find "$D" -type f -newer "$MARKFILE" -not -name ".sylpheed*"
    done|bogofilter -bNsv
    touch "$MARKFILE"</pre>

    <p>Questo script pu&ograve; essere utilizzato come un'azione e/o
    associato ad un pulsante della barra degli
    strumenti. Registrer&agrave; come spam i messaggi contenuti in
    ${SPAMDIRS} che sono pi&ugrave; recenti di ${MARKFILE}.</p>

    <p>Maggiori informazioni sono disponibili sul <a
    href="http://www.sylpheed-claws.net/faq/index.php/Using_Sylpheed-Claws_with_other_programs">
    wiki di Claws</a>.</p>

    <p>Un altro approccio &egrave; di lanciare bogofilter da procmail,
    maildrop, ecc e far controllare a Claws l'intestazione X-Bogosity e
    filtrare i messaggi nelle cartelle Spam e Incerti, es.:</p>

    <pre>    Condition:
	header "X-Bogosity" matchcase "Spam"
    Action:
	move "#mh/Mailbox/Spam"
    Condition:
	header "X-Bogosity" matchcase "Unsure"
    Action:
	move "#mh/Mailbox/Unsure"</pre>

    <p>Qualsiasi messaggio nella cartella Incerti dovrebbe essere usato
    per l'apprendimento; lo stesso per i messaggi classificati in modo
    errato come ham o spam. Le azioni seguenti gestiranno questi casi:</p>

    <pre>    Register Spam:
	bogofilter -s &lt; "%f"

    Register Ham:
	bogofilter -n &lt; "%f"

    Unregister Spam:
	bogofilter -S &lt; "%f"

    Unregister Ham:
	bogofilter -N &lt; "%f"</pre>

    <p>Per vedere all'interno del sistema di assegnazione dei punteggi di
    bogofilter, i seguenti strumenti diagnostici sono utili:</p>

    <pre>    BogoTest -vv:
	bogofilter -vv &lt; "%f"

    BogoTest -vvv:
	bogofilter -vvv &lt; "%f"</pre>

    <p>Ulteriori informazioni su questo approccio sono disponibili
    all'indirizzo <a
    href="http://www.bogofilter.org/pipermail/bogofilter/2005-March/007815.html">http://www.bogofilter.org/pipermail/bogofilter/2005-March/007815.html</a>.</p>

    <hr>

    <h2 id="with-vm">Come uso bogofilter con VM (uno strumento di Emacs per la posta)?</h2>

    <p>Devi includere il file separato vm-bogofilter.el (contenuto nella
    directory contrib di bogofilter; la versione pi&ugrave; recente del
    file si trova presso <a
    href="http://www.cis.upenn.edu/~bjornk/bogofilter/vm-bogofilter.el">http://www.cis.upenn.edu/~bjornk/bogofilter/vm-bogofilter.el</a>)
    nel path del tuo emacs.</p>

    <p>Poi, aggiungi solo nel tuo file di configurazione ~/.vm:</p>

    <pre>;; load bogofilter capabilities (spam)
;;
(require 'vm-bogofilter)

;; short-key for bogofilter
;; C (shift-c) means spam message
;; K (shift-k) means ham message
(define-key vm-mode-map "K" 'vm-bogofilter-is-spam)
(define-key vm-mode-map "C" 'vm-bogofilter-is-clean)
</pre>

    <p>Tutti i messaggi vengono filtrati da bogofilter ogni volta che
    controlli se &egrave; arrivata nuova posta. Quando modifichi lo stato
    di un messaggio, l'intestazione di bogofilter (X-Bogosity) viene
    modificata.</p>

    <p>C'&egrave; un limite: non puoi modificare le intestazioni di
    pi&ugrave; messaggi alla volta in VM; dovrai farlo un messaggio alla
    volta.</p>

    <hr>

    <h2 id="with-mh-e">Come uso bogofilter con MH-E (l'interfaccia Emacs al sistema di posta MH)?</h2>

    <p>Il valore predefinito dell'opzione 'mh-junk-program' &egrave;
    'Auto-detect' che significa che MH-E sceglier&agrave; automaticamente
    uno tra SpamAssassin, Bogofilter o SpamProbe nell'ordine
    specificato. Se, per esempio, hai sia SpamAssassin che Bogofilter
    installati e vuoi utilizzare Bogofilter, puoi assegnare a
    quest'opzione il valore 'Bogofilter'.</p>

    <p>Il comando 'J b' ('mh-junk-blacklist') istruisce il programma
    antispam in uso con il contenuto nell'intervallo e poi manipola i
    messaggi come indicato dall'opzione 'mh-junk-disposition'. Normalmente
    questa opzione &egrave; impostata come 'Elimina spam' ma puoi anche
    specificare il nome della cartella che &egrave; utile per la
    costruzione di un gruppo di messaggi di spam per scopi di
    apprendimento.</p>

    <p>Per contrasto, il comando 'J w' ('mh-junk-whitelist') riclassifica
    un intervallo di messaggi come spam se erano stati classificati
    erroneamente come spam. Esso poi riporta i messaggi nella cartella
    '+inbox'.</p>

    <p>Per maggiori informazioni, vedi la <a
    href="http://mh-e.sourceforge.net/">home page</a> di MH-E.</p>

    </body>
    </html>