Package simplenlg.test.syntax

Source Code of simplenlg.test.syntax.ClauseAggregationTest

/*
* 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.test.syntax;

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

import junit.framework.Assert;

import org.junit.Before;
import org.junit.Test;

import simplenlg.aggregation.BackwardConjunctionReductionRule;
import simplenlg.aggregation.Aggregator;
import simplenlg.aggregation.ClauseCoordinationRule;
import simplenlg.aggregation.ForwardConjunctionReductionRule;
import simplenlg.features.Feature;
import simplenlg.framework.NLGElement;
import simplenlg.phrasespec.SPhraseSpec;

/**
* Some tests for aggregation.
*
* @author Albert Gatt, University of Malta & University of Aberdeen
*
*/
public class ClauseAggregationTest extends SimpleNLG4Test {
  // set up a few more fixtures
  /** The s4. */
  SPhraseSpec s1, s2, s3, s4, s5, s6;
  Aggregator aggregator;
  ClauseCoordinationRule coord;
  ForwardConjunctionReductionRule fcr;
  BackwardConjunctionReductionRule bcr;

  /**
   * Instantiates a new clause aggregation test.
   *
   * @param name
   *            the name
   */
  public ClauseAggregationTest(String name) {
    super(name);
    aggregator = new Aggregator();
    aggregator.initialise();
    coord = new ClauseCoordinationRule();
    fcr = new ForwardConjunctionReductionRule();
    bcr = new BackwardConjunctionReductionRule();
  }

  /*
   * (non-Javadoc)
   *
   * @see simplenlg.test.SimplenlgTest#setUp()
   */
  @Override
  @Before
  protected void setUp() {
    super.setUp();

    // the woman kissed the man behind the curtain
    this.s1 = this.phraseFactory.createClause();
    this.s1.setSubject(this.woman);
    this.s1.setVerbPhrase(this.phraseFactory.createVerbPhrase("kiss"));
    this.s1.setObject(this.man);
    this.s1.addPostModifier(this.phraseFactory
        .createPrepositionPhrase("behind", this.phraseFactory
            .createNounPhrase("the", "curtain")));

    // the woman kicked the dog on the rock
    this.s2 = this.phraseFactory.createClause();
    this.s2.setSubject(this.phraseFactory.createNounPhrase("the", "woman")); //$NON-NLS-1$
    this.s2.setVerbPhrase(this.phraseFactory.createVerbPhrase("kick")); //$NON-NLS-1$
    this.s2.setObject(this.phraseFactory.createNounPhrase("the", "dog"));
    this.s2.addPostModifier(this.onTheRock);

    // the woman kicked the dog behind the curtain
    this.s3 = this.phraseFactory.createClause();
    this.s3.setSubject(this.phraseFactory.createNounPhrase("the", "woman")); //$NON-NLS-1$
    this.s3.setVerbPhrase(this.phraseFactory.createVerbPhrase("kick")); //$NON-NLS-1$
    this.s3.setObject(this.phraseFactory.createNounPhrase("the", "dog"));
    this.s3.addPostModifier(this.phraseFactory
        .createPrepositionPhrase("behind", this.phraseFactory
            .createNounPhrase("the", "curtain")));

    // the man kicked the dog behind the curtain
    this.s4 = this.phraseFactory.createClause();
    this.s4.setSubject(this.man); //$NON-NLS-1$
    this.s4.setVerbPhrase(this.phraseFactory.createVerbPhrase("kick")); //$NON-NLS-1$
    this.s4.setObject(this.phraseFactory.createNounPhrase("the", "dog"));
    this.s4.addPostModifier(this.behindTheCurtain);

    // the girl kicked the dog behind the curtain
    this.s5 = this.phraseFactory.createClause();
    this.s5.setSubject(this.phraseFactory.createNounPhrase("the", "girl")); //$NON-NLS-1$
    this.s5.setVerbPhrase(this.phraseFactory.createVerbPhrase("kick")); //$NON-NLS-1$
    this.s5.setObject(this.phraseFactory.createNounPhrase("the", "dog"));
    this.s5.addPostModifier(this.behindTheCurtain);

    // the woman kissed the dog behind the curtain
    this.s6 = this.phraseFactory.createClause();
    this.s6.setSubject(this.phraseFactory.createNounPhrase("the", "woman")); //$NON-NLS-1$
    this.s6.setVerbPhrase(this.phraseFactory.createVerbPhrase("kiss")); //$NON-NLS-1$
    this.s6.setObject(this.phraseFactory.createNounPhrase("the", "dog"));
    this.s6.addPostModifier(this.phraseFactory
        .createPrepositionPhrase("behind", this.phraseFactory
            .createNounPhrase("the", "curtain")));
  }

  /**
   * Test clause coordination with two sentences with same subject but
   * different postmodifiers: fails
   */
  @Test
  public void testCoordinationSameSubjectFail() {
    List<NLGElement> elements = Arrays.asList((NLGElement) this.s1,
        (NLGElement) this.s2);
    List<NLGElement> result = this.coord.apply(elements);
    Assert.assertEquals(2, result.size());
  }

  /**
   * Test clause coordination with two sentences one of which is passive:
   * fails
   */
  @Test
  public void testCoordinationPassiveFail() {
    this.s1.setFeature(Feature.PASSIVE, true);
    List<NLGElement> elements = Arrays.asList((NLGElement) this.s1,
        (NLGElement) this.s2);
    List<NLGElement> result = this.coord.apply(elements);
    Assert.assertEquals(2, result.size());
  }

//  /**
//   * Test clause coordination with 2 sentences with same subject: succeeds
//   */
//  @Test
//  public void testCoordinationSameSubjectSuccess() {
//    List<NLGElement> elements = Arrays.asList((NLGElement) this.s1,
//        (NLGElement) this.s3);
//    List<NLGElement> result = this.coord.apply(elements);
//    Assert.assertTrue(result.size() == 1); // should only be one sentence
//    NLGElement aggregated = result.get(0);
//    Assert
//        .assertEquals(
//            "the woman kisses the man and kicks the dog behind the curtain", //$NON-NLS-1$
//            this.realiser.realise(aggregated).getRealisation());
//  }

  /**
   * Test clause coordination with 2 sentences with same VP: succeeds
   */
  @Test
  public void testCoordinationSameVP() {
    List<NLGElement> elements = Arrays.asList((NLGElement) this.s3,
        (NLGElement) this.s4);
    List<NLGElement> result = this.coord.apply(elements);
    Assert.assertTrue(result.size() == 1); // should only be one sentence
    NLGElement aggregated = result.get(0);
    Assert.assertEquals(
        "the woman and the man kick the dog behind the curtain", //$NON-NLS-1$
        this.realiser.realise(aggregated).getRealisation());
  }

  /**
   * Coordination of sentences with front modifiers: should preserve the mods
   */
  @Test
  public void testCoordinationWithModifiers() {
    // now add a couple of front modifiers
    this.s3.addFrontModifier(this.phraseFactory
        .createAdverbPhrase("however"));
    this.s4.addFrontModifier(this.phraseFactory
        .createAdverbPhrase("however"));
    List<NLGElement> elements = Arrays.asList((NLGElement) this.s3,
        (NLGElement) this.s4);
    List<NLGElement> result = this.coord.apply(elements);
    Assert.assertTrue(result.size() == 1); // should only be one sentence
    NLGElement aggregated = result.get(0);
    Assert
        .assertEquals(
            "however the woman and the man kick the dog behind the curtain", //$NON-NLS-1$
            this.realiser.realise(aggregated).getRealisation());
  }

  /**
   * Test coordination of 3 sentences with the same VP
   */
  public void testCoordinationSameVP2() {
    List<NLGElement> elements = Arrays.asList((NLGElement) this.s3,
        (NLGElement) this.s4, (NLGElement) this.s5);
    List<NLGElement> result = this.coord.apply(elements);
    Assert.assertTrue(result.size() == 1); // should only be one sentence
    NLGElement aggregated = result.get(0);
    Assert
        .assertEquals(
            "the woman and the man and the girl kick the dog behind the curtain", //$NON-NLS-1$
            this.realiser.realise(aggregated).getRealisation());
  }

  /**
   * Forward conjunction reduction test
   */
  @Test
  public void testForwardConjReduction() {
    NLGElement aggregated = this.fcr.apply(this.s2, this.s3);
    Assert
        .assertEquals(
            "the woman kicks the dog on the rock and kicks the dog behind the curtain", //$NON-NLS-1$
            this.realiser.realise(aggregated).getRealisation());
  }

  /**
   * Backward conjunction reduction test
   */
  @Test
  public void testBackwardConjunctionReduction() {
    NLGElement aggregated = this.bcr.apply(this.s3, this.s6);
    Assert
        .assertEquals(
            "the woman kicks and the woman kisses the dog behind the curtain",
            this.realiser.realise(aggregated).getRealisation());
  }
 
  /**
   * Test multiple aggregation procedures in a single aggregator.
   */
//  @Test
//  public void testForwardBackwardConjunctionReduction() {
//    this.aggregator.addRule(this.fcr);
//    this.aggregator.addRule(this.bcr);
//    realiser.setDebugMode(true);
//    List<NLGElement> result = this.aggregator.realise(Arrays.asList((NLGElement) this.s2, (NLGElement) this.s3));
//    Assert.assertTrue(result.size() == 1); // should only be one sentence
//    NLGElement aggregated = result.get(0);
//    NLGElement aggregated = this.phraseFactory.createdCoordinatedPhrase(this.s2, this.s3);
//    Assert
//        .assertEquals(
//            "the woman kicks the dog on the rock and behind the curtain", //$NON-NLS-1$
//            this.realiser.realise(aggregated).getRealisation());
//  }

}
TOP

Related Classes of simplenlg.test.syntax.ClauseAggregationTest

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.