Exemple #1
0
 public void process(Context c, Sentence s) {
   // we assume markers occur only at the beginning of clauses
   // TODO is this heuristic language-specific?
   Intervals markerInts = new Intervals();
   for (Interval clause : s.get(Features.CLAUSES))
     for (Marker m : markers)
       if (testMarker(s, clause, m)) {
         markerInts.add(clause.low(), clause.low() + m.length()).set(Features.MARKER_TYPE, m.type);
         break;
       }
   s.set(Features.DISCOURSE_MARKERS, markerInts);
 }
  private void split(Sentence s, Interval clause, Intervals out) {
    Interval pre = null, verb = null, post = null;
    for (Interval phrase : s.get(Features.PHRASES).in(clause)) {
      if (verb == null) {
        if (phrase.get(Features.PHRASE_TYPE) == PhraseType.VerbPhrase)
          verb = new Interval(phrase.low(), phrase.high());
        else pre = expand(pre, phrase);
      } else post = expand(post, phrase);
    }

    boolean preFocus = anyFocused(s, pre);
    boolean verbFocus = anyFocused(s, verb);
    boolean postFocus = anyFocused(s, post);

    // heuristics from Hiyakumoto, Prevost and Cassell
    if (!preFocus && !verbFocus && !postFocus) { // case 1
      maybeAdd(out, Theme, pre);
      maybeAdd(out, Rheme, verb, post);
    } else if (preFocus && verbFocus && !postFocus) { // case 2
      maybeAdd(out, Theme, pre);
      maybeAdd(out, Rheme, verb, post);
    } else if (preFocus && !verbFocus && postFocus) { // case 3
      maybeAdd(out, Theme, pre, verb);
      maybeAdd(out, Rheme, post);
    } else if (!preFocus && verbFocus && postFocus) { // case 4
      maybeAdd(out, Theme, pre, verb);
      maybeAdd(out, Rheme, post);
    } else if (preFocus && verbFocus && postFocus) { // case 5
      maybeAdd(out, Theme, pre, verb);
      maybeAdd(out, Rheme, post);
    } else if (preFocus && !verbFocus && !postFocus) { // case 6
      maybeAdd(out, Rheme, pre);
      maybeAdd(out, Theme, verb, post);
    } else if (!preFocus && verbFocus && !postFocus) { // case 7
      maybeAdd(out, Theme, pre);
      maybeAdd(out, Rheme, verb, post);
    } else if (!preFocus && !verbFocus && postFocus) { // case 8
      maybeAdd(out, Theme, pre, verb);
      maybeAdd(out, Rheme, post);
    }
  }
 private Interval expand(Interval x, Interval y) {
   if (x == null) return y;
   else if (y == null) return x;
   else return new Interval(Math.min(x.low(), y.low()), Math.max(x.high(), y.high()));
 }