internal void Deserialize(Stream stream) { m_Class = new Pullenti.Morph.MorphClass() { Value = Pullenti.Ner.Core.Internal.SerializerHelper.DeserializeShort(stream) }; m_Case = new Pullenti.Morph.MorphCase() { Value = Pullenti.Ner.Core.Internal.SerializerHelper.DeserializeShort(stream) }; m_Gender = (Pullenti.Morph.MorphGender)Pullenti.Ner.Core.Internal.SerializerHelper.DeserializeShort(stream); m_Number = (Pullenti.Morph.MorphNumber)Pullenti.Ner.Core.Internal.SerializerHelper.DeserializeShort(stream); m_Voice = (Pullenti.Morph.MorphVoice)Pullenti.Ner.Core.Internal.SerializerHelper.DeserializeShort(stream); m_Language = new Pullenti.Morph.MorphLang() { Value = Pullenti.Ner.Core.Internal.SerializerHelper.DeserializeShort(stream) }; int cou = Pullenti.Ner.Core.Internal.SerializerHelper.DeserializeInt(stream); m_Items = new List <Pullenti.Morph.MorphBaseInfo>(); for (int i = 0; i < cou; i++) { Pullenti.Morph.MorphBaseInfo it = this.DeserializeItem(stream); if (it != null) { m_Items.Add(it); } } m_NeedRecalc = false; }
public void RemoveItems(Pullenti.Morph.MorphNumber num) { if (m_Items == null) { return; } for (int i = m_Items.Count - 1; i >= 0; i--) { if (((m_Items[i].Number & num)) == Pullenti.Morph.MorphNumber.Undefined) { m_Items.RemoveAt(i); m_NeedRecalc = true; } } }
public Pullenti.Morph.MorphBaseInfo FindItem(Pullenti.Morph.MorphCase cas, Pullenti.Morph.MorphNumber num = Pullenti.Morph.MorphNumber.Undefined, Pullenti.Morph.MorphGender gen = Pullenti.Morph.MorphGender.Undefined) { if (m_Items == null) { return(null); } Pullenti.Morph.MorphBaseInfo res = null; int maxCoef = 0; foreach (Pullenti.Morph.MorphBaseInfo it in m_Items) { if (!cas.IsUndefined) { if (((it.Case & cas)).IsUndefined) { continue; } } if (num != Pullenti.Morph.MorphNumber.Undefined) { if (((num & it.Number)) == Pullenti.Morph.MorphNumber.Undefined) { continue; } } if (gen != Pullenti.Morph.MorphGender.Undefined) { if (((gen & it.Gender)) == Pullenti.Morph.MorphGender.Undefined) { continue; } } Pullenti.Morph.MorphWordForm wf = it as Pullenti.Morph.MorphWordForm; if (wf != null && wf.UndefCoef > 0) { if (wf.UndefCoef > maxCoef) { maxCoef = wf.UndefCoef; res = it; } continue; } return(it); } return(res); }
public override string GetNormalCaseText(Pullenti.Morph.MorphClass mc = null, Pullenti.Morph.MorphNumber num = Pullenti.Morph.MorphNumber.Undefined, Pullenti.Morph.MorphGender gender = Pullenti.Morph.MorphGender.Undefined, bool keepChars = false) { StringBuilder res = new StringBuilder(); if (gender == Pullenti.Morph.MorphGender.Undefined) { gender = Morph.Gender; } if (Adverbs != null && Adverbs.Count > 0) { int i = 0; if (Adjectives.Count > 0) { for (int j = 0; j < Adjectives.Count; j++) { for (; i < Adverbs.Count; i++) { if (Adverbs[i].BeginChar < Adjectives[j].BeginChar) { res.AppendFormat("{0} ", Adverbs[i].GetNormalCaseText(Pullenti.Morph.MorphClass.Adverb, Pullenti.Morph.MorphNumber.Undefined, Pullenti.Morph.MorphGender.Undefined, false)); } else { break; } } string s = Adjectives[j].GetNormalCaseText(Pullenti.Morph.MorphClass.Adjective | Pullenti.Morph.MorphClass.Pronoun, num, gender, keepChars); res.AppendFormat("{0} ", s ?? "?"); } } for (; i < Adverbs.Count; i++) { res.AppendFormat("{0} ", Adverbs[i].GetNormalCaseText(Pullenti.Morph.MorphClass.Adverb, Pullenti.Morph.MorphNumber.Undefined, Pullenti.Morph.MorphGender.Undefined, false)); } } else { foreach (Pullenti.Ner.MetaToken t in Adjectives) { string s = t.GetNormalCaseText(Pullenti.Morph.MorphClass.Adjective | Pullenti.Morph.MorphClass.Pronoun, num, gender, keepChars); res.AppendFormat("{0} ", s ?? "?"); } } string r = null; if ((Noun.BeginToken is Pullenti.Ner.ReferentToken) && Noun.BeginToken == Noun.EndToken) { r = Noun.BeginToken.GetNormalCaseText(null, num, gender, keepChars); } else { Pullenti.Morph.MorphClass cas = Pullenti.Morph.MorphClass.Noun | Pullenti.Morph.MorphClass.Pronoun; if (mc != null && !mc.IsUndefined) { cas = mc; } r = Noun.GetNormalCaseText(cas, num, gender, keepChars); } if (r == null || r == "?") { r = Noun.GetNormalCaseText(null, num, Pullenti.Morph.MorphGender.Undefined, false); } res.Append(r ?? Noun.ToString()); return(res.ToString()); }
/// <summary> /// Удалить элементы, не соответствующие параметрам /// </summary> public void RemoveItems(Pullenti.Morph.MorphBaseInfo inf) { if (m_Items == null) { return; } if (m_Items.Count == 0) { if (inf.Gender != Pullenti.Morph.MorphGender.Undefined) { m_Gender &= inf.Gender; } if (inf.Number != Pullenti.Morph.MorphNumber.Undefined) { m_Number &= inf.Number; } if (!inf.Case.IsUndefined) { m_Case &= inf.Case; } return; } for (int i = m_Items.Count - 1; i >= 0; i--) { bool ok = true; Pullenti.Morph.MorphBaseInfo it = m_Items[i]; if (inf.Gender != Pullenti.Morph.MorphGender.Undefined) { if (((it.Gender & inf.Gender)) == Pullenti.Morph.MorphGender.Undefined) { ok = false; } } bool chNum = false; if (inf.Number != Pullenti.Morph.MorphNumber.Plural && inf.Number != Pullenti.Morph.MorphNumber.Undefined) { if (((it.Number & inf.Number)) == Pullenti.Morph.MorphNumber.Undefined) { ok = false; } chNum = true; } if (!inf.Class.IsUndefined) { if (((inf.Class & it.Class)).IsUndefined) { ok = false; } } if (!inf.Case.IsUndefined) { if (((inf.Case & it.Case)).IsUndefined) { ok = false; } } if (!ok) { m_Items.RemoveAt(i); m_NeedRecalc = true; } else { if (!inf.Case.IsUndefined) { if (it.Case != ((inf.Case & it.Case))) { it.Case = (inf.Case & it.Case); m_NeedRecalc = true; } } if (inf.Gender != Pullenti.Morph.MorphGender.Undefined) { if (it.Gender != ((inf.Gender & it.Gender))) { it.Gender = (inf.Gender & it.Gender); m_NeedRecalc = true; } } if (chNum) { if (it.Number != ((inf.Number & it.Number))) { it.Number = (inf.Number & it.Number); m_NeedRecalc = true; } } } } }
/// <summary> /// Получить связанный с токеном текст в именительном падеже /// </summary> /// <param name="mc">желательная часть речи</param> /// <param name="num">желательное число</param> /// <param name="gender">желательный пол</param> /// <param name="keepChars">сохранять регистр символов (по умолчанию, всё в верхний)</param> /// <return>строка текста</return> public virtual string GetNormalCaseText(Pullenti.Morph.MorphClass mc = null, Pullenti.Morph.MorphNumber num = Pullenti.Morph.MorphNumber.Undefined, Pullenti.Morph.MorphGender gender = Pullenti.Morph.MorphGender.Undefined, bool keepChars = false) { return(this.ToString()); }
void _recalc() { m_NeedRecalc = false; if (m_Items == null || m_Items.Count == 0) { return; } m_Class = new Pullenti.Morph.MorphClass(); m_Gender = Pullenti.Morph.MorphGender.Undefined; bool g = m_Gender == Pullenti.Morph.MorphGender.Undefined; m_Number = Pullenti.Morph.MorphNumber.Undefined; bool n = m_Number == Pullenti.Morph.MorphNumber.Undefined; m_Case = new Pullenti.Morph.MorphCase(); bool ca = m_Case.IsUndefined; bool la = m_Language == null || m_Language.IsUndefined; m_Voice = Pullenti.Morph.MorphVoice.Undefined; bool verbHasUndef = false; if (m_Items != null) { foreach (Pullenti.Morph.MorphBaseInfo it in m_Items) { m_Class.Value |= it.Class.Value; if (g) { m_Gender |= it.Gender; } if (ca) { m_Case |= it.Case; } if (n) { m_Number |= it.Number; } if (la) { m_Language.Value |= it.Language.Value; } if (it.Class.IsVerb) { if (it is Pullenti.Morph.MorphWordForm) { Pullenti.Morph.MorphVoice v = (it as Pullenti.Morph.MorphWordForm).Misc.Voice; if (v == Pullenti.Morph.MorphVoice.Undefined) { verbHasUndef = true; } else { m_Voice |= v; } } } } } if (verbHasUndef) { m_Voice = Pullenti.Morph.MorphVoice.Undefined; } }
public string GetWordform(string word, Pullenti.Morph.MorphClass cla, Pullenti.Morph.MorphGender gender, Pullenti.Morph.MorphCase cas, Pullenti.Morph.MorphNumber num, Pullenti.Morph.MorphLang lang, Pullenti.Morph.MorphWordForm addInfo) { if (Pullenti.Morph.LanguageHelper.IsCyrillicChar(word[0])) { if (m_EngineRu.Language.IsRu && lang.IsRu) { return(m_EngineRu.GetWordform(word, cla, gender, cas, num, addInfo)); } if (m_EngineUa.Language.IsUa && lang.IsUa) { return(m_EngineUa.GetWordform(word, cla, gender, cas, num, addInfo)); } if (m_EngineBy.Language.IsBy && lang.IsBy) { return(m_EngineBy.GetWordform(word, cla, gender, cas, num, addInfo)); } if (m_EngineKz.Language.IsKz && lang.IsKz) { return(m_EngineKz.GetWordform(word, cla, gender, cas, num, addInfo)); } return(m_EngineRu.GetWordform(word, cla, gender, cas, num, addInfo)); } else { return(m_EngineEn.GetWordform(word, cla, gender, cas, num, addInfo)); } }
public override string GetNormalCaseText(Pullenti.Morph.MorphClass mc = null, Pullenti.Morph.MorphNumber num = Pullenti.Morph.MorphNumber.Undefined, Pullenti.Morph.MorphGender gender = Pullenti.Morph.MorphGender.Undefined, bool keepChars = false) { string res = Normal; if (keepChars) { if (Chars.IsAllLower) { res = res.ToLower(); } else if (Chars.IsAllUpper) { } else if (Chars.IsCapitalUpper) { res = MiscHelper.ConvertFirstCharUpperAndOtherLower(res); } } return(res); }
public override string GetNormalCaseText(Pullenti.Morph.MorphClass mc = null, Pullenti.Morph.MorphNumber num = Pullenti.Morph.MorphNumber.Undefined, Pullenti.Morph.MorphGender gender = Pullenti.Morph.MorphGender.Undefined, bool keepChars = false) { GetTextAttr attr = GetTextAttr.No; if (num == Pullenti.Morph.MorphNumber.Singular) { attr |= GetTextAttr.FirstNounGroupToNominativeSingle; } else { attr |= GetTextAttr.FirstNounGroupToNominative; } if (keepChars) { attr |= GetTextAttr.KeepRegister; } return(MiscHelper.GetTextValue(BeginToken, EndToken, attr)); }
public override string GetNormalCaseText(Pullenti.Morph.MorphClass mc = null, Pullenti.Morph.MorphNumber num = Pullenti.Morph.MorphNumber.Undefined, Pullenti.Morph.MorphGender gender = Pullenti.Morph.MorphGender.Undefined, bool keepChars = false) { if ((BeginToken is Pullenti.Ner.ReferentToken) && BeginToken == EndToken) { return(BeginToken.GetNormalCaseText(mc, num, gender, keepChars)); } string res = null; int maxCoef = 0; int defCoef = -1; foreach (Pullenti.Morph.MorphBaseInfo it in Morph.Items) { NounPhraseItemTextVar v = it as NounPhraseItemTextVar; if (v == null) { continue; } if (v.UndefCoef > 0 && (((v.UndefCoef < maxCoef) || defCoef >= 0))) { continue; } if (num == Pullenti.Morph.MorphNumber.Singular && v.SingleNumberValue != null) { if (mc != null && ((gender == Pullenti.Morph.MorphGender.Neuter || gender == Pullenti.Morph.MorphGender.Feminie)) && mc.IsAdjective) { Pullenti.Morph.MorphBaseInfo bi = new Pullenti.Morph.MorphBaseInfo() { Class = new Pullenti.Morph.MorphClass() { Value = mc.Value }, Gender = gender, Number = Pullenti.Morph.MorphNumber.Singular, Case = Pullenti.Morph.MorphCase.Nominative, Language = Morph.Language }; string str = Pullenti.Morph.MorphologyService.GetWordform(v.SingleNumberValue, bi); if (str != null) { res = str; } } else { res = v.SingleNumberValue; } if (v.UndefCoef == 0) { break; } maxCoef = v.UndefCoef; continue; } if (string.IsNullOrEmpty(v.NormalValue)) { continue; } if (char.IsDigit(v.NormalValue[0]) && mc != null && mc.IsAdjective) { int val; if (int.TryParse(v.NormalValue, out val)) { string str = Pullenti.Ner.Core.NumberHelper.GetNumberAdjective(val, gender, (num == Pullenti.Morph.MorphNumber.Singular || val == 1 ? Pullenti.Morph.MorphNumber.Singular : Pullenti.Morph.MorphNumber.Plural)); if (str != null) { res = str; if (v.UndefCoef == 0) { break; } maxCoef = v.UndefCoef; continue; } } } string res1 = (it as NounPhraseItemTextVar).NormalValue; if (num == Pullenti.Morph.MorphNumber.Singular) { if (res1 == "ДЕТИ") { res1 = "РЕБЕНОК"; } else if (res1 == "ЛЮДИ") { res1 = "ЧЕЛОВЕК"; } } maxCoef = v.UndefCoef; if (v.UndefCoef > 0) { res = res1; continue; } int defCo = 0; if (mc != null && mc.IsAdjective && v.UndefCoef == 0) { } else if (((BeginToken is Pullenti.Ner.TextToken) && res1 == (BeginToken as Pullenti.Ner.TextToken).Term && it.Case.IsNominative) && it.Number == Pullenti.Morph.MorphNumber.Singular) { defCo = 1; } if (num == Pullenti.Morph.MorphNumber.Plural && ((v.Number & Pullenti.Morph.MorphNumber.Plural)) == Pullenti.Morph.MorphNumber.Plural) { defCo += 3; } if (res == null || defCo > defCoef) { res = res1; defCoef = defCo; if (defCo > 0) { break; } } } if (res != null) { return(this._corrChars(res, keepChars)); } if (res == null && BeginToken == EndToken) { res = BeginToken.GetNormalCaseText(mc, num, gender, keepChars); } else if (res == null) { res = BeginToken.GetNormalCaseText(mc, num, gender, keepChars); if (res == null) { res = Pullenti.Ner.Core.MiscHelper.GetTextValueOfMetaToken(this, (keepChars ? Pullenti.Ner.Core.GetTextAttr.KeepRegister : Pullenti.Ner.Core.GetTextAttr.No)); } else { res = string.Format("{0} {1}", res, Pullenti.Ner.Core.MiscHelper.GetTextValue(BeginToken.Next, EndToken, (keepChars ? Pullenti.Ner.Core.GetTextAttr.KeepRegister : Pullenti.Ner.Core.GetTextAttr.No))); } } return(res ?? "?"); }
public override string GetNormalCaseText(Pullenti.Morph.MorphClass mc = null, Pullenti.Morph.MorphNumber num = Pullenti.Morph.MorphNumber.Undefined, Pullenti.Morph.MorphGender gender = Pullenti.Morph.MorphGender.Undefined, bool keepChars = false) { if (gender == Pullenti.Morph.MorphGender.Undefined) { gender = Source.Morph.Gender; } StringBuilder res = new StringBuilder(); for (int k = AdjIndex1; k <= AdjIndex2; k++) { string adj = Source.Adjectives[k].GetNormalCaseText(Pullenti.Morph.MorphClass.Adjective | Pullenti.Morph.MorphClass.Pronoun, num, gender, keepChars); if (adj == null || adj == "?") { adj = MiscHelper.GetTextValueOfMetaToken(Source.Adjectives[k], (keepChars ? GetTextAttr.KeepRegister : GetTextAttr.No)); } res.AppendFormat("{0} ", adj ?? "?"); } string noun = null; if ((Source.Noun.BeginToken is Pullenti.Ner.ReferentToken) && Source.BeginToken == Source.Noun.EndToken) { noun = Source.Noun.BeginToken.GetNormalCaseText(null, num, gender, keepChars); } else { Pullenti.Morph.MorphClass cas = Pullenti.Morph.MorphClass.Noun | Pullenti.Morph.MorphClass.Pronoun; if (mc != null && !mc.IsUndefined) { cas = mc; } noun = Source.Noun.GetNormalCaseText(cas, num, gender, keepChars); } if (noun == null || noun == "?") { noun = Source.Noun.GetNormalCaseText(null, num, Pullenti.Morph.MorphGender.Undefined, false); } res.Append(noun ?? "?"); return(res.ToString()); }
public override string GetNormalCaseText(Pullenti.Morph.MorphClass mc = null, Pullenti.Morph.MorphNumber num = Pullenti.Morph.MorphNumber.Undefined, Pullenti.Morph.MorphGender gender = Pullenti.Morph.MorphGender.Undefined, bool keepChars = false) { bool empty = true; if (mc != null && mc.IsPreposition) { return(Pullenti.Morph.LanguageHelper.NormalizePreposition(Term)); } foreach (Pullenti.Morph.MorphBaseInfo it in Morph.Items) { if (mc != null && !mc.IsUndefined) { Pullenti.Morph.MorphClass cc = it.Class & mc; if (cc.IsUndefined) { continue; } if (cc.IsMisc && !cc.IsProper && mc != it.Class) { continue; } } Pullenti.Morph.MorphWordForm wf = it as Pullenti.Morph.MorphWordForm; bool normalFull = false; if (gender != Pullenti.Morph.MorphGender.Undefined) { if (((it.Gender & gender)) == Pullenti.Morph.MorphGender.Undefined) { if ((gender == Pullenti.Morph.MorphGender.Masculine && ((it.Gender != Pullenti.Morph.MorphGender.Undefined || it.Number == Pullenti.Morph.MorphNumber.Plural)) && wf != null) && wf.NormalFull != null) { normalFull = true; } else if (gender == Pullenti.Morph.MorphGender.Masculine && it.Class.IsPersonalPronoun) { } else { continue; } } } if (!it.Case.IsUndefined) { empty = false; } if (wf != null) { string res; if (num == Pullenti.Morph.MorphNumber.Singular && it.Number == Pullenti.Morph.MorphNumber.Plural && wf.NormalFull != null) { int le = wf.NormalCase.Length; if ((le == (wf.NormalFull.Length + 2) && le > 4 && wf.NormalCase[le - 2] == 'С') && wf.NormalCase[le - 1] == 'Я') { res = wf.NormalCase; } else { res = (normalFull ? wf.NormalFull : wf.NormalFull); } } else { res = (normalFull ? wf.NormalFull : (wf.NormalCase ?? Term)); } if (num == Pullenti.Morph.MorphNumber.Singular && mc != null && mc == Pullenti.Morph.MorphClass.Noun) { if (res == "ДЕТИ") { res = "РЕБЕНОК"; } } if (keepChars) { if (Chars.IsAllLower) { res = res.ToLower(); } else if (Chars.IsCapitalUpper) { res = Pullenti.Ner.Core.MiscHelper.ConvertFirstCharUpperAndOtherLower(res); } } return(res); } } if (!empty) { return(null); } string te = null; if (num == Pullenti.Morph.MorphNumber.Singular && mc != null) { Pullenti.Morph.MorphBaseInfo bi = new Pullenti.Morph.MorphBaseInfo() { Class = new Pullenti.Morph.MorphClass() { Value = mc.Value }, Gender = gender, Number = Pullenti.Morph.MorphNumber.Singular, Language = Morph.Language }; string vars = Pullenti.Morph.MorphologyService.GetWordform(Term, bi); if (vars != null) { te = vars; } } if (te == null) { te = Term; } if (keepChars) { if (Chars.IsAllLower) { return(te.ToLower()); } else if (Chars.IsCapitalUpper) { return(Pullenti.Ner.Core.MiscHelper.ConvertFirstCharUpperAndOtherLower(te)); } } return(te); }
public override string GetNormalCaseText(Pullenti.Morph.MorphClass mc = null, Pullenti.Morph.MorphNumber num = Pullenti.Morph.MorphNumber.Undefined, Pullenti.Morph.MorphGender gender = Pullenti.Morph.MorphGender.Undefined, bool keepChars = false) { return(base.GetNormalCaseText(Pullenti.Morph.MorphClass.Verb, num, gender, keepChars)); }
public static List <string> GetStdAdjFullStr(string v, Pullenti.Morph.MorphGender gen, Pullenti.Morph.MorphNumber num, bool strict) { List <string> res = new List <string>(); if (v.StartsWith("Б")) { if (num == Pullenti.Morph.MorphNumber.Plural) { res.Add("БОЛЬШИЕ"); return(res); } if (!strict && ((num & Pullenti.Morph.MorphNumber.Plural)) != Pullenti.Morph.MorphNumber.Undefined) { res.Add("БОЛЬШИЕ"); } if (((gen & Pullenti.Morph.MorphGender.Feminie)) != Pullenti.Morph.MorphGender.Undefined) { if (!strict || gen == Pullenti.Morph.MorphGender.Feminie) { res.Add("БОЛЬШАЯ"); } } if (((gen & Pullenti.Morph.MorphGender.Masculine)) != Pullenti.Morph.MorphGender.Undefined) { if (!strict || gen == Pullenti.Morph.MorphGender.Masculine) { res.Add("БОЛЬШОЙ"); } } if (((gen & Pullenti.Morph.MorphGender.Neuter)) != Pullenti.Morph.MorphGender.Undefined) { if (!strict || gen == Pullenti.Morph.MorphGender.Neuter) { res.Add("БОЛЬШОЕ"); } } if (res.Count > 0) { return(res); } return(null); } if (v.StartsWith("М")) { if (num == Pullenti.Morph.MorphNumber.Plural) { res.Add("МАЛЫЕ"); return(res); } if (!strict && ((num & Pullenti.Morph.MorphNumber.Plural)) != Pullenti.Morph.MorphNumber.Undefined) { res.Add("МАЛЫЕ"); } if (((gen & Pullenti.Morph.MorphGender.Feminie)) != Pullenti.Morph.MorphGender.Undefined) { if (!strict || gen == Pullenti.Morph.MorphGender.Feminie) { res.Add("МАЛАЯ"); } } if (((gen & Pullenti.Morph.MorphGender.Masculine)) != Pullenti.Morph.MorphGender.Undefined) { if (!strict || gen == Pullenti.Morph.MorphGender.Masculine) { res.Add("МАЛЫЙ"); } } if (((gen & Pullenti.Morph.MorphGender.Neuter)) != Pullenti.Morph.MorphGender.Undefined) { if (!strict || gen == Pullenti.Morph.MorphGender.Neuter) { res.Add("МАЛОЕ"); } } if (res.Count > 0) { return(res); } return(null); } if (v.StartsWith("В")) { if (num == Pullenti.Morph.MorphNumber.Plural) { res.Add("ВЕРХНИЕ"); return(res); } if (!strict && ((num & Pullenti.Morph.MorphNumber.Plural)) != Pullenti.Morph.MorphNumber.Undefined) { res.Add("ВЕРХНИЕ"); } if (((gen & Pullenti.Morph.MorphGender.Feminie)) != Pullenti.Morph.MorphGender.Undefined) { if (!strict || gen == Pullenti.Morph.MorphGender.Feminie) { res.Add("ВЕРХНЯЯ"); } } if (((gen & Pullenti.Morph.MorphGender.Masculine)) != Pullenti.Morph.MorphGender.Undefined) { if (!strict || gen == Pullenti.Morph.MorphGender.Masculine) { res.Add("ВЕРХНИЙ"); } } if (((gen & Pullenti.Morph.MorphGender.Neuter)) != Pullenti.Morph.MorphGender.Undefined) { if (!strict || gen == Pullenti.Morph.MorphGender.Neuter) { res.Add("ВЕРХНЕЕ"); } } if (res.Count > 0) { return(res); } return(null); } if (v == "Н") { List <string> r1 = GetStdAdjFullStr("НОВ", gen, num, strict); List <string> r2 = GetStdAdjFullStr("НИЖ", gen, num, strict); if (r1 == null && r2 == null) { return(null); } if (r1 == null) { return(r2); } if (r2 == null) { return(r1); } r1.Insert(1, r2[0]); r2.RemoveAt(0); r1.AddRange(r2); return(r1); } if (v == "С" || v == "C") { List <string> r1 = GetStdAdjFullStr("СТ", gen, num, strict); List <string> r2 = GetStdAdjFullStr("СР", gen, num, strict); if (r1 == null && r2 == null) { return(null); } if (r1 == null) { return(r2); } if (r2 == null) { return(r1); } r1.Insert(1, r2[0]); r2.RemoveAt(0); r1.AddRange(r2); return(r1); } if (v.StartsWith("НОВ")) { if (num == Pullenti.Morph.MorphNumber.Plural) { res.Add("НОВЫЕ"); return(res); } if (!strict && ((num & Pullenti.Morph.MorphNumber.Plural)) != Pullenti.Morph.MorphNumber.Undefined) { res.Add("НОВЫЕ"); } if (((gen & Pullenti.Morph.MorphGender.Feminie)) != Pullenti.Morph.MorphGender.Undefined) { if (!strict || gen == Pullenti.Morph.MorphGender.Feminie) { res.Add("НОВАЯ"); } } if (((gen & Pullenti.Morph.MorphGender.Masculine)) != Pullenti.Morph.MorphGender.Undefined) { if (!strict || gen == Pullenti.Morph.MorphGender.Masculine) { res.Add("НОВЫЙ"); } } if (((gen & Pullenti.Morph.MorphGender.Neuter)) != Pullenti.Morph.MorphGender.Undefined) { if (!strict || gen == Pullenti.Morph.MorphGender.Neuter) { res.Add("НОВОЕ"); } } if (res.Count > 0) { return(res); } return(null); } if (v.StartsWith("НИЖ")) { if (num == Pullenti.Morph.MorphNumber.Plural) { res.Add("НИЖНИЕ"); return(res); } if (!strict && ((num & Pullenti.Morph.MorphNumber.Plural)) != Pullenti.Morph.MorphNumber.Undefined) { res.Add("НИЖНИЕ"); } if (((gen & Pullenti.Morph.MorphGender.Feminie)) != Pullenti.Morph.MorphGender.Undefined) { if (!strict || gen == Pullenti.Morph.MorphGender.Feminie) { res.Add("НИЖНЯЯ"); } } if (((gen & Pullenti.Morph.MorphGender.Masculine)) != Pullenti.Morph.MorphGender.Undefined) { if (!strict || gen == Pullenti.Morph.MorphGender.Masculine) { res.Add("НИЖНИЙ"); } } if (((gen & Pullenti.Morph.MorphGender.Neuter)) != Pullenti.Morph.MorphGender.Undefined) { if (!strict || gen == Pullenti.Morph.MorphGender.Neuter) { res.Add("НИЖНЕЕ"); } } if (res.Count > 0) { return(res); } return(null); } if (v.StartsWith("СТ")) { if (num == Pullenti.Morph.MorphNumber.Plural) { res.Add("СТАРЫЕ"); return(res); } if (!strict && ((num & Pullenti.Morph.MorphNumber.Plural)) != Pullenti.Morph.MorphNumber.Undefined) { res.Add("СТАРЫЕ"); } if (((gen & Pullenti.Morph.MorphGender.Feminie)) != Pullenti.Morph.MorphGender.Undefined) { if (!strict || gen == Pullenti.Morph.MorphGender.Feminie) { res.Add("СТАРАЯ"); } } if (((gen & Pullenti.Morph.MorphGender.Masculine)) != Pullenti.Morph.MorphGender.Undefined) { if (!strict || gen == Pullenti.Morph.MorphGender.Masculine) { res.Add("СТАРЫЙ"); } } if (((gen & Pullenti.Morph.MorphGender.Neuter)) != Pullenti.Morph.MorphGender.Undefined) { if (!strict || gen == Pullenti.Morph.MorphGender.Neuter) { res.Add("СТАРОЕ"); } } if (res.Count > 0) { return(res); } return(null); } if (v.StartsWith("СР")) { if (num == Pullenti.Morph.MorphNumber.Plural) { res.Add("СРЕДНИЕ"); return(res); } if (!strict && ((num & Pullenti.Morph.MorphNumber.Plural)) != Pullenti.Morph.MorphNumber.Undefined) { res.Add("СРЕДНИЕ"); } if (((gen & Pullenti.Morph.MorphGender.Feminie)) != Pullenti.Morph.MorphGender.Undefined) { if (!strict || gen == Pullenti.Morph.MorphGender.Feminie) { res.Add("СРЕДНЯЯ"); } } if (((gen & Pullenti.Morph.MorphGender.Masculine)) != Pullenti.Morph.MorphGender.Undefined) { if (!strict || gen == Pullenti.Morph.MorphGender.Masculine) { res.Add("СРЕДНИЙ"); } } if (((gen & Pullenti.Morph.MorphGender.Neuter)) != Pullenti.Morph.MorphGender.Undefined) { if (!strict || gen == Pullenti.Morph.MorphGender.Neuter) { res.Add("СРЕДНЕЕ"); } } if (res.Count > 0) { return(res); } return(null); } return(null); }
public static List <string> GetStdAdjFull(Pullenti.Ner.Token t, Pullenti.Morph.MorphGender gen, Pullenti.Morph.MorphNumber num, bool strict) { if (!(t is Pullenti.Ner.TextToken)) { return(null); } return(GetStdAdjFullStr((t as Pullenti.Ner.TextToken).Term, gen, num, strict)); }