Package simplenlg.aggregation

Source Code of simplenlg.aggregation.AggregationHelper

/*
* The contents of this file are subject to the Mozilla Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations
* under the License.
*
* The Original Code is "Simplenlg".
*
* The Initial Developer of the Original Code is Ehud Reiter, Albert Gatt and Dave Westwater.
* Portions created by Ehud Reiter, Albert Gatt and Dave Westwater are Copyright (C) 2010-11 The University of Aberdeen. All Rights Reserved.
*
* Contributor(s): Ehud Reiter, Albert Gatt, Dave Wewstwater, Roman Kutlak, Margaret Mitchell.
*/
package simplenlg.aggregation;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import simplenlg.features.DiscourseFunction;
import simplenlg.features.InternalFeature;
import simplenlg.framework.ElementCategory;
import simplenlg.framework.LexicalCategory;
import simplenlg.framework.ListElement;
import simplenlg.framework.NLGElement;
import simplenlg.framework.PhraseCategory;

public class AggregationHelper {

  public static List<DiscourseFunction> FUNCTIONS = Arrays.asList(
      DiscourseFunction.SUBJECT, DiscourseFunction.HEAD,
      DiscourseFunction.COMPLEMENT, DiscourseFunction.PRE_MODIFIER,
      DiscourseFunction.POST_MODIFIER, DiscourseFunction.VERB_PHRASE);

  public static List<DiscourseFunction> RECURSIVE = Arrays
      .asList(DiscourseFunction.VERB_PHRASE);

  public static List<FunctionalSet> collectFunctionalPairs(
      NLGElement phrase1, NLGElement phrase2) {
    List<NLGElement> children1 = getAllChildren(phrase1);
    List<NLGElement> children2 = getAllChildren(phrase2);
    List<FunctionalSet> pairs = new ArrayList<FunctionalSet>();

    if (children1.size() == children2.size()) {
      Periphery periph = Periphery.LEFT;

      for (int i = 0; i < children1.size(); i++) {
        NLGElement child1 = children1.get(i);
        NLGElement child2 = children2.get(i);
        ElementCategory cat1 = child1.getCategory();
        ElementCategory cat2 = child2.getCategory();
        DiscourseFunction func1 = (DiscourseFunction) child1
            .getFeature(InternalFeature.DISCOURSE_FUNCTION);
        DiscourseFunction func2 = (DiscourseFunction) child2
            .getFeature(InternalFeature.DISCOURSE_FUNCTION);

        if (cat1 == cat2 && func1 == func2) {
          pairs.add(FunctionalSet.newInstance(func1, cat1, periph,
              child1, child2));

          if (cat1 == LexicalCategory.VERB) {
            periph = Periphery.RIGHT;
          }

        } else {
          pairs.clear();
          break;
        }
      }
    }

    return pairs;
  }

  private static List<NLGElement> getAllChildren(NLGElement element) {
    List<NLGElement> children = new ArrayList<NLGElement>();
    List<NLGElement> components = element instanceof ListElement ? element
        .getFeatureAsElementList(InternalFeature.COMPONENTS) : element
        .getChildren();

    for (NLGElement child : components) {
      children.add(child);

      if (child.getCategory() == PhraseCategory.VERB_PHRASE
          || child.getFeature(InternalFeature.DISCOURSE_FUNCTION) == DiscourseFunction.VERB_PHRASE) {
        children.addAll(getAllChildren(child));
      }
    }

    return children;
  }

}
TOP

Related Classes of simplenlg.aggregation.AggregationHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.