/// <summary> /// Восстановление предложения из грамматических характеристик каждого слова /// с использованием обобщённой функции sol_GenerateWordformsFX. /// </summary> public string RestoreSentenceOnePass(SentenceMap sentence) { if (sentence == null) { return(""); } // Перечень характеристик, нужных для восстановления слова по словоформе var props = new GrenProperty[] { GrenProperty.NUMBER_ru, GrenProperty.CASE_ru, GrenProperty.GENDER_ru, GrenProperty.TENSE_ru, GrenProperty.PERSON_ru, GrenProperty.FORM_ru, GrenProperty.SHORTNESS_ru, GrenProperty.COMPAR_FORM_ru }; var sb = new StringBuilder(); var coords = new ArrayList(); var states = new ArrayList(); for (int i = 0; i < sentence.Capasity; i++) { var wmap = sentence.GetWordByOrder(i); coords.Clear(); states.Clear(); foreach (var prop in props) { var val = wmap.GetPropertyValue(prop); if (val > -1) { coords.Add((int)prop); states.Add((int)val); } } // Проверка ID_Entry (В БД не хранится ID_Entry) int entry_id = GrammarEngine.sol_FindEntry(hEngine, wmap.EntryName, wmap.ID_PartOfSpeech, GrammarEngineAPI.RUSSIAN_LANGUAGE); //if( entry_id==-1 ) string word = ""; ArrayList fx = GrammarEngine.sol_GenerateWordformsFX(hEngine, entry_id, coords, states); //ArrayList fx = GrammarEngine.sol_GenerateWordformsFX(hEngine, wmap.ID_Entry, coords, states); if (fx != null && fx.Count > 0) { word = (fx[0] as String).ToLower(); } if (word != "") { if (i == 0) { word = char.ToUpper(word[0]) + word.Substring(1); } if (i > 0 && i < sentence.Capasity && wmap.ID_PartOfSpeech != GrammarEngineAPI.PUNCTUATION_class) { sb.Append(" "); } sb.Append(word); } } return(sb.ToString()); }
public int GetPropertyValue(GrenProperty property) { if (pairs.ContainsKey((int)property)) { return(pairs[(int)property]); } else { return(-1); } }