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 <relson@osagesoftware.com><br>
Traduzione italiana di Marco Bozzolan <bozzolan@gmail.com></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ò 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'è 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'è la modalità <i>insicura</i>?</a></li>
<li><a href="#train-on-error">Cosa sono l'"apprendimento dagli errori" e l'"apprendimento per esaurimento"</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à non-transaction a quella transaction?</a></li>
<li><a href="#disable-transactions">Come passo dalla modalità transaction a quella non-transaction?</a></li>
<li><a href="#locksize">Perché bogofilter muore dopo aver stampato<br>
"Lock table is out of available locks" oppure<br>
"Lock table is out of available object entries"?
</a></li>
<li><a href="#page-notfound">Perché ottengo messaggi DB_PAGE_NOTFOUND?</a></li>
<li><a href="#db-private">Perché ottengo "Berkeley
DB library configured to support only DB_PRIVATE
environments" o "Berkeley DB library configured to
support only private environments"?</a></li>
</ul>
</li>
<li>Problemi tecnici
<ul>
<li><a href="#multi-user">Bogofilter può 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é 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é si sono corrotti i miei scripts?</a></li>
<li><a href="#changed-tagging">Ora che ho aggiornato perché 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à
<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ù 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'è bogofilter?</h2>
<p>Bogofilter è 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
"<a href="http://www.paulgraham.com/spam.html">A plan for
spam</a>" ("Un piano per lo spam"). 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 è il punto di riferimento per
le risorse relative a bogofilter.</p>
<p>Bogofilter è stato iniziato da <a
href="http://catb.org/%7Eesr/">Eric S. Raymond</a> il 19 agosto
2002. Ha guadagnato popolarità 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 è 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à (<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 è
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ò potresti avere delle domande. La
prima potrebbe essere "Bogofilter è davvero un filtro
baesiano?". Bogofilter è basato sul teorema di Bayes e lo
usa per i calcoli iniziali e successivamente per altri metodi
statistici. Senza dubbio è 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: "No, non
sono soddisfatte" e "A noi non interessano, fintanto che
funziona". Una risposta più articolata spiegherà
che l'ipotesi di partenza che "una e-mail è una raccolta
casuale di parole, ciascuna indipendente dalle altre" è
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 è vero il contrario.</li>
<li>le parole usate non sono casuali, benché alcuni spammer inseriscano termini "a casaccio"</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ù 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
"tali scostamenti dalla realtà di solito sono a nostro
favore" (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 è: quello
che importa maggiormente è 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 è moderata e viene utilizzata
solo per annunci importanti (come quelli relativi a nuove
versioni). È 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
è meglio avere collezioni (il più 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 — 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ù estese,
piuttosto che più ristrette. Più la tua base
d'apprendimento è ristretta, più alto sarà il
numero di errori che bogofilter farà 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 < spam.mbox
bogofilter -n < 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 è costruire un database di quelle parole
<em>necessarie</em> per classificare correttamente i messaggi. Il
database risultante è più 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à
questa operazione finché tutti i messaggi nella tua collezione
per l'apprendimento saranno classificati correttamente (puoi anche
correggere il livello di certezza). Poiché lo script si
assicura che il database comprenda la tua collezione iniziale
"esattamente" (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 è:</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à un
database che sarà pié comprensivo e significativamente
pié 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 >msg.$$
bogofilter $* <msg.$$
res=$?
if [ $res = 0 ]; then
cat msg.$$ >>corpus.bad
elif [ $res = 1 ]; then
cat msg.$$ >>corpus.good
elif [ $res = 2 ]; then
cat msg.$$ >>corpus.unsure
fi
rm msg.$$</pre>
<pre> #! /bin/sh
# classify -- put all messages in mbox through class3
src=$1;
shift
formail -s class3 $* <$src</pre>
<p>Nel nostro esempio (dopo l'apprendimento completo iniziale):</p>
<pre> classify spam.mbox [bogofilter options]
bogofilter -s < corpus.good
rm -f corpus.*
classify ham.mbox [bogofilter options]
bogofilter -n < corpus.bad
rm -f corpus.*</pre></li>
</ul>
<h3>Confronto tra i metodi</h3>
<p>È importante capire le conseguenze dei metodi appena
descritti. Fare l'apprendimento completo come nei metodi 1 e 4 produce
un database più 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 è il più
rapido. L'apprendimento sugli errori (nei metodi 2, 3 e 4) è
efficente, ma l'apprendimento iniziale richiede più tempo.</p>
<hr>
<h2 id="production">Come posso mantenere alta l'accuratezza nell'assegnazione del punteggio?</h2>
<p>Bogofilter farà degli errori di tanto in tanto. Dunque
l'apprendimento costante è importante. Ci sono due metodi
principali per fare ciò. 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é potresti voler ricostruire il tuo database ad un
certo punto, per esempio quando una nuova funzionalità viene
implementata in bogofilter, può 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à degli errori, ad esempio
classificare ham come spam (falsi positivi) o spam come ham (falsi
negativi). Per ridurre la possibilità che l'errore si ripeta,
è 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é bogofilter talvolta sbaglia nella
classificazione di un messaggio, un monitoraggio è 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ù piccolo
è il database, più alta è la possibilità
che un errore nell'apprendimento causi una classificazione errata.</p>
<p>L'utilizzo di un metodo come il 2 o il 3 (sopra) può
compensare questo effetto. Ripeti l'apprendimento con la collezione
iniziale completa (includendo tutti i nuovi messaggi aggiunti dal
precedente apprendimento). Questo aggiungerà messaggi al
database, il quale mostrerà 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, è 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à 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ò 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é può 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ò essere istruito per mostrare informazioni
sulla valutazione di un messaggio lanciandolo con le opzioni
"-v", "-vv", "-vvv" o
"-R".</p>
<ul>
<li>
Utilizzando "-v" bogofilter genera la riga d'intestazione "X-Bogosity:", come nell'esempio:
<pre> X-Bogosity: Ham, tests=bogofilter, spamicity=0.500000</pre>
</li>
<li>
Utilizzando "-vv" 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à 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 "-vvv" 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>"…"</dt><dd>il blocco in questione</dd>
<dt>n</dt><dd>il numero di volte che il blocco è 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à vicino a zero se un messaggio contenente questo blocco non sembra essere spam, mentre sarà vicino a uno se sembrerà 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 è più 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 "-R" si ottiene lo stesso risultato di "-vvv" sopra descritto più 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 "-R" è 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'è la modalità <i>insicura</i>?</h2>
<p>La configurazione predefinita di bogofilter classificherà un
messaggio come spam o non spam. Per fare ciò 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ì/No/Incerto rimuovi i
caratteri # dalle ultime due righe.</p>
<p>Alternativamente, se preferisci utilizzare le etichette
Sì/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ò, 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'"apprendimento dagli errori" e l'"apprendimento per esaurimento"</h2>
<p>L'"apprendimento dagli errori" 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. È 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ò essere rafforzato utilizzando un
"margine di sicurezza". 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ù ampi aiutano di più (ma neanche
impostarli troppo ampi è una scelta ottimale). Come regola
empirica il valore di soglia più o meno 0.3 dà buoni
risultati. Per la modalità a tre stati, potresti provare la
metà dell'intervallo per i messaggi incerti più o meno
0.3.</p>
<p>Ripetere l'apprendimento dagli errori sullo stesso insieme di
messaggi può migliorare la precisione. L'idea è che i
messaggi che erano stati valutati correttamente nella prima occasione
potrebbero non esserlo più dopo nuovo apprendimento, e in
questo modo sarebbero corretti.</p>
<p>L'"apprendimento per esaurimento" consiste nel ripetere
l'apprendimento dagli errori, con lo stesso insieme di messaggi,
finché non viene commesso più alcun errore. Anche questo
metodo può 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
"Refinance now - best Mortgage rates". Esso conterrà
alcune parole che bogofilter ha già 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ù semplice è 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ò:</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é non conoscono quelle
lingue e non conoscono gente di laggiù, concludono si tratti di
spam.</p>
<p>La buona notizia è che bogofilter individua quei messaggi
con buon successo. Quella cattiva è che questo può
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à i messaggi
nel miglior modo e aggiungerà i termini al dizionario dello
spam. Il dizionario conterrà molti termini che non avranno
senso per te (visto che il set di caratteri non può essere
visualizzato), ma bogofilter può lavorare senza problemi con
essi e identificare con successo lo spam asiatico.</p></li>
<li><p>Un secondo metodo consiste nell'utilizzare l'opzione
"replace_nonascii_characters" nel file di
configurazione. Questo sostituirà i caratteri con bit alto,
ovvero quelli compresi tra 0x80 e 0xFF, con punti interrogativi,
'?'. Questo terrà il database molto più
piccolo. Sfortunatamente questo metodo non è 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à
il database di dimensioni contenute. Puoi farlo con uno script per
MDA.</p>
<p>Segue un file di regole per procmail che accantonerà 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à
<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ù 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 è necessario per duplicare il tuo ambiente di
database (per poter supportare il processo delle transazioni
BerkeleyDB). La tua directory originale verrà rinominata in
~/.bogofilter.old e ~/.bogofilter conterrà il nuovo ambiente
database.</p>
<p>Poiché versioni precedenti di bogofilter non usano le
transazioni Berkeley DB, il database è un file singolo
(wordlist.db) e non è 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 "example.com".</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
"example.com"</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à il totale.</p>
<hr>
<h2 id="multiple">Posso usare liste di termini multiple?</h2>
<p>Sì. Bogofilter può essere lanciato con dizionari
multipli. Per esempio, se hai dizionari di sistema e per singoli
utenti, bogofilter può essere configurato in modo che controlli
il dizionario dell'utente e, se non trova la parola, allora controlli
il dizionario di sistema. Alternativamente, può 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à.</p>
<ul>
<li>Tipo: 'R' e 'I' (per "regolare" e "ignora"). I dizionari in uso sono di tipo 'R'. Il tipo 'I' significa "non assegnare punteggio al termine se trovato nella lista di quelli da ignorare"</li>
<li>Nome: un breve simbolo identificativo usato nella stampa dei messaggi di errore. Esempi sono "globale", "utente" e "ignora", ma puoi usare qualunque identificativo tu voglia.</li>
<li>Nome del file: il nome (percorso) del file. All'apertura del dizionario, se il nome è completamente descritto (con un '/' o '~' iniziale) viene usato quel nome. Altrimenti bogofilter premetterà la directory, seguendo il normale ordine di ricerca: $BOGOFILTER_DIR, $BOGODIR, $HOME.</li>
<li>Priorità: 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à (e i valori addizionati tra loro). Liste con priorità più 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 è consentito avere liste di tipo 'R' e 'I' con
la stessa priorità perché i tipi sono
contraddittori.</p>
<hr>
<h2 id="ignore">Posso dire a bogofilter di ignorare certi termini?</h2>
<p>Bogofilter ignorerà 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é <code>ignorelist.db</code> ha un indice (7) minore di
<code>wordlist.db</code> (8), bogofilter smetterà 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ò essere creato e mantenuto usando
un qualsiasi editor di testi. Bogoutil può convertire il file
di testo nel formato database, es.: <code>bogoutil -l ignorelist.db
< ignorelist.txt</code>.</p>
<p>Alternativamente <code>echo ... | bogoutil ...</code> può
essere utilizzato per aggiungere un singolo termine, per esempio
"ignorami", 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à 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à.</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'è stati un danno maggiore all'elenco dei
temini - con</p>
<pre> db_dump -r wordlist.db > wordlist.txt
db_load wordlist.new.db < wordlist.txt</pre>
<p>Puoi anche usare un file di testo al posto della concatenazione,
come segue:</p>
<pre> bogoutil -d wordlist.db > wordlist.txt
bogoutil -l wordlist.db.new < 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 > wordlist.raw.txt
iconv -f iso-8859-1 -t utf-8 < wordlist.raw.txt > wordlist.utf8.txt
bogoutil -l wordlist.db.new < 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 > wordlist.utf8.txt
iconv -f utf-8 -t iso-8859-1 < wordlist.utf8.txt > wordlist.raw.txt
bogoutil -l wordlist.db.new < 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
è basato sul set di caratteri iso-8859-1. Se il tuo dizionario
è 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à sicuramente meglio
perché sarebbe basato unicamente su unicode.</p>
<hr>
<h2 id="enable-transactions">Come passo dalla modalità non-transaction a quella transaction?</h2>
<p>La procedura è 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 > wordlist.txt
mv wordlist.db wordlist.db.old
bogoutil --db-transaction=yes -l wordlist.db < wordlist.txt</pre>
<p>Se tutto è 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à transaction a quella non-transaction?</h2>
<p>La procedura è 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 > wordlist.txt
mv wordlist.db wordlist.db.old
rm -f log.?????????? __db.???
bogoutil --db-transaction=no -l wordlist.db < wordlist.txt</pre>
<hr>
<h2 id="locksize">Perché bogofilter muore dopo aver stampato "Lock table is out of available locks" oppure "Lock table is out of available object entries"?</h2>
<p>Le modalità 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ò 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é 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 è 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é ottengo "Berkeley DB library configured to support only DB_PRIVATE environments" o "Berkeley DB library configured to support only private environments"?</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 && make check</kbd></li>
<li><kbd>make install</kbd> <em>(se lo spazio è prezioso usa <kbd>make install-strip)</kbd></em></li>
</ol>
</ol>
<hr>
<h2 id="multi-user">Bogofilter può essere usato in un ambiente multiutente?</h2>
<p>Sì, è possibile. Ci sono multiple, distinte strategie
per farlo. I due estremi sono:</p>
<ul>
<li>c'è 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ò creare e
mantenere i dizionari globali e a ogni utente può essere data
la scelta di usare un dizionario globale o uno privato. Un MDA, come
procmail, può 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ù
diffusi sistemi operativi UNIX supporteranno tutti questa opzione. Se
stai usando un sistema operativo atipico, o una versione più
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
"lockd" 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ò essere installata separatamente dando un
diverso <code>--exec-prefix</code> (quello predefinito sarà
<code>--prefix</code>).</p>
<hr>
<h2 id="return-codes">Perché 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") >> 8'. Se vuoi
maggiori informazioni digita <code>"man waitpid"</code>.</p>
<hr>
<h2 id="changed-options">Ora che ho aggiornato perché 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é 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ù essere usati.</p>
<p>Se ti imbatti in questo problema sei caldamente invitato a
ricostruire il tuo database. Se ciò non è possibile per
te, potresti voler usare la versione <a
href="http://sourceforge.net/project/showfiles.php?group_id=62265&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à 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ò essere omessa su Solaris 9 e
versioni precedenti). Ciò è richiesto per
compatibilità 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ù
conveniente è 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 "ld: fatal: file
values-Xa.o: open failed: No such file or directory", installa il
pacchetto SUNWarc.</p>
<h3>Su FreeBSD</h3>
<p>La collezione di ports di FreeBSD fornisce la più 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ù 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 è 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 "pkgsrc"</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&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 è 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 è raccomandato per compilare bogofilter
perché 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ò
incontri problemi la cosa giusta da fare è installare GNU
make. Se il tuo make non-GNU non può 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
è il prefisso di installazione per i file generati (binari,
pagine man, ecc). Poi lancia i soliti comandi di compilazione:
<code>make && make check && 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
è il prefisso di installazione per i file generati (binari,
pagine man, ecc). Applica le tue patch e poi lancia <code>make
&& make install</code>.</p>
<hr>
<h2 id="small">Come rendo gli eseguibili più piccoli?</h2>
<p>Quando lo spazio è scarso, puoi usare <code>make
install-strip</code> al posto di <code>make
install</code>. Così 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à 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 < %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 "Segna come
Spam" per i messaggi erroneamente classificati come ham e usa
"Segna come Ham" 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ò essere utilizzato come un'azione e/o
associato ad un pulsante della barra degli
strumenti. Registrerà come spam i messaggi contenuti in
${SPAMDIRS} che sono più 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 è 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 < "%f"
Register Ham:
bogofilter -n < "%f"
Unregister Spam:
bogofilter -S < "%f"
Unregister Ham:
bogofilter -N < "%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 < "%f"
BogoTest -vvv:
bogofilter -vvv < "%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ù 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 è arrivata nuova posta. Quando modifichi lo stato
di un messaggio, l'intestazione di bogofilter (X-Bogosity) viene
modificata.</p>
<p>C'è un limite: non puoi modificare le intestazioni di
più 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' è
'Auto-detect' che significa che MH-E sceglierà 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 è impostata come 'Elimina spam' ma puoi anche
specificare il nome della cartella che è 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>
|