1053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd. 3053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 4053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * you may not use this file except in compliance with the License. 6053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * You may obtain a copy of the License at 7053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 8053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 10053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * See the License for the specific language governing permissions and 14053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * limitations under the License. 15053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 16053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 17053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectpackage jp.co.omronsoft.openwnn; 18053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 19053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport java.lang.StringBuffer; 20053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport java.util.ArrayList; 21053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport java.util.Iterator; 22053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 23053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/** 24d56eddfd5e0f193359f93e7ef665338cace9e2e9Daisuke Miyakawa * The container class of a sentence. 25053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 26053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @author Copyright (C) 2009, OMRON SOFTWARE CO., LTD. All Rights Reserved. 27053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 28053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectpublic class WnnSentence extends WnnWord { 29053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The array of clauses */ 30053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public ArrayList<WnnClause> elements; 31053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 32053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 33053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Constructor 34053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 35053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param input The string of reading 36053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param clauses The array of clauses of this sentence 37053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 38053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public WnnSentence(String input, ArrayList<WnnClause> clauses) { 39053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (clauses == null || clauses.isEmpty()) { 40053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.id = 0; 41053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.candidate = ""; 42053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.stroke = ""; 43053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.frequency = 0; 44053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.partOfSpeech = new WnnPOS(); 45053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.attribute = 0; 46053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 47053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.elements = clauses; 48053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project WnnClause headClause = (WnnClause)clauses.get(0); 49053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 50053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (clauses.size() == 1) { 51053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.id = headClause.id; 52053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.candidate = headClause.candidate; 53053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.stroke = input; 54053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.frequency = headClause.frequency; 55053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.partOfSpeech = headClause.partOfSpeech; 56053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.attribute = headClause.attribute; 57053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 58053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project StringBuffer candidate = new StringBuffer(); 59f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa Iterator<WnnClause> ci = clauses.iterator(); 60053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project while (ci.hasNext()) { 61f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa WnnClause clause = ci.next(); 62053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project candidate.append(clause.candidate); 63053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 64053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project WnnClause lastClause = (WnnClause)clauses.get(clauses.size() - 1); 65053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 66053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.id = headClause.id; 67053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.candidate = candidate.toString(); 68053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.stroke = input; 69053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.frequency = headClause.frequency; 70053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.partOfSpeech = new WnnPOS(headClause.partOfSpeech.left, lastClause.partOfSpeech.right); 71053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.attribute = 2; 72053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 73053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 74053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 75053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 76053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 77053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Constructor 78053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 79053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param input The string of reading 80053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param clause The clauses of this sentence 81053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 82053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public WnnSentence(String input, WnnClause clause) { 83053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.id = clause.id; 84053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.candidate = clause.candidate; 85053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.stroke = input; 86053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.frequency = clause.frequency; 87053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.partOfSpeech = clause.partOfSpeech; 88053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.attribute = clause.attribute; 89053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 90f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa this.elements = new ArrayList<WnnClause>(); 91053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.elements.add(clause); 92053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 93053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 94053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 95053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Constructor 96053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 97053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param prev The previous clauses 98053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param clause The clauses of this sentence 99053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 100053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public WnnSentence(WnnSentence prev, WnnClause clause) { 101053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.id = prev.id; 102053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.candidate = prev.candidate + clause.candidate; 103053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.stroke = prev.stroke + clause.stroke; 104053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.frequency = prev.frequency + clause.frequency; 105053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.partOfSpeech = new WnnPOS(prev.partOfSpeech.left, clause.partOfSpeech.right); 106053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.attribute = prev.attribute; 107053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 108f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa this.elements = new ArrayList<WnnClause>(); 109053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.elements.addAll(prev.elements); 110053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.elements.add(clause); 111053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 112053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 113053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 114053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Constructor 115053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 116053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param head The top clause of this sentence 117053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param tail The following sentence 118053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 119053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public WnnSentence(WnnClause head, WnnSentence tail) { 120053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (tail == null) { 121053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* single clause */ 122053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.id = head.id; 123053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.candidate = head.candidate; 124053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.stroke = head.stroke; 125053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.frequency = head.frequency; 126053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.partOfSpeech = head.partOfSpeech; 127053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.attribute = head.attribute; 128f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa this.elements = new ArrayList<WnnClause>(); 129053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.elements.add(head); 130053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 131053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* consecutive clauses */ 132053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.id = head.id; 133053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.candidate = head.candidate + tail.candidate; 134053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.stroke = head.stroke + tail.stroke; 135053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.frequency = head.frequency + tail.frequency; 136053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.partOfSpeech = new WnnPOS(head.partOfSpeech.left, tail.partOfSpeech.right); 137053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.attribute = 2; 138053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 139f96267ad0d85ede52c300ae5456d7e4ecb50915cDaisuke Miyakawa this.elements = new ArrayList<WnnClause>(); 140053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.elements.add(head); 141053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project this.elements.addAll(tail.elements); 142053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 143053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 144053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 145