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; } }
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); }
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(); } } }
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); }
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); }