Esempio n. 1
0
        private void Run(WordMorphoAmbiguity wma_0, WordMorphoAmbiguity wma_1)
        {
            switch (wma_0.word.posTaggerOutputType)
            {
            //Preposition: {+ Noun, + Pronoun, + Numeral, + PossessivePronoun, + Adjective, + AdjectivePronoun}
            case PosTaggerOutputType.Preposition:
                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;
                }
                break;

            //PossessivePronoun + Noun
            case PosTaggerOutputType.PossessivePronoun:
                if (wma_1.word.posTaggerOutputType == PosTaggerOutputType.Pronoun)
                {
                    Case_2(wma_0, wma_1);
                }
                break;

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

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

            //Numeral + Noun
            case PosTaggerOutputType.Numeral:
                if (wma_1.word.posTaggerOutputType == PosTaggerOutputType.Noun)
                {
                    Case_2(wma_0, wma_1);
                }
                break;
            }
        }
Esempio n. 2
0
        private bool Case_2(WordMorphoAmbiguity wma_0, WordMorphoAmbiguity wma_1)
        {
            var len_0 = wma_0.morphoAmbiguityTuples.Count;
            var len_1 = wma_1.morphoAmbiguityTuples.Count;

            if (len_0 == 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);
                        }
                    }
                }
            }
            else if (len_1 == 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);
                    }
                }
            }
            else
            {
                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)
                {
                    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);
                }
            }

            return(false);
        }
Esempio n. 3
0
        private void Case_1__2(WordMorphoAmbiguity wma_0, WordMorphoAmbiguity wma_1)
        {
            var len_0 = wma_0.morphoAmbiguityTuples.Count;
            var len_1 = wma_1.morphoAmbiguityTuples.Count;

            if (len_0 == 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();
                        }
                    }
                }
            }
            else if (len_1 == 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();
                    }
                }
            }
            else
            {
                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)
                {
                    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();
                }
            }
        }
Esempio n. 4
0
        private bool Case_1__1_stepII_2(WordMorphoAmbiguity wma_2)
        {
            System.Diagnostics.Debug.Assert(_mats_0.Count == _mats_1.Count, "_Mats_0.Count != _Mats_1.Count");

            var len_0 = _mats_0.Count;
            var len_2 = wma_2.morphoAmbiguityTuples.Count;

            if (len_0 == 1)
            {
                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);
                        }
                    }
                }
            }
            else if (len_2 == 1)
            {
                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);
                    }
                }
            }
            else
            {
                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)
                {
                    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);
                }
            }

            return(false);
        }
Esempio n. 5
0
        private bool Case_1__1_stepII_1(List <MorphoAmbiguityTuple> mats, WordMorphoAmbiguity wma_2)
        {
            var len_0 = mats.Count;
            var len_2 = wma_2.morphoAmbiguityTuples.Count;

            if (len_0 == 1)
            {
                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);
                        }
                    }
                }
            }
            else if (len_2 == 1)
            {
                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);
                    }
                }
            }
            else
            {
                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)
                {
                    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);
                }
            }

            return(false);
        }