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