Exemplo n.º 1
0
        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);
                    }
                }
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
                        }
                    }
                }
            }
        }
Exemplo n.º 4
0
        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;
                }
            }
        }