#!/usr/bin/env perl
BEGIN { $|=1; }
use warnings;
use utf8;

#########################################################################
#### extra2sem: Adds separate semantic class field in Malt xml
#### Author: © Eckhard Bick 2011-2017; contact: eckhard.bick@mail.dk ####
#########################################################################
#
# input: Malt xml, converted from niceline dependency format:
#    ... | cg2dep pt | visldep2malt.pl | extra2sem
#
#########################################################################

while (<>) {
  $sem ="";

### articles
  if (s/(extra=\"([^ ]+ )?)art[di]?/$1/) {
    s/pos=\"(DET|PRON.*?)\"/pos=\"ART\"/;
    s/pos=\"(det|pron.*?)\"/pos=\"art\"/;
    s/extra=\"\"/extra=\"--\"/;
  }

### semantic prototypes
  if (s/(extra=\")([a-zA-Z].*?)\"/$1\"/ && ! /(sem|semtype)=/) {
    $extra =$2;
    @secondary = split / /,$extra;
    foreach (@secondary) {
      if (/^((activity|amount|anbo|anent|anich|anmov|anorg|anzo|ar|bar|build|cc|co[lnv]+|coll|cord|cur|dir|dance|dir|domain|dur|er|event|fight|furn|game|genre|group|inst|ism|ling|mach|meta|method|mon|occ|part|p+|per|pict|play|pos|prize|process|repr|s[ds]|sick|sit|sport|talk|temp|therapy|tube|a[cmn]|act|c[cm]|clo[HA]?|drink|f|food|fruit|geom|mat|percep|pos|sem|state|struct|system|tool|unit|wea|astro|brand|civ|disease|hum|media|org|party|j[a-z]+)(-[^>]+)?|[HABLV][HABLV]?[a-z]*)$/) {
	if ($sem) {$sem .= " $_";}
	else {$sem =$_}
	$extra =~ s/ *$_ */ /;
      }
    }
    $extra =~ s/^ //;
    $extra =~ s/ $//;
    if (! $extra) {$extra ="--";}
    s/extra=\"\"/extra=\"$extra\"/;
  }
  if (! /(sem|semtype)=/) {
    if (! $sem) {$sem ="--";}
    else {
      s/extra=/sem=\"$sem\" extra=/; # only if there IS a sem?
    }
  }
  print;
}
