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"
56 float ins,
float del,
float sub);
61 return (iprev(n) == 0) ? 0.0 : iprev(n)->
F(
"end");
66 return n->
F(
"end") - start(n);
74 for (a_ptr = a.
head(); a_ptr != 0; a_ptr = inext(a_ptr))
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 = inext(a_ptr))
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 = inext(a_ptr))
127 fscanf(fp,
"%s", newname);
129 a_ptr->set_name(newname);
142 for (a = orig.
head(); a != 0; a = inext(a))
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 = inext(a_ptr);
159 if (a_ptr->name() == inext(a_ptr)->name())
169 for (a_ptr = seg.
head(); a_ptr != 0; a_ptr = inext(a_ptr))
170 if (a_ptr->name() == oname)
171 a_ptr->set_name(nname);
180 for (a_ptr = seg.
head(); a_ptr != 0; a_ptr = inext(a_ptr))
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 = inext(s))
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";
224 convert_to_broad(seg, pos_list);
231 if (broad_name ==
"")
234 for (a_ptr = seg.
head(); a_ptr != 0; a_ptr = inext(a_ptr))
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; p = inext(p))
249 if (map.
val(p->name()) ==
"!DELETE")
252 p->set_name(map.
val(p->name()));
263 for (a_ptr = seg.
head(); a_ptr != 0; a_ptr = inext(a_ptr))
264 a_ptr->
set(
"end", a_ptr->
F(
"end") + shift);
277 for (ptr = filenames.head(); ptr != NULL; ptr = ptr->next())
279 tmp_filenames.
append( filenames(ptr) );
281 tmp_filenames.
append( basename(filenames(ptr)) );
283 for(fptr=mlf.head(); fptr != NULL;)
286 for (ptr = tmp_filenames.head(); ptr != NULL; ptr = ptr->next())
289 if(tmp_filenames(ptr) == mlf(fptr).name())
295 else if(mlf(fptr).name().contains(tmp_filenames(ptr)))
313 tmp_filenames.
clear();
325 for (p = mlf.head(); p; p = p->next())
327 if (basename(mlf(p).name(),
"*")==basename(filename,
"*"))
331 for (p = mlf.head(); p; p = p->next())
333 if (basename(mlf(p).name()) == filename)
337 cerr <<
"No match for file " << filename <<
" found in mlf\n";
350 for (p = mlf.head(); p; p = p->next())
352 for (s = mlf(p).head(); s; s = inext(s))
355 t->
set(
"name", s->
S(
"name"));
356 t->
set(
"end", s->
F(
"end") + last);
357 cout <<
"appended t " << t << endl;
359 last = (t != 0) ? t->
F(
"end") : 0.0;
371 if (key.
length() != mlf.length())
373 cerr <<
"RelationList has " << mlf.length() <<
" elements: expected "
374 << key.
length() <<
" from key file\n";
378 for (k = key.
head(), p = mlf.head(); p; p = p->next(), k = inext(k))
381 for (s = mlf(p).head(); s; s = inext(s))
384 t->
set(
"name", s->
S(
"name"));
385 t->
set(
"end", (s->
F(
"end") + st));
407 if ((keylab.
tail())->F(
"end") < (lab.
tail())->F(
"end"))
409 cerr <<
"Key file must extend beyond end of label file\n";
414 for (k = keylab.
head(); k ; k = inext(k))
415 if (k->
F(
"end") > lab.
head()->
F(
"end"))
419 a.
f.
set(
"name", (filename + ext));
422 for (s = lab.
head(); s; s = inext(s))
428 t->
set(
"end", (s->
F(
"end") - kstart));
431 if (n->
F(
"end") > k->
F(
"end"))
433 if (((n->
F(
"end") - k->
F(
"end")) <
434 (k->
F(
"end") - start(n))) ||
435 is_in_class(n->name(), blank))
438 t->
set(
"end", (s->
F(
"end") - kstart));
441 t->
set(
"end", (k->
F(
"end") - kstart));
443 if (!is_in_class(n->name(), blank))
449 t->
set(
"end", (k->
F(
"end") - kstart));
457 a.
f.
set(
"name", (filename + ext));
462 t->
set(
"end", (s->
F(
"end") - kstart));
479 if ((keylab.
tail())->F(
"end") < (lab.
tail())->F(
"end"))
481 cerr <<
"Key file must extend beyond end of label file\n";
486 a.
f.
set(
"name", (k->name() + ext));
489 for (s = lab.
head(); s; s = inext(s))
492 t->set_name(s->name());
493 t->
set(
"end", (s->
F(
"end") - kstart));
495 if (s->
F(
"end") > k->
F(
"end"))
497 cout <<
"appending " << a;
500 kstart = s->
F(
"end");
501 k->
set(
"end", (s->
F(
"end")));
504 a.f.set(
"name", (k->name() + ext));
507 cout <<
"appending " << a;
520 float prev_end, inc, first_end, last_end;
533 for (s = target.
head(); s; s = inext(s))
535 if ((t = daughter1(s->
as_relation(match_name))) != 0)
537 s->
set(time_name +
"end", t->
F(
"end"));
539 s->
set(time_name +
"start", t->
F(
"start"));
541 last_end = t->
F(
"end");
543 first_end = t->
F(
"end");
549 target.
head()->
set(time_name +
"end", first_end / 2.0);
551 target.
head()->
set(time_name +
"start", 0.0);
556 target.
tail()->
set(time_name +
"end", last_end + 0.01);
558 target.
tail()->
set(time_name +
"start", last_end);
561 for (s = target.
head(); s; s = inext(s))
566 for (i = 1, p = s; p; p = inext(p), ++i)
569 inc = (p->
F(time_name +
"end") - prev_end) / ((float) i);
574 for (i = 1; s !=p ; s = inext(s), ++i)
576 s->
set(time_name +
"end", (prev_end + ((
float) i * inc)));
578 s->
set(time_name +
"start", (prev_end+((
float) (i - 1 )* inc)));
581 prev_end = s->
F(
"end");
593 *utt.
relation(
"Match"), 7.0, 7.0, 7.0);
595 map_match_times(*utt.
relation(target_name),
"Match", time_name, do_start);
605 for (p = mlf.head(); p; p = p->next())
607 if (basename(mlf(p).name(),
"*")==basename(filename,
"*"))
611 for (p = mlf.head(); p; p = p->next())
612 if (mlf(p).name() == filename)
615 cerr <<
"No match for file " << filename <<
" found in mlf\n";
622 shift_label(lab, al.
fval(
"-shift"));
627 al.
fval(
"-extend",0) * lab.
tail()->
F(
"end"));
631 quantize(lab, al.
fval(
"-q"));
636 cerr <<
"-start option must be used with -end option\n";
638 extract(lab, al.
fval(
"-start"), al.
fval(
"-end"), lab);
642 convert_to_broad_class(lab, al.
val(
"-class"), op);
647 StringtoStrList(al.
val(
"-lablist"), bclass);
648 convert_to_broad(lab, bclass);
651 edit_labels(lab, al.
val(
"-sed"));
655 if (map.
load(al.
val(
"-map")) != format_ok)
668 for (s = stream.
head(); s; s = inext(s))
670 cout << s->name() <<
"\t:";
671 for(p.
begin(s->features()); p; ++p)
686 for (p = mlf.head(); p; p = p->next())
687 hash_table.
add_item(basename(mlf(p).name(),
"*"),
690 for (p = mlf.head(); p; p = p->next())
705 fname=basename(filename,
"*");
707 d=hash_table.
val(fname,found);
714 cerr <<
"No match for file " << fname <<
" found in mlf\n";
void set(const EST_String &name, int ival)
void set(const EST_String &name, int ival)
const EST_String S(const EST_String &name) const
const float F(const EST_String &name) const
EST_Item * as_relation(const char *relname) const
View item from another relation (const char *) method.
int f_present(const EST_String &name) const
EST_read_status load(const EST_String &filename, const EST_String &comment=";")
float fval(const EST_String &rkey, int m=1) const
int override_fval(const EST_String rkey, const float rval)
add to end of list or overwrite. If rval is empty, do nothing
void remove_item(EST_Item *item)
const EST_String & name() const
V & val(const K &key, int &found) const
int add_item(const K &key, const V &value, int no_search=0)
Add an entry to the table.
void begin(const Container &over)
Set the iterator ready to run over this container.
const V & val(const K &rkey, bool m=0) const
return value according to key (const)
const int present(const K &rkey) const
Returns true if key is present.
void clear(void)
remove all items in list
void append(const T &item)
add item onto end of list
EST_Litem * remove(EST_Litem *ptr)
int open_string(const EST_String &newbuffer)
open a \Ref{EST_TokenStream} for string rather than a file
EST_TokenStream & get(EST_Token &t)
get next token in stream
EST_Relation * relation(const char *name, int err_on_not_found=1) const
get relation by name
EST_Relation * create_relation(const EST_String &relname)
create a new relation called <parameter>n</parameter>.