void put_local_vars_in_opts(Parse_Options opts) { parse_options_set_verbosity(opts, local.verbosity); parse_options_set_max_parse_time(opts, local.timeout); parse_options_set_max_memory(opts, local.memory); parse_options_set_linkage_limit(opts, local.linkage_limit); parse_options_set_null_block(opts, local.null_block); parse_options_set_islands_ok(opts, local.islands_ok); parse_options_set_short_length(opts, local.short_length); parse_options_set_echo_on(opts, local.echo_on); parse_options_set_batch_mode(opts, local.batch_mode); parse_options_set_panic_mode(opts, local.panic_mode); parse_options_set_screen_width(opts, local.screen_width); parse_options_set_allow_null(opts, local.allow_null); parse_options_set_screen_width(opts, local.screen_width); parse_options_set_display_on(opts, local.display_on); parse_options_set_display_postscript(opts, local.display_postscript); parse_options_set_display_constituents(opts, local.display_constituents); parse_options_set_max_sentence_length(opts, local.max_sentence_length); parse_options_set_display_bad(opts, local.display_bad); parse_options_set_display_links(opts, local.display_links); parse_options_set_display_walls(opts, local.display_walls); parse_options_set_display_union(opts, local.display_union); }
static void put_local_vars_in_opts(Parse_Options opts) { parse_options_set_verbosity(opts, local.verbosity); parse_options_set_max_parse_time(opts, local.timeout); parse_options_set_max_memory(opts, local.memory); parse_options_set_linkage_limit(opts, local.linkage_limit); parse_options_set_null_block(opts, local.null_block); parse_options_set_islands_ok(opts, local.islands_ok); parse_options_set_spell_guess(opts, local.spell_guess); parse_options_set_short_length(opts, local.short_length); parse_options_set_echo_on(opts, local.echo_on); parse_options_set_cost_model_type(opts, local.cost_model); parse_options_set_disjunct_costf(opts, local.max_cost); parse_options_set_batch_mode(opts, local.batch_mode); parse_options_set_panic_mode(opts, local.panic_mode); parse_options_set_screen_width(opts, local.screen_width); parse_options_set_allow_null(opts, local.allow_null); parse_options_set_use_cluster_disjuncts(opts, local.use_cluster_disjuncts); #ifdef USE_FAT_LINKAGES parse_options_set_use_fat_links(opts, local.use_fat_links); parse_options_set_display_union(opts, local.display_union); #endif /* USE_FAT_LINKAGES */ #ifdef USE_SAT_SOLVER parse_options_set_use_sat_parser(opts, local.use_sat_solver); #endif parse_options_set_use_viterbi(opts, local.use_viterbi); parse_options_set_screen_width(opts, local.screen_width); parse_options_set_display_on(opts, local.display_on); parse_options_set_display_postscript(opts, local.display_postscript); parse_options_set_display_constituents(opts, local.display_constituents); parse_options_set_max_sentence_length(opts, local.max_sentence_length); parse_options_set_display_bad(opts, local.display_bad); parse_options_set_display_disjuncts(opts, local.display_disjuncts); parse_options_set_display_links(opts, local.display_links); parse_options_set_display_senses(opts, local.display_senses); parse_options_set_display_walls(opts, local.display_walls); }
int main(int argc, char * argv[]) { FILE *input_fh = stdin; Dictionary dict; Sentence sent; const char *language="en"; /* default to english, and not locale */ int pp_on=TRUE; int af_on=TRUE; int cons_on=TRUE; int num_linkages, i; char *input_string; Label label = NO_LABEL; const char *codeset; /*############################################################################################*/ int num=0; FILE *fp2,*fp_word_info,*fp_num,*fp_lname,*fp_rel,*fp_lcount,*fp_word_cat,*fp_word; /*##############################################################################################*/ i = 1; /*############################################################################################*/ if (argc > 4){ num =atoi(argv[4]); num=num-1; /// language = argv[1]; /*####################################################################################*/ // // if ((argc > 1) && (argv[1][0] != '-')) { /* the dictionary is the first argument if it doesn't begin with "-" */ // language = argv[1]; i++; } /*################################*/ language = argv[1]; /*################################*/ /* Get the locale from the environment... * perhaps we should someday get it from the dictionary ?? */ setlocale(LC_ALL, ""); /* Check to make sure the current locale is UTF8; if its not, * then force-set this to the english utf8 locale */ codeset = nl_langinfo(CODESET); if (!strstr(codeset, "UTF") && !strstr(codeset, "utf")) { setlocale(LC_CTYPE, "en_US.UTF-8"); } /*########################################*/ for (; i<argc-3; i++) { /*########################################*/ if (argv[i][0] == '-') { if (strcmp("--version", argv[i])==0) { printf("Version: %s\n", linkgrammar_get_version()); exit(0); } else if (strcmp("-ppoff", argv[i])==0) { pp_on = FALSE; } else if (strcmp("-coff", argv[i])==0) { cons_on = FALSE; } else if (strcmp("-aoff", argv[i])==0) { af_on = FALSE; } else if (strcmp("-batch", argv[i])==0) { } else if (strncmp("-!", argv[i],2)==0) { } else { print_usage(argv[0]); } } else { print_usage(argv[0]); } } opts = parse_options_create(); if (opts == NULL) { fprintf(stderr, "%s: Fatal error: unable to create parse options\n", argv[0]); exit(-1); } panic_parse_opts = parse_options_create(); if (panic_parse_opts == NULL) { fprintf(stderr, "%s: Fatal error: unable to create panic parse options\n", argv[0]); exit(-1); } setup_panic_parse_options(panic_parse_opts); parse_options_set_max_sentence_length(opts, 170); parse_options_set_panic_mode(opts, TRUE); parse_options_set_max_parse_time(opts, 30); parse_options_set_linkage_limit(opts, 1000); parse_options_set_short_length(opts, 10); /*##########################################*/ // parse_options_set_display_on(opts, TRUE); /*##########################################*/ if(language && *language) dict = dictionary_create_lang(language); else dict = dictionary_create_default_lang(); if (dict == NULL) { /*###########################################################################*/ fprintf(stderr, "%s: Fatal error: Unable to open dictionary.\n", argv[1]); /*##########################################################################*/ exit(-1); } /* process the command line like commands */ for (i=1; i<argc; i++) { if ((strcmp("-pp", argv[i])==0) || (strcmp("-c", argv[i])==0) || (strcmp("-a", argv[i])==0)) { i++; } else if ((argv[i][0] == '-') && (strcmp("-ppoff", argv[i])!=0) && (argv[i][0] == '-') && (strcmp("-coff", argv[i])!=0) && (argv[i][0] == '-') && (strcmp("-aoff", argv[i])!=0)) { if (argv[i][1] == '!') issue_special_command(argv[i]+2, opts, dict); else issue_special_command(argv[i]+1, opts, dict); } } verbosity = parse_options_get_verbosity(opts); /* Main input loop */ while (1) { input_string = fget_input_string(input_fh, stdout, opts); if (NULL == input_string) { if (input_fh == stdin) break; fclose (input_fh); input_fh = stdin; continue; } if ((strcmp(input_string, "quit\n")==0) || (strcmp(input_string, "exit\n")==0)) break; /* We have to handle the !file command inline; its too hairy * otherwise ... */ if (strncmp(input_string, "!file", 5) == 0) { char * filename = &input_string[6]; input_fh = fopen(filename, "r"); if (NULL == input_fh) { int perr = errno; fprintf(stderr, "Error: %s (%d) %s\n", filename, perr, strerror(perr)); input_fh = stdin; continue; } continue; } if (special_command(input_string, dict)) continue; if (parse_options_get_echo_on(opts)) { printf("%s", input_string); } if (parse_options_get_batch_mode(opts)) { label = strip_off_label(input_string); } sent = sentence_create(input_string, dict); if (sent == NULL) continue; if (sentence_length(sent) > parse_options_get_max_sentence_length(opts)) { if (verbosity > 0) { fprintf(stdout, "Sentence length (%d words) exceeds maximum allowable (%d words)\n", sentence_length(sent), parse_options_get_max_sentence_length(opts)); } sentence_delete(sent); continue; } /* First parse with cost 0 or 1 and no null links */ parse_options_set_disjunct_cost(opts, 2); parse_options_set_min_null_count(opts, 0); parse_options_set_max_null_count(opts, 0); parse_options_reset_resources(opts); num_linkages = sentence_parse(sent, opts); //############################################################################################ if(num+1>num_linkages && num_linkages != 0) { sprintf(link_info_filename,"%s/%s_tmp/linkid_cat.txt",argv[2],argv[3]); fp2 = fopen(link_info_filename,"a"); if(fp2==NULL) {printf("Could not open %s for writing\n",link_info_filename);exit(1);} fprintf(fp2,";~~~~~~~~~~\n"); fclose(fp2); sprintf(link_info_filename,"%s/%s_tmp/linkid_word.txt",argv[2],argv[3]); fp_word= fopen(link_info_filename, "a"); if(fp_word==NULL) {printf("Could not open %s for writing\n",link_info_filename);exit(1);} fprintf(fp_word,";~~~~~~~~~~\n"); fclose(fp_word); sprintf(link_info_filename,"%s/%s_tmp/link_numeric_word.txt",argv[2],argv[3]); fp_word_info= fopen(link_info_filename, "a"); if(fp_word_info==NULL) {printf("Could not open %s for writing\n",link_info_filename);exit(1);} fprintf(fp_word_info,";~~~~~~~~~~\n"); fclose(fp_word_info); sprintf(link_info_filename,"%s/%s_tmp/link_name_expand.txt",argv[2],argv[3]); fp_lname =fopen(link_info_filename,"a"); if(fp_lname==NULL) {printf("Could not open %s for writing\n",link_info_filename);exit(1);} fprintf(fp_lname,";~~~~~~~~~~\n"); fclose(fp_lname); sprintf(link_info_filename,"%s/%s_tmp/link_relation_info.txt",argv[2],argv[3]); fp_rel = fopen(link_info_filename,"a"); if(fp_rel==NULL) {printf("Could not open %s for writing\n",link_info_filename);exit(1);} fprintf(fp_rel,";~~~~~~~~~~\n"); fclose(fp_rel); /* sprintf(link_info_filename,"%s/%s_tmp/constituents.txt",argv[2],argv[3]); fp = fopen(link_info_filename,"a"); if(fp==NULL) {printf("Could not open %s for writing\n",link_info_filename);exit(1);} fprintf(fp,"\n"); fprintf(fp,";~~~~~~~~~~\n"); fclose(fp);*/ } sprintf(link_info_filename,"%s/%s_tmp/linkage_count.txt",argv[2],argv[3]); fp_lcount = fopen(link_info_filename,"a"); if(fp_lcount==NULL) {printf("Could not open %s for writing\n",link_info_filename);exit(1);} fprintf(fp_lcount, "(Found maximum of %d linkages )\n",num_linkages); fprintf(fp_lcount,";~~~~~~~~~~\n"); fclose(fp_lcount); //############################################################################################ if (num_linkages < 0) continue; /* Now parse with null links */ if ((num_linkages == 0) && (!parse_options_get_batch_mode(opts))) { if (verbosity > 0) //fprintf(stdout, "No complete linkages found.\n"); //############################################################################################ /* This part of the code written by Maha Laxmi and Shirisha Manju * if no complete linkage is found then redirect the output to standard output in clips format*/ sprintf(link_info_filename,"%s/%s_tmp/number.txt",argv[2],argv[3]); fp_num =fopen(link_info_filename,"a"); if(fp_num==NULL) {printf("Could not open %s for writing\n",link_info_filename);exit(1);} /* sprintf(link_info_filename,"%s/%s_tmp/constituents.txt",argv[2],argv[3]); fp_cons= fopen(link_info_filename,"a"); if(fp_cons==NULL) {printf("Could not open %s for writing\n",link_info_filename);exit(1);}*/ sprintf(link_info_filename,"%s/%s_tmp/linkid_word.txt",argv[2],argv[3]); fp_word= fopen(link_info_filename, "a"); if(fp_word==NULL) {printf("Could not open %s for writing\n",link_info_filename);exit(1);} sprintf(link_info_filename,"%s/%s_tmp/link_numeric_word.txt",argv[2],argv[3]); fp_word_info= fopen(link_info_filename, "a"); if(fp_word_info==NULL) {printf("Could not open %s for writing\n",link_info_filename);exit(1);} sprintf(link_info_filename,"%s/%s_tmp/linkid_cat.txt",argv[2],argv[3]); fp_word_cat= fopen(link_info_filename, "a"); if(fp_word_cat==NULL) {printf("Could not open %s for writing\n",link_info_filename);exit(1);} sprintf(link_info_filename,"%s/%s_tmp/link_name_expand.txt",argv[2],argv[3]); fp_lname =fopen(link_info_filename,"a"); if(fp_lname==NULL) {printf("Could not open %s for writing\n",link_info_filename);exit(1);} sprintf(link_info_filename,"%s/%s_tmp/link_relation_info.txt",argv[2],argv[3]); fp_rel = fopen(link_info_filename,"a"); if(fp_rel==NULL) {printf("Could not open %s for writing\n",link_info_filename);exit(1);} fprintf(fp_word, "\n(No complete linkages found)\n"); fprintf(fp_word_cat, "\n(No complete linkages found)\n"); fprintf(fp_word_info, "\n(No complete linkages found)\n"); fprintf(fp_lname, "\n(No complete linkages found)\n"); fprintf(fp_rel,"\n(No complete linkages found)\n"); fprintf(fp_word_cat,";~~~~~~~~~~\n"); // fprintf(fp_cons,";~~~~~~~~~~\n"); fprintf(fp_lname,";~~~~~~~~~~\n"); fprintf(fp_rel,";~~~~~~~~~~\n"); fprintf(fp_word_info,";~~~~~~~~~~\n"); fprintf(fp_word,";~~~~~~~~~~\n"); /* fclose(fp_cons); */ fclose(fp_word_cat); fclose(fp_word_info); fclose(fp_lname); fclose(fp_rel); fclose(fp_word); continue; /*###############################################################################################################*/ if (parse_options_get_allow_null(opts)) { parse_options_set_min_null_count(opts, 1); parse_options_set_max_null_count(opts, sentence_length(sent)); num_linkages = sentence_parse(sent, opts); } } if (parse_options_timer_expired(opts)) { if (verbosity > 0) fprintf(stdout, "Timer is expired!\n"); } if (parse_options_memory_exhausted(opts)) { if (verbosity > 0) fprintf(stdout, "Memory is exhausted!\n"); } if ((num_linkages == 0) && parse_options_resources_exhausted(opts) && parse_options_get_panic_mode(opts)) { /* print_total_time(opts); */ if (verbosity > 0) fprintf(stdout, "Entering \"panic\" mode...\n"); parse_options_reset_resources(panic_parse_opts); parse_options_set_verbosity(panic_parse_opts, verbosity); num_linkages = sentence_parse(sent, panic_parse_opts); if (parse_options_timer_expired(panic_parse_opts)) { if (verbosity > 0) fprintf(stdout, "Timer is expired!\n"); } } /* print_total_time(opts); */ if (parse_options_get_batch_mode(opts)) { //####################################################################### batch_process_some_linkages(label, sent, opts,argv[2],argv[3]); //######################################################################### // batch_process_some_linkages(label, sent, opts); } /*###############################################################################*/ // send num as an argument to process_some_linkages else { int c = process_some_linkages(sent, opts,num,argv[2],argv[3]); if (c == EOF) break; } /*################################################################################*/ /* else { int c = process_some_linkages(sent, opts); if (c == EOF) break; }*/ sentence_delete(sent); } if (parse_options_get_batch_mode(opts)) { /* print_time(opts, "Total"); */ /* fprintf(stderr, "%d error%s.\n", batch_errors, (batch_errors==1) ? "" : "s");*/ } parse_options_delete(panic_parse_opts); parse_options_delete(opts); dictionary_delete(dict); // printf ("Bye.\n"); return 0; }
int main(int argc, char * argv[]) { Dictionary dict; Sentence sent; char *dictionary_file=NULL; char *post_process_knowledge_file=NULL; char *constituent_knowledge_file=NULL; char *affix_file=NULL; int pp_on=TRUE; int af_on=TRUE; int cons_on=TRUE; int num_linkages, i; char input_string[MAXINPUT]; Label label = NO_LABEL; int parsing_space_leaked, reported_leak, dictionary_and_option_space; i = 1; if ((argc > 1) && (argv[1][0] != '-')) { /* the dictionary is the first argument if it doesn't begin with "-" */ dictionary_file = argv[1]; i++; } for (; i<argc; i++) { if (argv[i][0] == '-') { if (strcmp("-pp", argv[i])==0) { if ((post_process_knowledge_file != NULL) || (i+1 == argc)) print_usage(argv[0]); post_process_knowledge_file = argv[i+1]; i++; } else if (strcmp("-c", argv[i])==0) { if ((constituent_knowledge_file != NULL) || (i+1 == argc)) print_usage(argv[0]); constituent_knowledge_file = argv[i+1]; i++; } else if (strcmp("-a", argv[i])==0) { if ((affix_file != NULL) || (i+1 == argc)) print_usage(argv[0]); affix_file = argv[i+1]; i++; } else if (strcmp("-ppoff", argv[i])==0) { pp_on = FALSE; } else if (strcmp("-coff", argv[i])==0) { cons_on = FALSE; } else if (strcmp("-aoff", argv[i])==0) { af_on = FALSE; } else if (strcmp("-batch", argv[i])==0) { } else if (strncmp("-!", argv[i],2)==0) { } else { print_usage(argv[0]); } } else { print_usage(argv[0]); } } if (!pp_on && post_process_knowledge_file != NULL) print_usage(argv[0]); if (dictionary_file == NULL) { dictionary_file = "4.0.dict"; fprintf(stderr, "No dictionary file specified. Using %s.\n", dictionary_file); } if (af_on && affix_file == NULL) { affix_file = "4.0.affix"; fprintf(stderr, "No affix file specified. Using %s.\n", affix_file); } if (pp_on && post_process_knowledge_file == NULL) { post_process_knowledge_file = "4.0.knowledge"; fprintf(stderr, "No post process knowledge file specified. Using %s.\n", post_process_knowledge_file); } if (cons_on && constituent_knowledge_file == NULL) { constituent_knowledge_file = "4.0.constituent-knowledge"; fprintf(stderr, "No constituent knowledge file specified. Using %s.\n", constituent_knowledge_file); } opts = parse_options_create(); if (opts == NULL) { fprintf(stderr, "%s\n", lperrmsg); exit(-1); } panic_parse_opts = parse_options_create(); if (panic_parse_opts == NULL) { fprintf(stderr, "%s\n", lperrmsg); exit(-1); } setup_panic_parse_options(panic_parse_opts); parse_options_set_max_sentence_length(opts, 70); parse_options_set_panic_mode(opts, TRUE); parse_options_set_max_parse_time(opts, 30); parse_options_set_linkage_limit(opts, 1000); parse_options_set_short_length(opts, 10); dict = dictionary_create(dictionary_file, post_process_knowledge_file, constituent_knowledge_file, affix_file); if (dict == NULL) { fprintf(stderr, "%s\n", lperrmsg); exit(-1); } /* process the command line like commands */ for (i=1; i<argc; i++) { if ((strcmp("-pp", argv[i])==0) || (strcmp("-c", argv[i])==0) || (strcmp("-a", argv[i])==0)) { i++; } else if ((argv[i][0] == '-') && (strcmp("-ppoff", argv[i])!=0) && (argv[i][0] == '-') && (strcmp("-coff", argv[i])!=0) && (argv[i][0] == '-') && (strcmp("-aoff", argv[i])!=0)) { issue_special_command(argv[i]+1, opts, dict); } } dictionary_and_option_space = space_in_use; reported_leak = external_space_in_use = 0; verbosity = parse_options_get_verbosity(opts); while (fget_input_string(input_string, stdin, stdout, opts)) { if (space_in_use != dictionary_and_option_space + reported_leak) { fprintf(stderr, "Warning: %d bytes of space leaked.\n", space_in_use-dictionary_and_option_space-reported_leak); reported_leak = space_in_use - dictionary_and_option_space; } if ((strcmp(input_string, "quit\n")==0) || (strcmp(input_string, "exit\n")==0)) break; if (special_command(input_string, dict)) continue; if (parse_options_get_echo_on(opts)) { printf("%s", input_string); } if (parse_options_get_batch_mode(opts)) { label = strip_off_label(input_string); } sent = sentence_create(input_string, dict); if (sent == NULL) { if (verbosity > 0) fprintf(stderr, "%s\n", lperrmsg); if (lperrno != NOTINDICT) exit(-1); else continue; } if (sentence_length(sent) > parse_options_get_max_sentence_length(opts)) { sentence_delete(sent); if (verbosity > 0) { fprintf(stdout, "Sentence length (%d words) exceeds maximum allowable (%d words)\n", sentence_length(sent), parse_options_get_max_sentence_length(opts)); } continue; } /* First parse with cost 0 or 1 and no null links */ parse_options_set_disjunct_cost(opts, 2); parse_options_set_min_null_count(opts, 0); parse_options_set_max_null_count(opts, 0); parse_options_reset_resources(opts); num_linkages = sentence_parse(sent, opts); /* Now parse with null links */ if ((num_linkages == 0) && (!parse_options_get_batch_mode(opts))) { if (verbosity > 0) fprintf(stdout, "No complete linkages found.\n"); if (parse_options_get_allow_null(opts)) { parse_options_set_min_null_count(opts, 1); parse_options_set_max_null_count(opts, sentence_length(sent)); num_linkages = sentence_parse(sent, opts); } } if (parse_options_timer_expired(opts)) { if (verbosity > 0) fprintf(stdout, "Timer is expired!\n"); } if (parse_options_memory_exhausted(opts)) { if (verbosity > 0) fprintf(stdout, "Memory is exhausted!\n"); } if ((num_linkages == 0) && parse_options_resources_exhausted(opts) && parse_options_get_panic_mode(opts)) { print_total_time(opts); if (verbosity > 0) fprintf(stdout, "Entering \"panic\" mode...\n"); parse_options_reset_resources(panic_parse_opts); parse_options_set_verbosity(panic_parse_opts, verbosity); num_linkages = sentence_parse(sent, panic_parse_opts); if (parse_options_timer_expired(panic_parse_opts)) { if (verbosity > 0) fprintf(stdout, "Timer is expired!\n"); } } print_total_time(opts); if (parse_options_get_batch_mode(opts)) { batch_process_some_linkages(label, sent, opts); } else { process_some_linkages(sent, opts); } sentence_delete(sent); if (external_space_in_use != 0) { fprintf(stderr, "Warning: %d bytes of external space leaked.\n", external_space_in_use); } } if (parse_options_get_batch_mode(opts)) { print_time(opts, "Total"); fprintf(stderr, "%d error%s.\n", batch_errors, (batch_errors==1) ? "" : "s"); } parsing_space_leaked = space_in_use - dictionary_and_option_space; if (parsing_space_leaked != 0) { fprintf(stderr, "Warning: %d bytes of space leaked during parsing.\n", parsing_space_leaked); } parse_options_delete(panic_parse_opts); parse_options_delete(opts); dictionary_delete(dict); if (space_in_use != parsing_space_leaked) { fprintf(stderr, "Warning: %d bytes of dictionary and option space leaked.\n", space_in_use - parsing_space_leaked); } else if (parsing_space_leaked == 0) { fprintf(stderr, "Good news: no space leaked.\n"); } if (external_space_in_use != 0) { fprintf(stderr, "Warning: %d bytes of external space leaked.\n", external_space_in_use); } return 0; }