/*
* Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package jp.co.omronsoft.openwnn;
import java.lang.StringBuffer;
import java.util.ArrayList;
import java.util.Iterator;
/**
* The container class of a sentence.
*
* @author Copyright (C) 2009, OMRON SOFTWARE CO., LTD. All Rights Reserved.
*/
public class WnnSentence extends WnnWord {
/** The array of clauses */
public ArrayList<WnnClause> elements;
/**
* Constructor
*
* @param input The string of reading
* @param clauses The array of clauses of this sentence
*/
public WnnSentence(String input, ArrayList<WnnClause> clauses) {
if (clauses == null || clauses.isEmpty()) {
this.id = 0;
this.candidate = "";
this.stroke = "";
this.frequency = 0;
this.partOfSpeech = new WnnPOS();
this.attribute = 0;
} else {
this.elements = clauses;
WnnClause headClause = (WnnClause)clauses.get(0);
if (clauses.size() == 1) {
this.id = headClause.id;
this.candidate = headClause.candidate;
this.stroke = input;
this.frequency = headClause.frequency;
this.partOfSpeech = headClause.partOfSpeech;
this.attribute = headClause.attribute;
} else {
StringBuffer candidate = new StringBuffer();
Iterator<WnnClause> ci = clauses.iterator();
while (ci.hasNext()) {
WnnClause clause = ci.next();
candidate.append(clause.candidate);
}
WnnClause lastClause = (WnnClause)clauses.get(clauses.size() - 1);
this.id = headClause.id;
this.candidate = candidate.toString();
this.stroke = input;
this.frequency = headClause.frequency;
this.partOfSpeech = new WnnPOS(headClause.partOfSpeech.left, lastClause.partOfSpeech.right);
this.attribute = 2;
}
}
}
/**
* Constructor
*
* @param input The string of reading
* @param clause The clauses of this sentence
*/
public WnnSentence(String input, WnnClause clause) {
this.id = clause.id;
this.candidate = clause.candidate;
this.stroke = input;
this.frequency = clause.frequency;
this.partOfSpeech = clause.partOfSpeech;
this.attribute = clause.attribute;
this.elements = new ArrayList<WnnClause>();
this.elements.add(clause);
}
/**
* Constructor
*
* @param prev The previous clauses
* @param clause The clauses of this sentence
*/
public WnnSentence(WnnSentence prev, WnnClause clause) {
this.id = prev.id;
this.candidate = prev.candidate + clause.candidate;
this.stroke = prev.stroke + clause.stroke;
this.frequency = prev.frequency + clause.frequency;
this.partOfSpeech = new WnnPOS(prev.partOfSpeech.left, clause.partOfSpeech.right);
this.attribute = prev.attribute;
this.elements = new ArrayList<WnnClause>();
this.elements.addAll(prev.elements);
this.elements.add(clause);
}
/**
* Constructor
*
* @param head The top clause of this sentence
* @param tail The following sentence
*/
public WnnSentence(WnnClause head, WnnSentence tail) {
if (tail == null) {
/* single clause */
this.id = head.id;
this.candidate = head.candidate;
this.stroke = head.stroke;
this.frequency = head.frequency;
this.partOfSpeech = head.partOfSpeech;
this.attribute = head.attribute;
this.elements = new ArrayList<WnnClause>();
this.elements.add(head);
} else {
/* consecutive clauses */
this.id = head.id;
this.candidate = head.candidate + tail.candidate;
this.stroke = head.stroke + tail.stroke;
this.frequency = head.frequency + tail.frequency;
this.partOfSpeech = new WnnPOS(head.partOfSpeech.left, tail.partOfSpeech.right);
this.attribute = 2;
this.elements = new ArrayList<WnnClause>();
this.elements.add(head);
this.elements.addAll(tail.elements);
}
}
}