Ejemplo n.º 1
0
        public WordMorphology_t GetWordMorphology_NoToUpper(string wordUpper, WordFormMorphologyModeEnum wordFormMorphologyMode)
        {
            var wordMorphology = new WordMorphology_t(/*wordUpper*/);

            if (_MorphoModel.GetWordFormMorphologies(wordUpper, _WordFormMorphologies, wordFormMorphologyMode))
            {
                var len = _WordFormMorphologies.Count;
                switch (len)
                {
                case 0: break;

                case 1:
                    wordMorphology.IsSinglePartOfSpeech = true;
                    wordMorphology.PartOfSpeech         = _WordFormMorphologies[0].PartOfSpeech;

                    wordMorphology.WordFormMorphologies = _WordFormMorphologies;
                    break;

                default:
                    for (int i = 0; i < len; i++)
                    {
                        var pos = _WordFormMorphologies[i].PartOfSpeech;
                        if (i == 0)
                        {
                            wordMorphology.IsSinglePartOfSpeech = true;
                        }
                        else
                        {
                            wordMorphology.IsSinglePartOfSpeech &= (wordMorphology.PartOfSpeech == pos);
                        }
                        wordMorphology.PartOfSpeech |= pos;
                    }

                    wordMorphology.WordFormMorphologies = _WordFormMorphologies;
                    break;
                }
            }

            return(wordMorphology);
        }
Ejemplo n.º 2
0
 unsafe public bool GetWordFormMorphologies(char *wordUpper, ICollection <WordFormMorphology_t> result, WordFormMorphologyModeEnum wordFormMorphologyMode)
 {
     result.Clear();
     {
         FillWordFormMorphologies(wordUpper, result, wordFormMorphologyMode);
     }
     return(result.Count != 0);
 }
Ejemplo n.º 3
0
 unsafe public bool GetWordFormMorphologies(char *wordUpper, List <WordFormMorphology_t> result, WordFormMorphologyModeEnum wordFormMorphologyMode)
 {
     return(_TreeDictionary.GetWordFormMorphologies(wordUpper, result, wordFormMorphologyMode));
 }
Ejemplo n.º 4
0
 unsafe public WordMorphology GetWordMorphology_4LastValueUpperInNumeralChain(string wordUpper, WordFormMorphologyModeEnum wordFormMorphologyMode)
 {
     fixed(char *wordUpper_ptr = wordUpper)
     {
         return(GetWordMorphology_4LastValueUpperInNumeralChain(wordUpper_ptr, wordFormMorphologyMode));
     }
 }
Ejemplo n.º 5
0
        public WordMorphology GetWordMorphology(string word, WordFormMorphologyModeEnum wordFormMorphologyMode)
        {
            var wordUpper = StringsHelper.ToUpperInvariant(word);

            return(GetWordMorphology_NoToUpper(wordUpper, wordFormMorphologyMode));
        }
Ejemplo n.º 6
0
        unsafe private WordMorphology GetWordMorphology_4LastValueUpperInNumeralChain(char *wordUpper, WordFormMorphologyModeEnum wordFormMorphologyMode)
        {
            var wordMorphology = new WordMorphology();

            if (_morphoModel.GetWordFormMorphologies(wordUpper, _wordFormMorphologies, wordFormMorphologyMode))
            {
                var len = _wordFormMorphologies.Count;
                switch (len)
                {
                case 0: break;

                case 1:
                    wordMorphology.IsSinglePartOfSpeech = true;
                    wordMorphology.PartOfSpeech         = _wordFormMorphologies[0].PartOfSpeech;
                    wordMorphology.WordFormMorphologies = _wordFormMorphologies;
                    break;

                default:
                    for (int i = 0; i < len; i++)
                    {
                        var pos = _wordFormMorphologies[i].PartOfSpeech;
                        if (i == 0)
                        {
                            wordMorphology.IsSinglePartOfSpeech = true;
                        }
                        else
                        {
                            wordMorphology.IsSinglePartOfSpeech &= (wordMorphology.PartOfSpeech == pos);
                        }
                        wordMorphology.PartOfSpeech |= pos;
                    }

                    wordMorphology.WordFormMorphologies = _wordFormMorphologies;
                    break;
                }
            }

            return(wordMorphology);
        }
Ejemplo n.º 7
0
 public bool GetWordFormMorphologies(string wordUpper, List <WordFormMorphology> result, WordFormMorphologyModeEnum wordFormMorphologyMode)
 {
     return(_TreeDictionary.GetWordFormMorphologies(wordUpper, result, wordFormMorphologyMode));
 }
Ejemplo n.º 8
0
        /// получение морфологических свойств слова
        /// wordUpper - слово
        /// result - коллекция информаций о формах слова
        public bool GetWordFormMorphologies(string wordUpper, List <WordFormMorphology_t> result, WordFormMorphologyModeEnum wordFormMorphologyMode)
        {
            result.Clear();
            fixed(char *wordUpper_ptr = wordUpper)
            {
                switch (wordFormMorphologyMode)
                {
                case WordFormMorphologyModeEnum.Default:
                    FillWordFormMorphologies(wordUpper_ptr, result);
                    break;

                case WordFormMorphologyModeEnum.FirstStartsWithUpperAfterLowerLetter:
                {
                    //---FillWordFormMorphologies_FirstStartsWithUpperAfterLowerLetter( wordUpper_ptr, result );

                    FillWordFormMorphologies_StartsWithUpperLetter(wordUpper_ptr, result);
                    if (result.Count == 0)
                    {
                        FillWordFormMorphologies_StartsWithLowerLetter(wordUpper_ptr, result);
                    }
                }
                break;

                case WordFormMorphologyModeEnum.FirstStartsWithLowerAfterUpperLetter:
                {
                    //---FillWordFormMorphologies_FirstStartsWithLowerAfterUpperLetter( wordUpper_ptr, result );

                    FillWordFormMorphologies_StartsWithLowerLetter(wordUpper_ptr, result);
                    if (result.Count == 0)
                    {
                        FillWordFormMorphologies_StartsWithUpperLetter(wordUpper_ptr, result);
                    }
                }
                break;

                case WordFormMorphologyModeEnum.StartsWithLowerLetter:
                    FillWordFormMorphologies_StartsWithLowerLetter(wordUpper_ptr, result);
                    break;

                case WordFormMorphologyModeEnum.StartsWithUpperLetter:
                    FillWordFormMorphologies_StartsWithUpperLetter(wordUpper_ptr, result);
                    break;
                }
            }

            return(result.Count != 0);
        }
Ejemplo n.º 9
0
        public bool GetWordFormMorphologies(char *wordUpper, List <WordFormMorphology> result, WordFormMorphologyModeEnum wordFormMorphologyMode)
        {
            result.Clear();
            {
                switch (wordFormMorphologyMode)
                {
                case WordFormMorphologyModeEnum.Default:
                    FillWordFormMorphologies(wordUpper, result);
                    break;

                case WordFormMorphologyModeEnum.FirstStartsWithUpperAfterLowerLetter:
                    FillWordFormMorphologies_FirstStartsWithUpperAfterLowerLetter(wordUpper, result);
                    break;

                case WordFormMorphologyModeEnum.FirstStartsWithLowerAfterUpperLetter:
                    FillWordFormMorphologies_FirstStartsWithLowerAfterUpperLetter(wordUpper, result);
                    break;

                case WordFormMorphologyModeEnum.StartsWithLowerLetter:
                    FillWordFormMorphologies_StartsWithLowerLetter(wordUpper, result);
                    break;

                case WordFormMorphologyModeEnum.StartsWithUpperLetter:
                    FillWordFormMorphologies_StartsWithUpperLetter(wordUpper, result);
                    break;
                }
            }
            return(result.Count != 0);
        }
Ejemplo n.º 10
0
 unsafe public bool GetWordFormMorphologies(char *wordUpper, List <WordFormMorphology> result, WordFormMorphologyModeEnum wordFormMorphologyMode)
 {
     result.Clear();
     {
         var fullWordLength = StringsHelper.GetLength(wordUpper);
         FillWordFormMorphologies(wordUpper, fullWordLength, fullWordLength, result, wordFormMorphologyMode);
     }
     return(result.Count != 0);
 }
Ejemplo n.º 11
0
        /// получение морфологических свойств слова
        /// word - слово
        /// result - коллекция информаций о формах слова
        unsafe public bool GetWordFormMorphologies(string wordUpper, List <WordFormMorphology> result, WordFormMorphologyModeEnum wordFormMorphologyMode)
        {
            result.Clear();
            fixed(char *word_ptr = wordUpper)
            {
                var fullWordLength = wordUpper.Length;

                FillWordFormMorphologies(word_ptr, fullWordLength, fullWordLength, result, wordFormMorphologyMode);
            }

            return(result.Count != 0);
        }
Ejemplo n.º 12
0
        /// поиск слова в слоте
        /// wordPart - оставшаяся часть слова
        /// pSlot - слот
        /// letterIndex - индекс буквы
        unsafe private void FillWordFormMorphologies_Core(char *wordPart, int wordPartLength, int fullWordLength,
                                                          List <WordFormMorphology> result, WordFormMorphologyModeEnum wordFormMorphologyMode)
        {
            if (_BaseMorphoForms == null)
            {
                return;
            }

            foreach (var baseMorphoForm in _BaseMorphoForms)
            {
                int baseLength = baseMorphoForm.Base.Length;
                if ((fullWordLength < baseLength) ||
                    (baseLength + baseMorphoForm.MorphoType.MaxEndingLength < fullWordLength)
                    )
                {
                    continue;
                }

                foreach (var morphoForm in baseMorphoForm.MorphoType.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;
                    }

                    switch (wordFormMorphologyMode)
                    {
                    case WordFormMorphologyModeEnum.Default:
                    {
                        var wfmi = new WordFormMorphology(baseMorphoForm, MorphoAttributePair.GetMorphoAttribute(baseMorphoForm, morphoForm));
                        result.Add(wfmi);
                    }
                    break;

                    case WordFormMorphologyModeEnum.StartsWithLowerLetter:
                    {
                        fixed(char *normalForm_ptr = baseMorphoForm.NormalForm)
                        {
                            var first_char = *normalForm_ptr;

                            if ((first_char != '\0') && *(XlatUnsafe.Inst._UPPER_INVARIANT_MAP + first_char) == first_char)
                            {
                                continue;
                            }
                        }

                        var wfmi = new WordFormMorphology(baseMorphoForm, MorphoAttributePair.GetMorphoAttribute(baseMorphoForm, morphoForm));
                        result.Add(wfmi);
                    }
                    break;

                    case WordFormMorphologyModeEnum.StartsWithUpperLetter:
                    {
                        fixed(char *normalForm_ptr = baseMorphoForm.NormalForm)
                        {
                            var first_char = *normalForm_ptr;

                            if ((first_char != '\0') && *(XlatUnsafe.Inst._UPPER_INVARIANT_MAP + first_char) != first_char)
                            {
                                continue;
                            }
                        }

                        var wfmi = new WordFormMorphology(baseMorphoForm, MorphoAttributePair.GetMorphoAttribute(baseMorphoForm, morphoForm));
                        result.Add(wfmi);
                    }
                    break;

                    case WordFormMorphologyModeEnum.FirstStartsWithUpperAfterLowerLetter:
                    case WordFormMorphologyModeEnum.FirstStartsWithLowerAfterUpperLetter:
                    {
                        throw new NotImplementedException();
                    }
                    }
                }
            }
        }
Ejemplo n.º 13
0
        /// поиск слова в словаре
        /// word - слово
        /// letterIndex - индекс буквы
        /// result - коллекция форм слова
        ///
        unsafe private void FillWordFormMorphologies(char *word, int wordLength, int fullWordLength
                                                     , List <WordFormMorphology> result, WordFormMorphologyModeEnum wordFormMorphologyMode)
        {
            FillWordFormMorphologies_Core(word, wordLength, fullWordLength, result, wordFormMorphologyMode);
            var first_char = *word;

            if (first_char != '\0')
            {
                if (_Slots.TryGetValue(first_char, out TreeDictionaryClassic value))
                {
                    value.FillWordFormMorphologies(word + 1, wordLength - 1, fullWordLength, result, wordFormMorphologyMode);
                }
            }
        }
Ejemplo n.º 14
0
        /// поиск слова в словаре
        /// word - слово
        /// letterIndex - индекс буквы
        /// result - коллекция форм слова
        unsafe private void FillWordFormMorphologies(char *word, List <WordFormMorphology_t> result, WordFormMorphologyModeEnum wordFormMorphologyMode)
        {
            FillWordFormMorphologies_Core(word, result, wordFormMorphologyMode);
            var first_char = *word;

            if (first_char != '\0')
            {
                TreeDictionaryFastMemPlenty value;
                if (_Slots.TryGetValue(first_char, out value))
                {
                    value.FillWordFormMorphologies(word + 1, result, wordFormMorphologyMode);
                }
            }
        }
Ejemplo n.º 15
0
        /// поиск слова в словаре
        /// word - слово
        /// letterIndex - индекс буквы
        /// result - коллекция форм слова
        unsafe private void FillWordFormMorphologies(char *word, ICollection <WordFormMorphology_t> result, WordFormMorphologyModeEnum wordFormMorphologyMode)
        {
            FillWordFormMorphologies_Core(word, result, wordFormMorphologyMode);
            var first_char = *word;

            if (first_char != '\0')
            {
                if (_Slots.TryGetValue(first_char, out var value))
                {
                    value.FillWordFormMorphologies(word + 1, result, wordFormMorphologyMode);
                }
            }
        }
Ejemplo n.º 16
0
        /// поиск слова в слоте
        /// wordPart - оставшаяся часть слова
        /// pSlot - слот
        /// letterIndex - индекс буквы
        unsafe private void FillWordFormMorphologies_Core(char *wordPart, ICollection <WordFormMorphology_t> result, WordFormMorphologyModeEnum wordFormMorphologyMode)
        {
            if (_EndingDictionary == null)
            {
                return;
            }

            var ending = new string( wordPart );

            if (_EndingDictionary.TryGetValue(ending, out var pairs))
            {
                switch (wordFormMorphologyMode)
                {
                case WordFormMorphologyModeEnum.Default:
                    #region
                    foreach (var p in pairs)
                    {
                        var wfmi = new WordFormMorphology_t(p.BaseMorphoForm, p.MorphoAttribute);
                        result.Add(wfmi);
                    }
                    #endregion
                    break;

                case WordFormMorphologyModeEnum.StartsWithLowerLetter:
                    #region
                    foreach (var p in pairs)
                    {
                        var baseMorphoForm = p.BaseMorphoForm;
                        fixed(char *normalForm_ptr = baseMorphoForm.NormalForm)
                        {
                            var first_char = *normalForm_ptr;

                            if ((first_char != '\0') && *(xlat_Unsafe.Inst._UPPER_INVARIANT_MAP + first_char) == first_char)
                            {
                                continue;
                            }
                        }

                        var wfmi = new WordFormMorphology_t(baseMorphoForm, p.MorphoAttribute);
                        result.Add(wfmi);
                    }
                    #endregion
                    break;

                case WordFormMorphologyModeEnum.StartsWithUpperLetter:
                    #region
                    foreach (var p in pairs)
                    {
                        var baseMorphoForm = p.BaseMorphoForm;
                        fixed(char *normalForm_ptr = baseMorphoForm.NormalForm)
                        {
                            var first_char = *normalForm_ptr;

                            if ((first_char != '\0') && *(xlat_Unsafe.Inst._UPPER_INVARIANT_MAP + first_char) != first_char)
                            {
                                continue;
                            }
                        }

                        var wfmi = new WordFormMorphology_t(baseMorphoForm, p.MorphoAttribute);
                        result.Add(wfmi);
                    }
                    #endregion
                    break;

                case WordFormMorphologyModeEnum.FirstStartsWithUpperAfterLowerLetter:
                    #region
                    throw new NotImplementedException();

                    /*
                     * var findWithUpper = false;
                     * foreach ( var p in pairs )
                     * {
                     *  var baseMorphoForm = p.BaseMorphoForm;
                     *  fixed ( char* normalForm_ptr = baseMorphoForm.NormalForm )
                     *  {
                     *      var first_char = *normalForm_ptr;
                     *      if ( (first_char != '\0') && *(xlat_Unsafe.Inst._UPPER_INVARIANT_MAP + first_char) != first_char )
                     *      {
                     *          continue;
                     *      }
                     *  }
                     *
                     *  findWithUpper = true;
                     *  var wfmi = new WordFormMorphology_t( baseMorphoForm, p.MorphoAttribute );
                     *  result.Add( wfmi );
                     * }
                     * if ( !findWithUpper )
                     * {
                     *  goto case WordFormMorphologyModeEnum.Default;
                     * }
                     */
                    #endregion
                    break;

                case WordFormMorphologyModeEnum.FirstStartsWithLowerAfterUpperLetter:
                    #region
                    throw new NotImplementedException();

                    /*
                     * var findWithLower = false;
                     * foreach ( var p in pairs )
                     * {
                     *  var baseMorphoForm = p.BaseMorphoForm;
                     *  fixed ( char* normalForm_ptr = baseMorphoForm.NormalForm )
                     *  {
                     *      var first_char = *normalForm_ptr;
                     *      if ( (first_char != '\0') && *(xlat_Unsafe.Inst._UPPER_INVARIANT_MAP + first_char) == first_char )
                     *      {
                     *          continue;
                     *      }
                     *  }
                     *
                     *  findWithLower = true;
                     *  var wfmi = new WordFormMorphology_t( baseMorphoForm, p.MorphoAttribute );
                     *  result.Add( wfmi );
                     * }
                     * if ( !findWithLower )
                     * {
                     *  goto case WordFormMorphologyModeEnum.Default;
                     * }
                     */
                    #endregion
                    break;
                }
            }
        }
Ejemplo n.º 17
0
 public WordMorphology_t GetWordMorphology(string word, WordFormMorphologyModeEnum wordFormMorphologyMode) => GetWordMorphology_NoToUpper(StringsHelper.ToUpperInvariant(word), wordFormMorphologyMode);