/// <summary> /// Converts the given Roman numeral string into (word) Items in the WordRelation. /// </summary> /// <param name="romanString">The roman numeral string.</param> private void RomanToWords(string romanString) { string punctuation = (string)_tokenItem.FindFeature("p.punc"); if (punctuation.Equals("")) { /* no preceeding punctuation */ //string n = String.valueOf(NumberExpander.expandRoman(romanString)); var n = NumberExpander.ExpandRoman(romanString).ToString(CultureInfo.InvariantCulture); if (KingLike(_tokenItem)) { _wordRelation.AddWord("the"); NumberExpander.ExpandOrdinal(n, _wordRelation); } else if (SectionLike(_tokenItem)) { NumberExpander.ExpandNumber(n, _wordRelation); } else { NumberExpander.ExpandLetters(romanString, _wordRelation); } } else { NumberExpander.ExpandLetters(romanString, _wordRelation); } }
/// <summary> /// Convert the given digit token into (word) Items in the WordRelation. /// </summary> /// <param name="tokenVal">The digit string.</param> private void DigitsToWords(string tokenVal) { FeatureSet featureSet = _tokenItem.Features; string nsw = ""; if (featureSet.IsPresent("nsw")) { nsw = featureSet.GetString("nsw"); } if (nsw.Equals("nide")) { NumberExpander.ExpandId(tokenVal, _wordRelation); } else { string rName = featureSet.GetString("name"); string digitsType = null; if (tokenVal.Equals(rName)) { digitsType = (string)_cart.Interpret(_tokenItem); } else { featureSet.SetString("name", tokenVal); digitsType = (string)_cart.Interpret(_tokenItem); featureSet.SetString("name", rName); } if (digitsType.Equals("ordinal")) { NumberExpander.ExpandOrdinal(tokenVal, _wordRelation); } else if (digitsType.Equals("digits")) { NumberExpander.ExpandDigits(tokenVal, _wordRelation); } else if (digitsType.Equals("year")) { NumberExpander.ExpandId(tokenVal, _wordRelation); } else { NumberExpander.ExpandNumber(tokenVal, _wordRelation); } } }
/// <summary> /// Convert the given digits/digits string into word (Items) in the WordRelation. /// </summary> /// <param name="tokenVal">The digits/digits string.</param> private void DigitsSlashDigitsToWords([In] string tokenVal) { /* might be fraction, or not */ int index = tokenVal.IndexOf('/'); string aaa = tokenVal.JSubString(0, index); string bbb = tokenVal.Substring(index + 1); int a; // if the previous token is a number, add an "and" if (Matches(DigitsPattern, (string)_tokenItem.FindFeature("p.name")) && _tokenItem.GetPrevious() != null) { _wordRelation.AddWord("and"); } if (aaa.Equals("1") && bbb.Equals("2")) { _wordRelation.AddWord("a"); _wordRelation.AddWord("half"); } else if ((a = int.Parse(aaa, CultureInfo.InvariantCulture.NumberFormat)) < (int.Parse(bbb, CultureInfo.InvariantCulture.NumberFormat))) { NumberExpander.ExpandNumber(aaa, _wordRelation); NumberExpander.ExpandOrdinal(bbb, _wordRelation); if (a > 1) { _wordRelation.AddWord("'s"); } } else { NumberExpander.ExpandNumber(aaa, _wordRelation); _wordRelation.AddWord("slash"); NumberExpander.ExpandNumber(bbb, _wordRelation); } }
/// <summary> /// Converts US money string into (word) Items in the WordRelation. /// </summary> /// <param name="tokenVal">The US money string.</param> private void UsMoneyToWords(string tokenVal) { int dotIndex = tokenVal.IndexOf('.'); if (Matches(IllionPattern, (string)_tokenItem.FindFeature("n.name"))) { NumberExpander.ExpandReal(tokenVal.Substring(1), _wordRelation); } else if (dotIndex == -1) { string aaa = tokenVal.Substring(1); TokenToWords(aaa); if (aaa.Equals("1")) { _wordRelation.AddWord("dollar"); } else { _wordRelation.AddWord("dollars"); } } else if (dotIndex == (tokenVal.Length - 1) || (tokenVal.Length - dotIndex) > 3) { // Simply read as mumble point mumble. NumberExpander.ExpandReal(tokenVal.Substring(1), _wordRelation); _wordRelation.AddWord("dollars"); } else { string aaa = tokenVal.JSubString(1, dotIndex).Replace(",", ""); string bbb = tokenVal.Substring(dotIndex + 1); NumberExpander.ExpandNumber(aaa, _wordRelation); if (aaa.Equals("1")) { _wordRelation.AddWord("dollar"); } else { _wordRelation.AddWord("dollars"); } if (bbb.Equals("00")) { // Add nothing to the word list. } else { NumberExpander.ExpandNumber(bbb, _wordRelation); if (bbb.Equals("01")) { _wordRelation.AddWord("cent"); } else { _wordRelation.AddWord("cents"); } } } }
/// <summary> /// Converts the given Token into (word) Items in the WordRelation. /// </summary> /// <param name="tokenVal">the string value of the token, which may or may not be /// same as the one in called "name" in flite</param> private void TokenToWords(string tokenVal) { FeatureSet tokenFeatures = _tokenItem.Features; string itemName = tokenFeatures.GetString("name"); int tokenLength = tokenVal.Length; if (tokenFeatures.IsPresent("phones")) { _wordRelation.AddWord(tokenVal); } else if ((tokenVal.Equals("a") || tokenVal.Equals("A")) && ((_tokenItem.GetNext() == null) || !(tokenVal.Equals(itemName)) || !(((string)_tokenItem .FindFeature("punc")).Equals("")))) { /* if A is a sub part of a token, then its ey not ah */ _wordRelation.AddWord("_a"); } else if (Matches(AlphabetPattern, tokenVal)) { if (Matches(RomanNumbersPattern, tokenVal)) { /* XVIII */ RomanToWords(tokenVal); } else if (Matches(IllionPattern, tokenVal) && Matches(UsMoneyPattern, (string)_tokenItem.FindFeature("p.name"))) { /* $ X -illion */ _wordRelation.AddWord(tokenVal); _wordRelation.AddWord("dollars"); } else if (Matches(DrStPattern, tokenVal)) { /* St Andrew's St, Dr King Dr */ DrStToWords(tokenVal); } else if (tokenVal.Equals("Mr")) { _tokenItem.Features.SetString("punc", ""); _wordRelation.AddWord("mister"); } else if (tokenVal.Equals("Mrs")) { _tokenItem.Features.SetString("punc", ""); _wordRelation.AddWord("missus"); } else if (tokenLength == 1 && char.IsUpper(tokenVal[0]) && ((string)_tokenItem.FindFeature("n.whitespace")) .Equals(" ") && char.IsUpper(((string)_tokenItem .FindFeature("n.name"))[0])) { tokenFeatures.SetString("punc", ""); string aaa = tokenVal.ToLower(); if (aaa.Equals("a")) { _wordRelation.AddWord("_a"); } else { _wordRelation.AddWord(aaa); } } else if (IsStateName(tokenVal)) { /* * The name of a US state isStateName() has already added the * full name of the state, so we're all set. */ } else if (tokenLength > 1 && !IsPronounceable(tokenVal)) { /* Need common exception list */ /* unpronouncable list of alphas */ NumberExpander.ExpandLetters(tokenVal, _wordRelation); } else { /* just a word */ _wordRelation.AddWord(tokenVal.ToLower()); } } else if (Matches(DottedAbbrevPattern, tokenVal)) { /* U.S.A. */ // remove all dots NumberExpander.ExpandLetters(tokenVal.Replace(".", ""), _wordRelation); } else if (Matches(CommaIntPattern, tokenVal)) { /* 99,999,999 */ NumberExpander.ExpandReal(tokenVal.Replace(",", "").Replace("'", ""), _wordRelation); } else if (Matches(SevenPhoneNumberPattern, tokenVal)) { /* 234-3434 telephone numbers */ int dashIndex = tokenVal.IndexOf('-'); string aaa = tokenVal.JSubString(0, dashIndex); string bbb = tokenVal.Substring(dashIndex + 1); NumberExpander.ExpandDigits(aaa, _wordRelation); _wordRelation.AddBreak(); NumberExpander.ExpandDigits(bbb, _wordRelation); } else if (MatchesPartPhoneNumber(tokenVal)) { /* part of a telephone number */ var punctuation = (string)_tokenItem.FindFeature("punc"); if (punctuation.Equals("")) { _tokenItem.Features.SetString("punc", ","); } NumberExpander.ExpandDigits(tokenVal, _wordRelation); _wordRelation.AddBreak(); } else if (Matches(NumberTimePattern, tokenVal)) { /* 12:35 */ int colonIndex = tokenVal.IndexOf(':'); string aaa = tokenVal.JSubString(0, colonIndex); string bbb = tokenVal.Substring(colonIndex + 1); NumberExpander.ExpandNumber(aaa, _wordRelation); if (!(bbb.Equals("00"))) { NumberExpander.ExpandId(bbb, _wordRelation); } } else if (Matches(Digits2DashPattern, tokenVal)) { /* 999-999-999 */ DigitsDashToWords(tokenVal); } else if (Matches(DigitsPattern, tokenVal)) { DigitsToWords(tokenVal); } else if (tokenLength == 1 && char.IsUpper(tokenVal[0]) && ((string)_tokenItem.FindFeature("n.whitespace")) .Equals(" ") && char.IsUpper(((string)_tokenItem .FindFeature("n.name"))[0])) { tokenFeatures.SetString("punc", ""); string aaa = tokenVal.ToLower(); if (aaa.Equals("a")) { _wordRelation.AddWord("_a"); } else { _wordRelation.AddWord(aaa); } } else if (Matches(DoublePattern, tokenVal)) { NumberExpander.ExpandReal(tokenVal, _wordRelation); } else if (Matches(OrdinalPattern, tokenVal)) { /* explicit ordinals */ string aaa = tokenVal.JSubString(0, tokenLength - 2); NumberExpander.ExpandOrdinal(aaa, _wordRelation); } else if (Matches(UsMoneyPattern, tokenVal)) { /* US money */ UsMoneyToWords(tokenVal); } else if (tokenLength > 0 && tokenVal[tokenLength - 1] == '%') { /* Y% */ TokenToWords(tokenVal.JSubString(0, tokenLength - 1)); _wordRelation.AddWord("percent"); } else if (Matches(NumessPattern, tokenVal)) { NumberExpander.ExpandNumess(tokenVal.JSubString(0, tokenLength - 1), _wordRelation); } else if (Matches(DigitsSlashDigitsPattern, tokenVal) && tokenVal.Equals(itemName)) { DigitsSlashDigitsToWords(tokenVal); } else if (tokenVal.IndexOf('-') != -1) { DashToWords(tokenVal); } else if (tokenLength > 1 && !Matches(AlphabetPattern, tokenVal)) { NotJustAlphasToWords(tokenVal); } else if (tokenVal.Equals("&")) { // & _wordRelation.AddWord("and"); } else if (tokenVal.Equals("-")) { // Skip it } else { // Just a word. _wordRelation.AddWord(tokenVal.ToLower()); } }