43 #include "EST_types.h"
44 #include "ling_class/EST_Relation.h"
45 #include "ling_class/EST_relation_aux.h"
46 #include "EST_string_aux.h"
47 #include "EST_io_aux.h"
48 #include "EST_Option.h"
49 #include "EST_Token.h"
56 float ins,
float del,
float sub);
61 return (n->prev() == 0) ? 0.0 : n->prev()->
F(
"end");
66 return n->
F(
"end") - start(n);
74 for (a_ptr = a.
head(); a_ptr != 0; a_ptr = a_ptr->next())
76 end = a_ptr->
F(
"end") / q;
79 a_ptr->
set(
"end", end);
88 char command[100], name[100], newname[100], sf[100];
92 file1 = make_tmp_filename();
93 file2 = make_tmp_filename();
95 fp = fopen(file1,
"wb");
98 fprintf(stderr,
"edit_labels: cannot open \"%s\" for writing\n",
102 for (a_ptr = a.
head(); a_ptr != 0; a_ptr = a_ptr->next())
104 strcpy(name, a_ptr->name());
105 fprintf(fp,
"%s\n", name);
108 strcpy(command,
"cat ");
109 strcat(command, file1);
110 strcat(command,
" | sed -f ");
111 strcat(command, sedfile);
112 strcat(command,
" > ");
113 strcat(command, file2);
115 printf(
"command: %s\n", command);
118 fp = fopen(file2,
"rb");
121 fprintf(stderr,
"edit_labels: cannot open \"%s\" for reading\n",
122 (
const char *)file2);
125 for (a_ptr = a.
head(); a_ptr != 0; a_ptr = a_ptr->next())
127 fscanf(fp,
"%s", newname);
129 a_ptr->set_name(newname);
142 for (a = orig.
head(); a != 0; a = a->next())
143 if ((a->
F(
"end") > s) && (start(a) < e))
146 if ((a->
F(
"end") > e))
156 for (a_ptr = seg.
head(); a_ptr != seg.
tail(); a_ptr = n_ptr)
158 n_ptr = a_ptr->next();
159 if (a_ptr->name() == a_ptr->next()->name())
169 for (a_ptr = seg.
head(); a_ptr != 0; a_ptr = a_ptr->next())
170 if (a_ptr->name() == oname)
171 a_ptr->set_name(nname);
180 for (a_ptr = seg.
head(); a_ptr != 0; a_ptr = a_ptr->next())
181 for (p = oname.head(); p ; p = p->next())
182 if (a_ptr->name() == oname(p))
183 a_ptr->set_name(nname);
190 for (p = s.head(); p; p = p->next())
200 for (s = a.
head(); s; s = s->next())
201 if (!is_in_class(s->name(), vocab))
203 cerr<<
"Illegal entry in file " <<a.
name()<<
":\"" << *s <<
"\"\n";
215 EST_String tmp_class_type = class_type +
"_list";
222 pos_list.append(ts.
get().string());
224 convert_to_broad(seg, pos_list);
231 if (broad_name ==
"")
234 for (a_ptr = seg.
head(); a_ptr != 0; a_ptr = a_ptr->next())
235 if (is_in_class(a_ptr->name(), pos_list))
236 a_ptr->
set(broad_name, (polarity) ? 1 : 0);
238 a_ptr->
set(broad_name, (polarity) ? 0 : 1);
245 for (p = seg.
head(); p != 0; n = p)
250 if (map.
val(p->name()) ==
"!DELETE")
253 p->set_name(map.
val(p->name()));
264 for (a_ptr = seg.
head(); a_ptr != 0; a_ptr = a_ptr->next())
265 a_ptr->
set(
"end", a_ptr->
F(
"end") + shift);
278 for (ptr = filenames.head(); ptr != NULL; ptr = ptr->next())
280 tmp_filenames.
append( filenames(ptr) );
282 tmp_filenames.
append( basename(filenames(ptr)) );
284 for(fptr=mlf.head(); fptr != NULL;)
287 for (ptr = tmp_filenames.head(); ptr != NULL; ptr = ptr->next())
290 if(tmp_filenames(ptr) == mlf(fptr).name())
296 else if(mlf(fptr).name().contains(tmp_filenames(ptr)))
314 tmp_filenames.
clear();
326 for (p = mlf.head(); p; p = p->next())
328 if (basename(mlf(p).name(),
"*")==basename(filename,
"*"))
332 for (p = mlf.head(); p; p = p->next())
334 if (basename(mlf(p).name()) == filename)
338 cerr <<
"No match for file " << filename <<
" found in mlf\n";
351 for (p = mlf.head(); p; p = p->next())
353 for (s = mlf(p).head(); s; s = s->next())
356 t->
set(
"name", s->
S(
"name"));
357 t->
set(
"end", s->
F(
"end") + last);
358 cout <<
"appended t " << t << endl;
360 last = (t != 0) ? t->
F(
"end") : 0.0;
372 if (key.
length() != mlf.length())
374 cerr <<
"RelationList has " << mlf.length() <<
" elements: expected "
375 << key.
length() <<
" from key file\n";
379 for (k = key.
head(), p = mlf.head(); p; p = p->next(), k = k->next())
382 for (s = mlf(p).head(); s; s = s->next())
385 t->
set(
"name", s->
S(
"name"));
386 t->
set(
"end", (s->
F(
"end") + st));
408 if ((keylab.
tail())->F(
"end") < (lab.
tail())->F(
"end"))
410 cerr <<
"Key file must extend beyond end of label file\n";
415 for (k = keylab.
head(); k ; k = k->next())
416 if (k->
F(
"end") > lab.
head()->
F(
"end"))
420 a.
f.
set(
"name", (filename + ext));
423 for (s = lab.
head(); s; s = s->next())
429 t->
set(
"end", (s->
F(
"end") - kstart));
432 if (n->
F(
"end") > k->
F(
"end"))
434 if (((n->
F(
"end") - k->
F(
"end")) <
435 (k->
F(
"end") - start(n))) ||
436 is_in_class(n->name(), blank))
439 t->
set(
"end", (s->
F(
"end") - kstart));
442 t->
set(
"end", (k->
F(
"end") - kstart));
444 if (!is_in_class(n->name(), blank))
450 t->
set(
"end", (k->
F(
"end") - kstart));
458 a.
f.
set(
"name", (filename + ext));
463 t->
set(
"end", (s->
F(
"end") - kstart));
480 if ((keylab.
tail())->F(
"end") < (lab.
tail())->F(
"end"))
482 cerr <<
"Key file must extend beyond end of label file\n";
487 a.
f.
set(
"name", (k->name() + ext));
490 for (s = lab.
head(); s; s = s->next())
493 t->set_name(s->name());
494 t->
set(
"end", (s->
F(
"end") - kstart));
496 if (s->
F(
"end") > k->
F(
"end"))
498 cout <<
"appending " << a;
501 kstart = s->
F(
"end");
502 k->
set(
"end", (s->
F(
"end")));
505 a.f.set(
"name", (k->name() + ext));
508 cout <<
"appending " << a;
521 float prev_end, inc, first_end, last_end;
534 for (s = target.
head(); s; s = s->next())
536 if ((t = daughter1(s->
as_relation(match_name))) != 0)
538 s->
set(time_name +
"end", t->
F(
"end"));
540 s->
set(time_name +
"start", t->
F(
"start"));
542 last_end = t->
F(
"end");
544 first_end = t->
F(
"end");
550 target.
head()->
set(time_name +
"end", first_end / 2.0);
552 target.
head()->
set(time_name +
"start", 0.0);
557 target.
tail()->
set(time_name +
"end", last_end + 0.01);
559 target.
tail()->
set(time_name +
"start", last_end);
562 for (s = target.
head(); s; s = s->next())
567 for (i = 1, p = s; p; p = p->next(), ++i)
570 inc = (p->
F(time_name +
"end") - prev_end) / ((
float) i);
575 for (i = 1; s !=p ; s = s->next(), ++i)
577 s->
set(time_name +
"end", (prev_end + ((
float) i * inc)));
579 s->
set(time_name +
"start", (prev_end+((
float) (i - 1 )* inc)));
582 prev_end = s->
F(
"end");
594 *utt.
relation(
"Match"), 7.0, 7.0, 7.0);
596 map_match_times(*utt.
relation(target_name),
"Match", time_name, do_start);
606 for (p = mlf.head(); p; p = p->next())
608 if (basename(mlf(p).name(),
"*")==basename(filename,
"*"))
612 for (p = mlf.head(); p; p = p->next())
613 if (mlf(p).name() == filename)
616 cerr <<
"No match for file " << filename <<
" found in mlf\n";
623 shift_label(lab, al.
fval(
"-shift"));
628 al.
fval(
"-extend",0) * lab.
tail()->
F(
"end"));
632 quantize(lab, al.
fval(
"-q"));
637 cerr <<
"-start option must be used with -end option\n";
639 extract(lab, al.
fval(
"-start"), al.
fval(
"-end"), lab);
643 convert_to_broad_class(lab, al.
val(
"-class"), op);
648 StringtoStrList(al.
val(
"-lablist"), bclass);
649 convert_to_broad(lab, bclass);
652 edit_labels(lab, al.
val(
"-sed"));
656 if (map.
load(al.
val(
"-map")) != format_ok)
669 for (s = stream.
head(); s; s = s->next())
671 cout << s->name() <<
"\t:";
672 for(p.
begin(s->features()); p; ++p)
687 for (p = mlf.head(); p; p = p->next())
688 hash_table.
add_item(basename(mlf(p).name(),
"*"),
691 for (p = mlf.head(); p; p = p->next())
706 fname=basename(filename,
"*");
708 d=hash_table.
val(fname,found);
715 cerr <<
"No match for file " << fname <<
" found in mlf\n";