Thanks to John Cummings.
This commit is contained in:
parent
9f1fdc1287
commit
d1f529f46f
27 changed files with 4344 additions and 0 deletions
176
src/cmd/upas/bayes/regen.c
Normal file
176
src/cmd/upas/bayes/regen.c
Normal file
|
|
@ -0,0 +1,176 @@
|
|||
#include <u.h>
|
||||
#include <libc.h>
|
||||
#include <bio.h>
|
||||
#include <regexp.h>
|
||||
#include "dfa.h"
|
||||
|
||||
/***
|
||||
* Regular expression for matching.
|
||||
*/
|
||||
|
||||
char *ignore[] =
|
||||
{
|
||||
/* HTML that isn't A, IMG, or FONT */
|
||||
/* Must have a space somewhere to avoid catching <email@address> */
|
||||
"<[ \n\r]*("
|
||||
"[^aif]|"
|
||||
"a[^> \t\r\n]|"
|
||||
"i[^mM \t\r\n]|"
|
||||
"im[^gG \t\r\n]|"
|
||||
"img[^> \t\r\n]|"
|
||||
"f[^oO \t\r\n]|"
|
||||
"fo[^Nn \t\r\n]|"
|
||||
"fon[^tT \t\r\n]|"
|
||||
"font[^> \r\t\n]"
|
||||
")[^>]*[ \t\n\r][^>]*>",
|
||||
"<[ \n\r]*("
|
||||
"i|im|f|fo|fon"
|
||||
")[ \t\r\n][^>]*>",
|
||||
|
||||
/* ignore html comments */
|
||||
"<!--([^\\-]|-[^\\-]|--[^>]|\n)*-->",
|
||||
|
||||
/* random mail strings */
|
||||
"^message-id:.*\n([ ].*\n)*",
|
||||
"^in-reply-to:.*\n([ ].*\n)*",
|
||||
"^references:.*\n([ ].*\n)*",
|
||||
"^date:.*\n([ ].*\n)*",
|
||||
"^delivery-date:.*\n([ ].*\n)*",
|
||||
"e?smtp id .*",
|
||||
"^ id.*",
|
||||
"boundary=.*",
|
||||
"name=\"",
|
||||
"filename=\"",
|
||||
"news:<[^>]+>",
|
||||
"^--[^ ]*$",
|
||||
|
||||
/* base64 encoding */
|
||||
"^[0-9a-zA-Z+\\-=/]+$",
|
||||
|
||||
/* uu encoding */
|
||||
"^[!-Z]+$",
|
||||
|
||||
/* little things */
|
||||
".",
|
||||
"\n",
|
||||
};
|
||||
|
||||
char *keywords[] =
|
||||
{
|
||||
"([a-zA-Z'`$!¡-]|[0-9]([.,][0-9])*)+",
|
||||
};
|
||||
|
||||
int debug;
|
||||
|
||||
Dreprog*
|
||||
dregcomp(char *buf)
|
||||
{
|
||||
Reprog *r;
|
||||
Dreprog *d;
|
||||
|
||||
if(debug)
|
||||
print(">>> '%s'\n", buf);
|
||||
|
||||
r = regcomp(buf);
|
||||
if(r == nil)
|
||||
sysfatal("regcomp");
|
||||
d = dregcvt(r);
|
||||
if(d == nil)
|
||||
sysfatal("dregcomp");
|
||||
free(r);
|
||||
return d;
|
||||
}
|
||||
|
||||
char*
|
||||
strcpycase(char *d, char *s)
|
||||
{
|
||||
int cc, esc;
|
||||
|
||||
cc = 0;
|
||||
esc = 0;
|
||||
while(*s){
|
||||
if(*s == '[')
|
||||
cc++;
|
||||
if(*s == ']')
|
||||
cc--;
|
||||
if(!cc && 'a' <= *s && *s <= 'z'){
|
||||
*d++ = '[';
|
||||
*d++ = *s;
|
||||
*d++ = *s+'A'-'a';
|
||||
*d++ = ']';
|
||||
}else
|
||||
*d++ = *s;
|
||||
if(*s == '\\')
|
||||
esc++;
|
||||
else if(esc)
|
||||
esc--;
|
||||
s++;
|
||||
}
|
||||
return d;
|
||||
}
|
||||
|
||||
void
|
||||
regerror(char *msg)
|
||||
{
|
||||
sysfatal("regerror: %s", msg);
|
||||
}
|
||||
|
||||
void
|
||||
buildre(Dreprog *re[3])
|
||||
{
|
||||
int i;
|
||||
static char buf[16384], *s;
|
||||
|
||||
re[0] = dregcomp("^From ");
|
||||
|
||||
s = buf;
|
||||
for(i=0; i<nelem(keywords); i++){
|
||||
if(i != 0)
|
||||
*s++ = '|';
|
||||
s = strcpycase(s, keywords[i]);
|
||||
}
|
||||
*s = 0;
|
||||
re[1] = dregcomp(buf);
|
||||
|
||||
s = buf;
|
||||
for(i=0; i<nelem(ignore); i++){
|
||||
if(i != 0)
|
||||
*s++ = '|';
|
||||
s = strcpycase(s, ignore[i]);
|
||||
}
|
||||
*s = 0;
|
||||
re[2] = dregcomp(buf);
|
||||
}
|
||||
|
||||
void
|
||||
usage(void)
|
||||
{
|
||||
fprint(2, "usage: regen [-d]\n");
|
||||
exits("usage");
|
||||
}
|
||||
|
||||
void
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
Dreprog *re[3];
|
||||
Biobuf b;
|
||||
|
||||
ARGBEGIN{
|
||||
default:
|
||||
usage();
|
||||
case 'd':
|
||||
debug = 1;
|
||||
}ARGEND
|
||||
|
||||
if(argc != 0)
|
||||
usage();
|
||||
|
||||
buildre(re);
|
||||
Binit(&b, 1, OWRITE);
|
||||
Bprintdfa(&b, re[0]);
|
||||
Bprintdfa(&b, re[1]);
|
||||
Bprintdfa(&b, re[2]);
|
||||
exits(0);
|
||||
}
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue