unsafe private void FillWordForms_Core(char *wordPart, ICollection <WordForm_t> result) { if (_EndingDictionary == null) { return; } pair_t[] pairs; var ending = new string( wordPart ); if (_EndingDictionary.TryGetValue(ending, out pairs)) { foreach (var p in pairs) { var partOfSpeech = p.BaseMorphoForm.PartOfSpeech; var _base = p.BaseMorphoForm.Base; foreach (var morphoForm in p.BaseMorphoForm.MorphoForms) { /// получение словоформы var wordForm = _base + morphoForm.Ending; var wf = new WordForm_t(wordForm, partOfSpeech); result.Add(wf); } } } }
public WordForms_t GetWordFormsByPartOfSpeech(string word, PartOfSpeechEnum partOfSpeechFilter) { var result = new WordForms_t(word); var wordUpper = StringsHelper.ToUpperInvariant(word); if (_MorphoModel.GetWordForms(wordUpper, _WordForms)) { FillUniqueWordFormsDictionary(partOfSpeechFilter); #region [.fill word-forms list.] _WordForms.Clear(); foreach (var p in _UniqueWordFormsDictionary) { var form = p.Key; var partOfSpeech = p.Value; var wf = new WordForm_t(form, partOfSpeech); _WordForms.Add(wf); } result.Forms = _WordForms; #endregion } return(result); }
private void FillWordForms_Core(char *wordPart, List <WordForm_t> result) { if (!HasEndings()) { return; } pair[] pairs; if (_Endings.TryGetValue((IntPtr)wordPart, out pairs)) { for (int i = 0, len = pairs.Length; i < len; i++) { var p = pairs[i]; var partOfSpeech = p.BaseMorphoForm.PartOfSpeech; var _base = p.BaseMorphoForm.Base; fixed(char **morphoFormsEnding = p.BaseMorphoForm.MorphoFormEndings) { for (int j = 0, mf_len = p.BaseMorphoForm.MorphoFormEndings.Length; j < mf_len; j++) { /// получение словоформы var wordForm = StringsHelper.CreateWordForm(_base, *(morphoFormsEnding + j)); var wf = new WordForm_t(wordForm, partOfSpeech); result.Add(wf); } } } } }
unsafe private void FillWordForms_Core(char *wordPart, int wordPartLength, int fullWordLength, List <WordForm_t> result) { if (_BaseMorphoForms == null) { return; } foreach (var baseMorphoForm in _BaseMorphoForms) { int baseLength = baseMorphoForm.Base.Length; if ((fullWordLength < baseLength) || (baseLength + baseMorphoForm.MorphoType.MaxEndingLength < fullWordLength) ) { continue; } var morphoForms = baseMorphoForm.MorphoType.MorphoForms; foreach (var morphoForm in morphoForms) { var endingLength = morphoForm.EndingUpper.Length; if (baseLength + endingLength != fullWordLength) { continue; } if (endingLength != wordPartLength) { continue; } if (wordPartLength == 0) { ; } else if (!StringsHelper.IsEqual(morphoForm.EndingUpper, wordPart, wordPartLength)) { continue; } #region commented /* * if ( baseLength == letterIndex ) * { * if ( !StringsHelper.IsEqual( morphoForm.EndingUpper, wordPart ) ) * continue; * } * else * { * var wordForm = baseMorphoForm.Base + morphoForm.EndingUpper; * if ( !StringsHelper.IsEqual( wordForm, letterIndex, wordPart ) ) * continue; * } */ #endregion var partOfSpeech = baseMorphoForm.MorphoType.PartOfSpeech; foreach (var _morphoForm in morphoForms) { /// получение словоформы var wordForm = baseMorphoForm.Base + _morphoForm.Ending; var wf = new WordForm_t(wordForm, partOfSpeech); result.Add(wf); } break; } } }