📄 phrases-main.c
字号:
#include <stdio.h>#include "ripper.h"#include "protos.h"#include "mdb.h"/******************************************************************************/char *Program="phrases";char *Help_str[] = { "syntax: phrases [options] [stem]", " add phrases to a set-valued fields of a dataset", "", "options are:", " -s: read from stdin", " -n <str>: use attribute named <str>", " -D #: max distance is #", " -N yn: add 'near' facts (default y)", " -A yn: add 'after' facts (default y)", NULL};main(argc,argv)int argc;char *argv[];{ vec_t *data; char *stem; BOOL use_stdin,add_near,add_after; int i,j,k,el,dist,end; example_t *exi; symbol_t *wj,*wk,*wnew; char cbuf[BUFSIZ]; int o; char *attr_name; int attr_index; vec_t *seti; int oldmax; /* defaults */ set_trace_level(SUMM); use_stdin = FALSE; add_near = add_after = TRUE; dist = 2; attr_name = ""; while ((o=getopt(argc,argv,"sm:D:N:A:h"))!=EOF) { switch (o) { case 's': use_stdin = TRUE; break; case 'D': dist = atoi(optarg); break; case 'N': add_near = (optarg[0]=='y' || optarg[0]=='Y'); break; case 'A': add_after = (optarg[0]=='y' || optarg[0]=='Y'); break; case 'n': attr_name = optarg; break; case 'h': case '?': default: give_help(); if (o=='h') exit(0); else fatal("option not implemented"); } } if (optind<argc) { stem = argv[optind++]; ld_names(add_ext(stem,".names")); if (use_stdin) data = ld_data(NULL); else data = ld_data(add_ext(stem,".data")); } else { data = ld_data(NULL); } if (optind<argc) { warning("not all arguments were used: %s ...",argv[optind]); } if (data==NULL || vmax(data)==0) fatal("no data!"); /* figure out which attribute is being used */ attr_index = 0; /* default */ for (i=0; i<n_fields(); i++) { if (strcmp(field_name(i),attr_name)==0) { attr_index = i; break; } } if (!set_field(attr_index)) { fatal("attribute %s is not set-valued",field_name(attr_index)); } for (i=0; i<vmax(data); i++) { exi = vref(example_t,data,i); seti = vref(aval_t,exi->inst,attr_index)->u.set; /* add phrases to example */ oldmax = vmax(seti); for (j=0; j<oldmax; j++) { end = oldmax-1; if (end >= j+dist) end = j+dist; for (k=j+1; k<=end; k++) { wj = *vref(symbol_t *,seti,j); wk = *vref(symbol_t *,seti,k); if (add_near) { for (el=k-j;el<=dist;el++) { if (strcmp(wj->name,wk->name) <= 0) { sprintf(cbuf,"near%d(%s,%s)", el,wj->name,wk->name); wnew = intern(cbuf); ext_vec(symbol_t *,seti,&wnew); } else { sprintf(cbuf,"near%d(%s,%s)", el,wj->name,wk->name); wnew = intern(cbuf); ext_vec(symbol_t *,seti,&wnew); } } } if (add_after) { sprintf(cbuf,"after%d(%s,%s)", dist,wj->name,wk->name); wnew = intern(cbuf); ext_vec(symbol_t *,seti,&wnew); } }/* for later word k*/ }/*for earlier word j*/ } /* for example i */ /* print the extended dataset */ print_data(data);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -