1 /*
2  * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 /**
17  * @file picosa.h
18  *
19  * sentence analysis - POS disambiguation - Include file
20  *
21  * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland
22  * All rights reserved.
23  *
24  * History:
25  * - 2009-04-20 -- initial version
26  *
27  */
28 
29 
30 /** @addtogroup picosa
31  * ---------------------------------------------------\n
32  * <b> Pico Sentence analysis </b>\n
33  * ---------------------------------------------------\n
34  *
35 itemtype, iteminfo1, iteminfo2, content -> TYPE(INFO1,INFO2)content
36 in the following
37 
38 items input
39 ===========
40 
41 processed by sa (POS disambiguation):
42 - WORDGRAPH(POSes,NA)graph
43 - WORDINDEX(POSes,NA)POS|1ind1...POSN|indN
44 - CMD(PICODATA_ITEMINFO1_CMD_FLUSH,PICODATA_ITEMINFO2_NA)
45 
46 processed by sa (Phrasing, Accentuation):
47 - PUNC(PUNCtype,PUNCsubtype)
48 
49 unprocessed:
50 - all other item types are forwarded through the PU without modification:
51   CMD
52 
53 
54 minimal input size (before processing starts)
55 ==================
56 
57 processing (POS disambiguation, g2p, lexind, phrasing, accentuation)
58 is possible with
59 
60 - one punctuation-phrase, consisting of a sequence (see below for
61   limits) of items terminated by a PUNC item.
62 
63 (possible but not implemented: as long as the internal buffer is
64 empty, non-processed item types can be processed immediately)
65 
66 Ensuring terminal PUNC item:
67 - when reading items from the external buffer a CMD(...FLUSH...) is
68   converted to a PUNC(...FLUSH...) item
69 - If needed, a PUNC(PHRASE) is artificially added to ensure a phrase
70   fits in the PUs memory and processing can start.
71 
72 
73 items processed and output
74 ==========================
75 
76 precondition:
77 CMD(...FLUSH...) already converted to PUNC(...FLUSH...) and trailing
78 PUNC item enforced if necessary.
79 
80 ----
81 1. PROCESS_POSD: processing input WORDGRAPH or WORDINDEX items, after
82 POS disambiguation (POSes -> POS), results in a sequence of:
83 
84 -> WORDGRAPH(POS,NA)graph
85 -> WORDINDEX(POS,NA)POS|ind
86 
87 ----
88 2. PROCESS_WPHO: then, after lex-index lookup and G2P in a
89 sequence of:
90 
91 -> WORDPHON(POS,NA)phon
92 
93 (phon containing primary and secondary word-level stress)
94 
95 ----
96 3. PROCESS_PHR: then, after processing these WORDPHON items,
97 together with the trailing PUNC item results in:
98 
99 -> BOUND(BOUNDstrength,BOUNDtype)
100 
101 being added in the sequence of WORDPHON (respectively inserted instead
102 of the PUNC). All PUNC, incl PUNC(...FLUSH...) now gone.
103 
104 ----
105 4. PROCESS_ACC: then, after processing the WORDPHON and BOUND items
106 results in:
107 
108 -> WORDPHON(POS,ACC)phon
109 
110 A postprocessing step of accentuation is hard-coded in the
111 accentuation module: In case the whole word does not have any stress
112 at all (primary or secondary or both) then do the following mapping:
113 
114   ACC0 nostress -> ACC0
115   ACC1 nostress -> ACC3
116   ACC2 nostress -> ACC3
117   ACC3 nostress -> ACC3
118 
119 ----
120 - POS
121   a single, unambiguous POS
122 
123 cf. picodata.h for
124 - ACC    (sentence-level accent (aka prominence)) %d
125   PICODATA_ACC0
126   PICODATA_ACC1
127   PICODATA_ACC2  (<- maybe mapped to ACC1, ie. no ACC2 in output)
128   PICODATA_ACC3
129 
130 - BOUNDstrength %d
131   PICODATA_ITEMINFO1_BOUND_SBEG (at sentence start)
132   PICODATA_ITEMINFO1_BOUND_SEND (at sentence end)
133   PICODATA_ITEMINFO1_BOUND_TERM (replaces a flush)
134   PICODATA_ITEMINFO1_BOUND_PHR1 (primary boundary)
135   PICODATA_ITEMINFO1_BOUND_PHR2 (short break)
136   PICODATA_ITEMINFO1_BOUND_PHR3 (secondary phrase boundary, no break)
137   PICODATA_ITEMINFO1_BOUND_PHR0 (no break, not produced by sa, not existing
138           BOUND in item sequence equals PHR0 bound strength)
139 
140 - BOUNDtype    (created in sa base on punctuation, indicates type of phrase
141                 following the boundary) %d
142   PICODATA_ITEMINFO2_BOUNDTYPE_P
143   PICODATA_ITEMINFO2_BOUNDTYPE_T
144   PICODATA_ITEMINFO2_BOUNDTYPE_Q
145   PICODATA_ITEMINFO2_BOUNDTYPE_E
146 
147 
148 output sequence (without CMDs):
149 
150 <output> = { BOUND(BOUND_SBEG,PHRASEtype) <sentence> BOUND(BOUND_SEND,..)} BOUND(BOUND_TERM,..)
151 
152 
153 <sentence> =   <phrase> { BOUND(BOUND_PHR1|2|3,BOUNDtype) <phrase> }
154 
155 <phrase> = WORDPHON(POS,ACC)phon { WORDPHON(POS,ACC)phon }
156 
157 
158 Done in later PU: mapping ACC & word-level stress to syllable accent value
159   ACC0 prim -> 0
160   ACC1 prim -> 1
161   ACC2 prim -> 2
162   ACC3 prim -> 3
163   ACC0 sec  -> 0
164   ACC1 sec  -> 4
165   ACC2 sec  -> 4
166   ACC3 sec  -> 4
167 
168 
169 other limitations
170 =================
171 
172 - item size: header plus len=256 (valid for Pico in general)
173 - see defines below for max nr of items. Item heads plus ref. to contents
174   buffer are stored in array with fixed size elements. Two restrictions:
175   - MAXNR_HEADX (max nr elements==items in headx array)
176   - CONTENTSSIZE (max size of all contents together
177  */
178 
179 
180 #ifndef PICOSA_H_
181 #define PICOSA_H_
182 
183 #include "picoos.h"
184 #include "picodata.h"
185 #include "picorsrc.h"
186 
187 #ifdef __cplusplus
188 extern "C" {
189 #endif
190 #if 0
191 }
192 #endif
193 
194 
195 /* nr item restriction: maximum number of extended item heads in headx */
196 #define PICOSA_MAXNR_HEADX    60
197 /* nr item restriction: maximum size of all item contents together in cont */
198 #define PICOSA_MAXSIZE_CBUF 7680
199 
200 /* maximum length of an item incl. head for input GetItem buffer */
201 #define PICOSA_MAXITEMSIZE   260
202 
203 
204 picodata_ProcessingUnit picosa_newSentAnaUnit(
205         picoos_MemoryManager mm,
206     picoos_Common common,
207         picodata_CharBuffer cbIn,
208         picodata_CharBuffer cbOut,
209         picorsrc_Voice voice);
210 
211 #ifdef __cplusplus
212 }
213 #endif
214 
215 
216 #endif /*PICOSA_H_*/
217