Пример #1
0
        private void Case_1__2(WordMorphoAmbiguity_t wma_0, WordMorphoAmbiguity_t wma_1)
        {
            var len_0 = wma_0.MorphoAmbiguityTuples.Count;
            var len_1 = wma_1.MorphoAmbiguityTuples.Count;

            if (len_0 == 1)
            {
                #region [.1 == mats_0 & 1 < mats_1.]
                if (1 < len_1)
                {
                    var ma_case_0 = (wma_0.MorphoAmbiguityTuples[0].WordFormMorphology.MorphoAttribute & MorphoAttributeAllCases);
                    if (!IsCaseAnycase(ma_case_0))
                    {
                        for (var j = 0; j < len_1; j++)
                        {
                            var mat_1 = wma_1.MorphoAmbiguityTuples[j];
                            var ma_1  = mat_1.WordFormMorphology.MorphoAttribute;
                            if (ma_case_0 == (ma_1 & MorphoAttributeAllCases))
                            {
                                _Mats_1.Add(mat_1);
                            }
                        }

                        if (_Mats_1.Count != 0)
                        {
                            var wasModify = (_Mats_1.Count < len_1);
                            if (wasModify)
                            {
                                wma_1.MorphoAmbiguityTuples.Clear();
                                wma_1.MorphoAmbiguityTuples.AddRange(_Mats_1);
                            }
                            _Mats_1.Clear();
                        }
                    }
                }
                #endregion
            }
            else if (len_1 == 1)
            {
                #region [.1 < mats_0 & 1 == mats_1.]
                var ma_case_1 = (wma_1.MorphoAmbiguityTuples[0].WordFormMorphology.MorphoAttribute & MorphoAttributeAllCases);
                if (!IsCaseAnycase(ma_case_1))
                {
                    for (var i = 0; i < len_0; i++)
                    {
                        var mat_0 = wma_0.MorphoAmbiguityTuples[i];
                        var ma_0  = mat_0.WordFormMorphology.MorphoAttribute;
                        if (ma_case_1 == (ma_0 & MorphoAttributeAllCases))
                        {
                            _Mats_0.Add(mat_0);
                        }
                    }

                    if (_Mats_0.Count != 0)
                    {
                        var wasModify = (_Mats_0.Count < len_0);
                        if (wasModify)
                        {
                            wma_0.MorphoAmbiguityTuples.Clear();
                            wma_0.MorphoAmbiguityTuples.AddRange(_Mats_0);
                        }
                        _Mats_0.Clear();
                    }
                }
                #endregion
            }
            else
            {
                #region [.1 < mats_0 & 1 < mats_1.]
                for (var i = 0; i < len_0; i++)
                {
                    var mat_0     = wma_0.MorphoAmbiguityTuples[i];
                    var ma_case_0 = (mat_0.WordFormMorphology.MorphoAttribute & MorphoAttributeAllCases);
                    if (!IsCaseAnycase(ma_case_0))
                    {
                        for (var j = 0; j < len_1; j++)
                        {
                            var mat_1 = wma_1.MorphoAmbiguityTuples[j];
                            var ma_1  = mat_1.WordFormMorphology.MorphoAttribute;
                            if (ma_case_0 == (ma_1 & MorphoAttributeAllCases))
                            {
                                _Mats_0.AddIfNotExists(mat_0);
                                _Mats_1.AddIfNotExists(mat_1);
                            }
                        }
                    }
                }

                if (_Mats_0.Count != 0 /*&& _Mats_1.Count != 0*/)
                {
                    var wasModify = ((_Mats_0.Count < len_0) || (_Mats_1.Count < len_1));
                    if (wasModify)
                    {
                        wma_0.MorphoAmbiguityTuples.Clear();
                        wma_0.MorphoAmbiguityTuples.AddRange(_Mats_0);

                        wma_1.MorphoAmbiguityTuples.Clear();
                        wma_1.MorphoAmbiguityTuples.AddRange(_Mats_1);
                    }
                    _Mats_0.Clear();
                    _Mats_1.Clear();
                }
                #endregion
            }
        }
Пример #2
0
        private bool Case_1__1_stepII_2(WordMorphoAmbiguity_t wma_2)
        {
            System.Diagnostics.Debug.Assert(_Mats_0.Count == _Mats_1.Count, "_Mats_0.Count != _Mats_1.Count");

            var len_0 = _Mats_0.Count /*|| _Mats_1.Count*/;
            var len_2 = wma_2.MorphoAmbiguityTuples.Count;

            if (len_0 == 1)
            {
                #region [.1 == _Mats_0 & 1 < wma.MorphoAmbiguityTuples.]
                if (1 < len_2)
                {
                    var ma_case_0 = (_Mats_0[0].WordFormMorphology.MorphoAttribute & MorphoAttributeAllCases);
                    if (!IsCaseAnycase(ma_case_0))
                    {
                        for (var j = 0; j < len_2; j++)
                        {
                            var mat_2 = wma_2.MorphoAmbiguityTuples[j];
                            var ma_2  = mat_2.WordFormMorphology.MorphoAttribute;
                            if (ma_case_0 == (ma_2 & MorphoAttributeAllCases))
                            {
                                _Mats_2_stepII.Add(mat_2);
                            }
                        }

                        if (_Mats_2_stepII.Count != 0)
                        {
                            var wasModify = (_Mats_2_stepII.Count < len_2);
                            if (wasModify)
                            {
                                wma_2.MorphoAmbiguityTuples.Clear();
                                wma_2.MorphoAmbiguityTuples.AddRange(_Mats_2_stepII);
                            }
                            _Mats_2_stepII.Clear();

                            return(wasModify);
                        }
                    }
                }
                #endregion
            }
            else if (len_2 == 1)
            {
                #region [.1 < _Mats_0 & 1 == wma.MorphoAmbiguityTuples.]
                var ma_case_2 = (wma_2.MorphoAmbiguityTuples[0].WordFormMorphology.MorphoAttribute & MorphoAttributeAllCases);
                if (!IsCaseAnycase(ma_case_2))
                {
                    for (var i = 0; i < len_0; i++)
                    {
                        var mat_0 = _Mats_0[i];
                        var ma_0  = mat_0.WordFormMorphology.MorphoAttribute;
                        if (ma_case_2 == (ma_0 & MorphoAttributeAllCases))
                        {
                            _Mats_0_stepII.Add(mat_0);
                            var mat_1 = _Mats_1[i];
                            _Mats_1_stepII.Add(mat_1);
                        }
                    }

                    if (_Mats_0_stepII.Count != 0)
                    {
                        var wasModify = (_Mats_0_stepII.Count < len_0);
                        if (wasModify)
                        {
                            _Mats_0.Clear();
                            _Mats_0.AddRange(_Mats_0_stepII);

                            _Mats_1.Clear();
                            _Mats_1.AddRange(_Mats_1_stepII);
                        }
                        _Mats_0_stepII.Clear();
                        _Mats_1_stepII.Clear();

                        return(wasModify);
                    }
                }
                #endregion
            }
            else
            {
                #region [.1 < _Mats_0 & 1 < wma.MorphoAmbiguityTuples.]
                for (var i = 0; i < len_0; i++)
                {
                    var mat_0     = _Mats_0[i];
                    var ma_case_0 = (mat_0.WordFormMorphology.MorphoAttribute & MorphoAttributeAllCases);
                    if (!IsCaseAnycase(ma_case_0))
                    {
                        for (var j = 0; j < len_2; j++)
                        {
                            var mat_2 = wma_2.MorphoAmbiguityTuples[j];
                            var ma_2  = mat_2.WordFormMorphology.MorphoAttribute;
                            if (ma_case_0 == (ma_2 & MorphoAttributeAllCases))
                            {
                                _Mats_0_stepII.Add(mat_0);
                                var mat_1 = _Mats_1[i];
                                _Mats_1_stepII.Add(mat_1);
                                _Mats_2_stepII.Add(mat_2);
                            }
                        }
                    }
                }

                if (_Mats_0_stepII.Count != 0 /*&& _Mats_2_stepII.Count != 0*/)
                {
                    var wasModify = ((_Mats_0_stepII.Count < len_0) || (_Mats_2_stepII.Count < len_2));
                    if (wasModify)
                    {
                        _Mats_0.Clear();
                        _Mats_0.AddRange(_Mats_0_stepII);

                        _Mats_1.Clear();
                        _Mats_1.AddRange(_Mats_1_stepII);

                        wma_2.MorphoAmbiguityTuples.Clear();
                        wma_2.MorphoAmbiguityTuples.AddRange(_Mats_2_stepII);
                    }
                    _Mats_0_stepII.Clear();
                    _Mats_1_stepII.Clear();
                    _Mats_2_stepII.Clear();

                    return(wasModify);
                }
                #endregion
            }

            return(false);
        }
Пример #3
0
        private void Run(WordMorphoAmbiguity_t wma_0, WordMorphoAmbiguity_t wma_1)
        {
            switch (wma_0.Word.posTaggerOutputType)
            {
                #region [.Case_1__2.]
            //Preposition: {+ Noun, + Pronoun, + Numeral, + PossessivePronoun, + Adjective, + AdjectivePronoun}
            case PosTaggerOutputType.Preposition:
                #region
                switch (wma_1.Word.posTaggerOutputType)
                {
                case PosTaggerOutputType.Noun:
                case PosTaggerOutputType.Pronoun:
                case PosTaggerOutputType.Numeral:
                case PosTaggerOutputType.PossessivePronoun:
                case PosTaggerOutputType.Adjective:
                case PosTaggerOutputType.AdjectivePronoun:
                    Case_1__2(wma_0, wma_1);
                    break;
                }
                #endregion
                break;
                #endregion

                #region [.Case_2.]
            //PossessivePronoun + Noun
            case PosTaggerOutputType.PossessivePronoun:
                #region
                if (wma_1.Word.posTaggerOutputType == PosTaggerOutputType.Pronoun)
                {
                    Case_2(wma_0, wma_1);
                }
                #endregion
                break;

            //Adjective: {+ Noun, + Adjective}
            case PosTaggerOutputType.Adjective:
                #region
                switch (wma_1.Word.posTaggerOutputType)
                {
                case PosTaggerOutputType.Noun:
                case PosTaggerOutputType.Adjective:
                    Case_2(wma_0, wma_1);
                    break;
                }
                #endregion
                break;

            //AdjectivePronoun: {+ Noun, + Pronoun, + AdjectivePronoun, + Adjective}
            case PosTaggerOutputType.AdjectivePronoun:
                #region
                switch (wma_1.Word.posTaggerOutputType)
                {
                case PosTaggerOutputType.Noun:
                case PosTaggerOutputType.Pronoun:
                case PosTaggerOutputType.AdjectivePronoun:
                case PosTaggerOutputType.Adjective:
                    Case_2(wma_0, wma_1);
                    break;
                }
                #endregion
                break;

            //Numeral + Noun
            case PosTaggerOutputType.Numeral:
                #region
                if (wma_1.Word.posTaggerOutputType == PosTaggerOutputType.Noun)
                {
                    Case_2(wma_0, wma_1);
                }
                #endregion
                break;
                #endregion
            }
        }
Пример #4
0
        private bool Case_1__1_stepII_1(List <MorphoAmbiguityTuple_t> mats, WordMorphoAmbiguity_t wma_2)
        {
            var len_0 = mats.Count;
            var len_2 = wma_2.MorphoAmbiguityTuples.Count;

            if (len_0 == 1)
            {
                #region [.1 == mats & 1 < wma.MorphoAmbiguityTuples.]
                if (1 < len_2)
                {
                    var ma_case_0 = (mats[0].WordFormMorphology.MorphoAttribute & MorphoAttributeAllCases);
                    if (!IsCaseAnycase(ma_case_0))
                    {
                        for (var j = 0; j < len_2; j++)
                        {
                            var mat_2 = wma_2.MorphoAmbiguityTuples[j];
                            var ma_2  = mat_2.WordFormMorphology.MorphoAttribute;
                            if (ma_case_0 == (ma_2 & MorphoAttributeAllCases))
                            {
                                _Mats_2_stepII.Add(mat_2);
                            }
                        }

                        if (_Mats_2_stepII.Count != 0)
                        {
                            var wasModify = (_Mats_2_stepII.Count < len_2);
                            if (wasModify)
                            {
                                wma_2.MorphoAmbiguityTuples.Clear();
                                wma_2.MorphoAmbiguityTuples.AddRange(_Mats_2_stepII);
                            }
                            _Mats_2_stepII.Clear();

                            return(wasModify);
                        }
                    }
                }
                #endregion
            }
            else if (len_2 == 1)
            {
                #region [.1 < mats & 1 == wma.MorphoAmbiguityTuples.]
                var ma_case_2 = (wma_2.MorphoAmbiguityTuples[0].WordFormMorphology.MorphoAttribute & MorphoAttributeAllCases);
                if (!IsCaseAnycase(ma_case_2))
                {
                    for (var i = 0; i < len_0; i++)
                    {
                        var mat_0 = mats[i];
                        var ma_0  = mat_0.WordFormMorphology.MorphoAttribute;
                        if (ma_case_2 == (ma_0 & MorphoAttributeAllCases))
                        {
                            _Mats_0_stepII.Add(mat_0);
                        }
                    }

                    if (_Mats_0_stepII.Count != 0)
                    {
                        var wasModify = (_Mats_0_stepII.Count < len_0);
                        if (wasModify)
                        {
                            mats.Clear();
                            mats.AddRange(_Mats_0_stepII);
                        }
                        _Mats_0_stepII.Clear();

                        return(wasModify);
                    }
                }
                #endregion
            }
            else
            {
                #region [.1 < mats & 1 < wma.MorphoAmbiguityTuples.]
                for (var i = 0; i < len_0; i++)
                {
                    var mat_0     = mats[i];
                    var ma_case_0 = (mat_0.WordFormMorphology.MorphoAttribute & MorphoAttributeAllCases);
                    if (!IsCaseAnycase(ma_case_0))
                    {
                        for (var j = 0; j < len_2; j++)
                        {
                            var mat_2 = wma_2.MorphoAmbiguityTuples[j];
                            var ma_2  = mat_2.WordFormMorphology.MorphoAttribute;
                            if (ma_case_0 == (ma_2 & MorphoAttributeAllCases))
                            {
                                _Mats_0_stepII.Add(mat_0);
                                _Mats_2_stepII.Add(mat_2);
                            }
                        }
                    }
                }

                if (_Mats_0_stepII.Count != 0 /*&& _Mats_1__2.Count != 0*/)
                {
                    var wasModify = ((_Mats_0_stepII.Count < len_0) || (_Mats_2_stepII.Count < len_2));
                    if (wasModify)
                    {
                        mats.Clear();
                        mats.AddRange(_Mats_0_stepII);

                        wma_2.MorphoAmbiguityTuples.Clear();
                        wma_2.MorphoAmbiguityTuples.AddRange(_Mats_2_stepII);
                    }
                    _Mats_0_stepII.Clear();
                    _Mats_2_stepII.Clear();

                    return(wasModify);
                }
                #endregion
            }

            return(false);
        }
Пример #5
0
        private bool Case_2(WordMorphoAmbiguity_t wma_0, WordMorphoAmbiguity_t wma_1)
        {
            var len_0 = wma_0.MorphoAmbiguityTuples.Count;
            var len_1 = wma_1.MorphoAmbiguityTuples.Count;

            if (len_0 == 1)
            {
                #region [.1 == mats_0 & 1 < mats_1.]
                if (1 < len_1)
                {
                    var ma_0      = wma_0.MorphoAmbiguityTuples[0].WordFormMorphology.MorphoAttribute;
                    var ma_case_0 = (ma_0 & MorphoAttributeAllCases);
                    if (!IsCaseAnycase(ma_case_0))
                    {
                        for (var j = 0; j < len_1; j++)
                        {
                            var mat_1 = wma_1.MorphoAmbiguityTuples[j];
                            if (ma_case_0 == (mat_1.WordFormMorphology.MorphoAttribute & MorphoAttributeAllCases))
                            {
                                _Mats_1.Add(mat_1);
                            }
                        }

                        if (_Mats_1.Count != 0)
                        {
                            if (Case_2_TryFilterByMask(MorphoAttributeAllNumber, ma_0, _Mats_1))
                            {
                                if (!IsGenderGeneral(ma_0))
                                {
                                    Case_2_TryFilterByMask(MorphoAttributeAllGender, ma_0, _Mats_1);
                                }
                            }

                            var wasModify = (_Mats_1.Count < wma_1.MorphoAmbiguityTuples.Count);
                            if (wasModify)
                            {
                                wma_1.MorphoAmbiguityTuples.Clear();
                                wma_1.MorphoAmbiguityTuples.AddRange(_Mats_1);
                            }
                            _Mats_1.Clear();
                            return(wasModify);
                        }
                    }
                }
                #endregion
            }
            else if (len_1 == 1)
            {
                #region [.1 < mats_0 & 1 == mats_1.]
                var ma_1      = wma_1.MorphoAmbiguityTuples[0].WordFormMorphology.MorphoAttribute;
                var ma_case_1 = (ma_1 & MorphoAttributeAllCases);
                if (!IsCaseAnycase(ma_case_1))
                {
                    for (var i = 0; i < len_0; i++)
                    {
                        var mat_0 = wma_0.MorphoAmbiguityTuples[i];
                        if (ma_case_1 == (mat_0.WordFormMorphology.MorphoAttribute & MorphoAttributeAllCases))
                        {
                            _Mats_0.Add(mat_0);
                        }
                    }

                    if (_Mats_0.Count != 0)
                    {
                        if (Case_2_TryFilterByMask(MorphoAttributeAllNumber, ma_1, _Mats_0))
                        {
                            if (!IsGenderGeneral(ma_1))
                            {
                                Case_2_TryFilterByMask(MorphoAttributeAllGender, ma_1, _Mats_0);
                            }
                        }

                        var wasModify = (_Mats_0.Count < wma_0.MorphoAmbiguityTuples.Count);
                        if (wasModify)
                        {
                            wma_0.MorphoAmbiguityTuples.Clear();
                            wma_0.MorphoAmbiguityTuples.AddRange(_Mats_0);
                        }
                        _Mats_0.Clear();
                        return(wasModify);
                    }
                }
                #endregion
            }
            else
            {
                #region [.1 < mats_0 & 1 < mats_1.]
                for (var i = 0; i < len_0; i++)
                {
                    var mat_0     = wma_0.MorphoAmbiguityTuples[i];
                    var ma_0      = mat_0.WordFormMorphology.MorphoAttribute;
                    var ma_case_0 = (ma_0 & MorphoAttributeAllCases);
                    if (!IsCaseAnycase(ma_case_0))
                    {
                        for (var j = 0; j < len_1; j++)
                        {
                            var mat_1 = wma_1.MorphoAmbiguityTuples[j];
                            if (ma_case_0 == (mat_1.WordFormMorphology.MorphoAttribute & MorphoAttributeAllCases))
                            {
                                _Mats_0.AddIfNotExists(mat_0);
                                _Mats_1.AddIfNotExists(mat_1);
                            }
                        }
                    }
                }

                if (_Mats_0.Count != 0 /*&& _Mats_1.Count != 0*/)
                {
                    if (Case_2_TryFilterByNumber(_Mats_0, _Mats_1))
                    {
                        Case_2_TryFilterByGender(_Mats_0, _Mats_1);
                    }

                    var wasModify = ((_Mats_0.Count < wma_0.MorphoAmbiguityTuples.Count) ||
                                     (_Mats_1.Count < wma_1.MorphoAmbiguityTuples.Count)
                                     );
                    if (wasModify)
                    {
                        wma_0.MorphoAmbiguityTuples.Clear();
                        wma_0.MorphoAmbiguityTuples.AddRange(_Mats_0);

                        wma_1.MorphoAmbiguityTuples.Clear();
                        wma_1.MorphoAmbiguityTuples.AddRange(_Mats_1);
                    }
                    _Mats_1.Clear();
                    _Mats_0.Clear();
                    return(wasModify);
                }
                #endregion
            }

            return(false);
        }