cmu_grapheme_lang.c 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. /*************************************************************************/
  2. /* */
  3. /* Language Technologies Institute */
  4. /* Carnegie Mellon University */
  5. /* Copyright (c) 2013 */
  6. /* All Rights Reserved. */
  7. /* */
  8. /* Permission is hereby granted, free of charge, to use and distribute */
  9. /* this software and its documentation without restriction, including */
  10. /* without limitation the rights to use, copy, modify, merge, publish, */
  11. /* distribute, sublicense, and/or sell copies of this work, and to */
  12. /* permit persons to whom this work is furnished to do so, subject to */
  13. /* the following conditions: */
  14. /* 1. The code must retain the above copyright notice, this list of */
  15. /* conditions and the following disclaimer. */
  16. /* 2. Any modifications must be clearly marked as such. */
  17. /* 3. Original authors' names are not deleted. */
  18. /* 4. The authors' names are not used to endorse or promote products */
  19. /* derived from this software without specific prior written */
  20. /* permission. */
  21. /* */
  22. /* CARNEGIE MELLON UNIVERSITY AND THE CONTRIBUTORS TO THIS WORK */
  23. /* DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING */
  24. /* ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT */
  25. /* SHALL CARNEGIE MELLON UNIVERSITY NOR THE CONTRIBUTORS BE LIABLE */
  26. /* FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES */
  27. /* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN */
  28. /* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, */
  29. /* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF */
  30. /* THIS SOFTWARE. */
  31. /* */
  32. /*************************************************************************/
  33. /* */
  34. /* grapheme language support */
  35. /* */
  36. /*************************************************************************/
  37. #include "flite.h"
  38. #include "cst_val.h"
  39. #include "cst_voice.h"
  40. #include "cst_lexicon.h"
  41. #include "cst_ffeatures.h"
  42. #include "cmu_grapheme_lang.h"
  43. static cst_val *cmu_grapheme_tokentowords(cst_item *token)
  44. {
  45. /* Return list of words that expand token/name */
  46. cst_val *r;
  47. const char *name;
  48. name = item_name(token);
  49. if (item_feat_present(token,"phones"))
  50. return cons_val(string_val(name),NULL);
  51. #if 0
  52. if (item_feat_present(token,"nsw"))
  53. nsw = item_feat_string(token,"nsw");
  54. utt = item_utt(token);
  55. lex = val_lexicon(feat_val(utt->features,"lexicon"));
  56. #endif
  57. if (cst_strlen(name) > 0)
  58. r = cons_val(string_val(name),0);
  59. else
  60. r = NULL;
  61. return r;
  62. }
  63. int grapheme_utt_break(cst_tokenstream *ts,
  64. const char *token,
  65. cst_relation *tokens)
  66. {
  67. /* We'll respect Latin punctuation */
  68. const char *postpunct = item_feat_string(relation_tail(tokens), "punc");
  69. /* const char *ltoken = item_name(relation_tail(tokens)); */
  70. if (cst_strchr(ts->whitespace,'\n') != cst_strrchr(ts->whitespace,'\n'))
  71. /* contains two new lines */
  72. return TRUE;
  73. else if (strchr(postpunct,':') ||
  74. strchr(postpunct,'?') ||
  75. strchr(postpunct,'!'))
  76. return TRUE;
  77. else if (strchr(postpunct,'.'))
  78. return TRUE;
  79. else
  80. return FALSE;
  81. }
  82. void cmu_grapheme_lang_init(cst_voice *v)
  83. {
  84. /* Set grapheme language stuff */
  85. feat_set_string(v->features,"language","cmu_grapheme_lang");
  86. /* utterance break function */
  87. feat_set(v->features,"utt_break",breakfunc_val(&grapheme_utt_break));
  88. /* Phoneset -- need to get this from voice */
  89. feat_set(v->features,"phoneset",phoneset_val(&cmu_grapheme_phoneset));
  90. feat_set_string(v->features,"silence",cmu_grapheme_phoneset.silence);
  91. /* Get information from voice and add to lexicon */
  92. /* Text analyser -- whitespace defaults */
  93. feat_set_string(v->features,"text_whitespace",
  94. cst_ts_default_whitespacesymbols);
  95. feat_set_string(v->features,"text_postpunctuation",
  96. cst_ts_default_postpunctuationsymbols);
  97. feat_set_string(v->features,"text_prepunctuation",
  98. cst_ts_default_prepunctuationsymbols);
  99. feat_set_string(v->features,"text_singlecharsymbols",
  100. cst_ts_default_singlecharsymbols);
  101. /* Tokenization tokenization function */
  102. feat_set(v->features,"tokentowords_func",itemfunc_val(&cmu_grapheme_tokentowords));
  103. /* Pos tagger (gpos)/induced pos */
  104. /* Phrasing */
  105. feat_set(v->features,"phrasing_cart",cart_val(&cmu_grapheme_phrasing_cart));
  106. /* Intonation, Duration and F0 -- part of cg */
  107. feat_set_string(v->features,"no_intonation_accent_model","1");
  108. /* Default ffunctions (required) */
  109. basic_ff_register(v->ffunctions);
  110. return;
  111. }