| /* |
| * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland |
| * |
| * 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. |
| */ |
| /** |
| * @file picosa.h |
| * |
| * sentence analysis - POS disambiguation - Include file |
| * |
| * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland |
| * All rights reserved. |
| * |
| * History: |
| * - 2009-04-20 -- initial version |
| * |
| */ |
| |
| |
| /** @addtogroup picosa |
| * ---------------------------------------------------\n |
| * <b> Pico Sentence analysis </b>\n |
| * ---------------------------------------------------\n |
| * |
| itemtype, iteminfo1, iteminfo2, content -> TYPE(INFO1,INFO2)content |
| in the following |
| |
| items input |
| =========== |
| |
| processed by sa (POS disambiguation): |
| - WORDGRAPH(POSes,NA)graph |
| - WORDINDEX(POSes,NA)POS|1ind1...POSN|indN |
| - CMD(PICODATA_ITEMINFO1_CMD_FLUSH,PICODATA_ITEMINFO2_NA) |
| |
| processed by sa (Phrasing, Accentuation): |
| - PUNC(PUNCtype,PUNCsubtype) |
| |
| unprocessed: |
| - all other item types are forwarded through the PU without modification: |
| CMD |
| |
| |
| minimal input size (before processing starts) |
| ================== |
| |
| processing (POS disambiguation, g2p, lexind, phrasing, accentuation) |
| is possible with |
| |
| - one punctuation-phrase, consisting of a sequence (see below for |
| limits) of items terminated by a PUNC item. |
| |
| (possible but not implemented: as long as the internal buffer is |
| empty, non-processed item types can be processed immediately) |
| |
| Ensuring terminal PUNC item: |
| - when reading items from the external buffer a CMD(...FLUSH...) is |
| converted to a PUNC(...FLUSH...) item |
| - If needed, a PUNC(PHRASE) is artificially added to ensure a phrase |
| fits in the PUs memory and processing can start. |
| |
| |
| items processed and output |
| ========================== |
| |
| precondition: |
| CMD(...FLUSH...) already converted to PUNC(...FLUSH...) and trailing |
| PUNC item enforced if necessary. |
| |
| ---- |
| 1. PROCESS_POSD: processing input WORDGRAPH or WORDINDEX items, after |
| POS disambiguation (POSes -> POS), results in a sequence of: |
| |
| -> WORDGRAPH(POS,NA)graph |
| -> WORDINDEX(POS,NA)POS|ind |
| |
| ---- |
| 2. PROCESS_WPHO: then, after lex-index lookup and G2P in a |
| sequence of: |
| |
| -> WORDPHON(POS,NA)phon |
| |
| (phon containing primary and secondary word-level stress) |
| |
| ---- |
| 3. PROCESS_PHR: then, after processing these WORDPHON items, |
| together with the trailing PUNC item results in: |
| |
| -> BOUND(BOUNDstrength,BOUNDtype) |
| |
| being added in the sequence of WORDPHON (respectively inserted instead |
| of the PUNC). All PUNC, incl PUNC(...FLUSH...) now gone. |
| |
| ---- |
| 4. PROCESS_ACC: then, after processing the WORDPHON and BOUND items |
| results in: |
| |
| -> WORDPHON(POS,ACC)phon |
| |
| A postprocessing step of accentuation is hard-coded in the |
| accentuation module: In case the whole word does not have any stress |
| at all (primary or secondary or both) then do the following mapping: |
| |
| ACC0 nostress -> ACC0 |
| ACC1 nostress -> ACC3 |
| ACC2 nostress -> ACC3 |
| ACC3 nostress -> ACC3 |
| |
| ---- |
| - POS |
| a single, unambiguous POS |
| |
| cf. picodata.h for |
| - ACC (sentence-level accent (aka prominence)) %d |
| PICODATA_ACC0 |
| PICODATA_ACC1 |
| PICODATA_ACC2 (<- maybe mapped to ACC1, ie. no ACC2 in output) |
| PICODATA_ACC3 |
| |
| - BOUNDstrength %d |
| PICODATA_ITEMINFO1_BOUND_SBEG (at sentence start) |
| PICODATA_ITEMINFO1_BOUND_SEND (at sentence end) |
| PICODATA_ITEMINFO1_BOUND_TERM (replaces a flush) |
| PICODATA_ITEMINFO1_BOUND_PHR1 (primary boundary) |
| PICODATA_ITEMINFO1_BOUND_PHR2 (short break) |
| PICODATA_ITEMINFO1_BOUND_PHR3 (secondary phrase boundary, no break) |
| PICODATA_ITEMINFO1_BOUND_PHR0 (no break, not produced by sa, not existing |
| BOUND in item sequence equals PHR0 bound strength) |
| |
| - BOUNDtype (created in sa base on punctuation, indicates type of phrase |
| following the boundary) %d |
| PICODATA_ITEMINFO2_BOUNDTYPE_P |
| PICODATA_ITEMINFO2_BOUNDTYPE_T |
| PICODATA_ITEMINFO2_BOUNDTYPE_Q |
| PICODATA_ITEMINFO2_BOUNDTYPE_E |
| |
| |
| output sequence (without CMDs): |
| |
| <output> = { BOUND(BOUND_SBEG,PHRASEtype) <sentence> BOUND(BOUND_SEND,..)} BOUND(BOUND_TERM,..) |
| |
| |
| <sentence> = <phrase> { BOUND(BOUND_PHR1|2|3,BOUNDtype) <phrase> } |
| |
| <phrase> = WORDPHON(POS,ACC)phon { WORDPHON(POS,ACC)phon } |
| |
| |
| Done in later PU: mapping ACC & word-level stress to syllable accent value |
| ACC0 prim -> 0 |
| ACC1 prim -> 1 |
| ACC2 prim -> 2 |
| ACC3 prim -> 3 |
| ACC0 sec -> 0 |
| ACC1 sec -> 4 |
| ACC2 sec -> 4 |
| ACC3 sec -> 4 |
| |
| |
| other limitations |
| ================= |
| |
| - item size: header plus len=256 (valid for Pico in general) |
| - see defines below for max nr of items. Item heads plus ref. to contents |
| buffer are stored in array with fixed size elements. Two restrictions: |
| - MAXNR_HEADX (max nr elements==items in headx array) |
| - CONTENTSSIZE (max size of all contents together |
| */ |
| |
| |
| #ifndef PICOSA_H_ |
| #define PICOSA_H_ |
| |
| #include "picoos.h" |
| #include "picodata.h" |
| #include "picorsrc.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| #if 0 |
| } |
| #endif |
| |
| |
| /* nr item restriction: maximum number of extended item heads in headx */ |
| #define PICOSA_MAXNR_HEADX 60 |
| /* nr item restriction: maximum size of all item contents together in cont */ |
| #define PICOSA_MAXSIZE_CBUF 7680 |
| |
| /* maximum length of an item incl. head for input GetItem buffer */ |
| #define PICOSA_MAXITEMSIZE 260 |
| |
| |
| picodata_ProcessingUnit picosa_newSentAnaUnit( |
| picoos_MemoryManager mm, |
| picoos_Common common, |
| picodata_CharBuffer cbIn, |
| picodata_CharBuffer cbOut, |
| picorsrc_Voice voice); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| |
| #endif /*PICOSA_H_*/ |