source: app/src/lem/main.cc @ f7b30b9

Last change on this file since f7b30b9 was 0e3df7e, checked in by obrebski <obrebski@…>, 17 years ago

process_seg() naprawione, 'lem -s kor -I kor' nie zawiesza sie

git-svn-id: svn://atos.wmid.amu.edu.pl/utt@46 e293616e-ec6a-49c2-aa92-f4a8b91c5d16

  • Property mode set to 100644
File size: 3.1 KB
Line 
1#include "../lib/iotools.h"
2//do wyrzucenia - definicja w Makefile! #define _CMDLINE_FILE "../lem/cmdline.h"
3#include "../common/common.h"
4#include "common_lem.h"
5#include "lem.h"
6#include "cmdline.h"
7#include <locale.h>
8
9int main(int argc, char** argv) {
10
11//   setlocale(LC_CTYPE,""); //PO CO TO?
12//   setlocale(LC_COLLATE,""); //
13
14  gengetopt_args_info args;
15
16  if(cmdline_parser(argc, argv, &args) != 0)
17    exit(1);
18
19  process_config_files(&args,argv[0]);
20  process_common_options(&args,argv[0]);
21  process_lem_options(&args);
22 
23  char line[MAX_LINE+1];
24  char outline[MAX_LINE+1];
25  char parms[MAX_LINE+1], desc[MAX_LINE+1], lemma[MAX_LINE+1];
26  long line_count = 0;
27
28  Lem* lem;
29 
30  if(strcmp(dictionary+strlen(dictionary)-4,".bin")==0)
31    lem = new Lem(dictionary);
32  else if(strcmp(dictionary+strlen(dictionary)-4,".dic")==0)
33    lem = new AuxLem(dictionary);
34  else
35    fprintf(stderr,"lem: Invalid dictionary file extension.\n");
36
37  Words tab;
38//   Segment seg;
39
40  while (fgets(line, MAX_LINE, inputf))
41    {
42      ++line_count;
43      int start, len;
44     
45      if (!process_seg(line, args)) // TO POWINNO BYC WCZESNIEJ ZABEZPIECZONE
46        fputs(line, outputf);
47      else
48        {
49          char form[MAX_FORM];
50
51          tab.clear();
52          getfield(line,input_field_prefix,form);
53         
54          if (form==NULL) continue;//BZDURA
55         
56          lem->ana(form, tab);
57          if(tab.count()==0)
58            {
59              char form1[MAX_FORM]; // tymczasowo tak, trzeba zmienic ana
60              char* p;
61              strcpy(form1,form);
62              for(p=form1;*p;++p) *p=tolower(*p);
63              p=form1;
64              lem->ana(p,tab);
65            }
66         
67          if (tab.count() == 0) 
68            fputs(line, failedf);
69          else 
70            { // mamy jakies opisy w slowniku
71             
72              if(one_line)
73                {
74                  char* descp=desc;
75                  for (int i=0; i< tab.count(); ++i)
76                    {
77                      descp += sprintf(descp," %s%s,%s", output_field_prefix, tab[i].lemma(), tab[i].descr());
78                    }
79                  strcpy(outline,line);
80                  outline[strlen(outline)-1]='\0';
81                  strcat(outline,desc);
82                  strcat(outline,"\n");
83                  fputs(outline, outputf);
84                  if (copy_processed)
85                    fputs(line,outputf);
86                }
87              else if(one_field)
88                {
89                  char* descp=desc;
90                  for (int i=0; i< tab.count(); ++i)
91                    if(i==0)
92                      descp += sprintf(descp," %s%s,%s", output_field_prefix, tab[i].lemma(), tab[i].descr());
93                    else
94                      {
95                        if(strcmp(tab[i].lemma(),tab[i-1].lemma())==0)
96                          descp += sprintf(descp,",%s",tab[i].descr());
97                        else
98                          descp += sprintf(descp,";%s,%s",tab[i].lemma(),tab[i].descr());
99                      }
100                 
101                  strcpy(outline,line);
102                  outline[strlen(outline)-1]='\0';
103                  strcat(outline,desc);
104                  strcat(outline,"\n");
105                  fputs(outline, outputf);
106                  if (copy_processed)
107                    fputs(line,outputf);
108                }
109              else
110                {
111                  for (int i=0; i< tab.count(); ++i)
112                    {
113                      // kolejne opisy - kolejne linie.
114                      sprintf(desc, " %s%s,%s\n", output_field_prefix, tab[i].lemma(), tab[i].descr());
115                      strcpy(outline,line);
116                      outline[strlen(outline)-1]='\0';
117                      strcat(outline,desc);
118                      fputs(outline, outputf);
119                    }
120                  if (copy_processed)
121                    fputs(line,outputf);
122                }
123            } 
124        }
125     
126      if(args.interactive_flag) 
127        fflush(outputf), fflush(failedf);
128     
129    }
130  cmdline_parser_free(&args);
131}
Note: See TracBrowser for help on using the repository browser.