summaryrefslogtreecommitdiffstats
path: root/pico/lib/picosa.h
diff options
context:
space:
mode:
Diffstat (limited to 'pico/lib/picosa.h')
-rw-r--r--pico/lib/picosa.h216
1 files changed, 216 insertions, 0 deletions
diff --git a/pico/lib/picosa.h b/pico/lib/picosa.h
new file mode 100644
index 0000000..c35da2e
--- /dev/null
+++ b/pico/lib/picosa.h
@@ -0,0 +1,216 @@
+/*
+ * 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_*/