예제 #1
0
        private void ShuffleMDUnitsAfterMDBKInDescendingOrder(
            List <Text> textsAfterBkByBeforeVbVbaPastPres,
            BKBySentenceDecorator bKBySentenceDecorator)
        {
            int MDBKPosition =
                bKBySentenceDecorator
                .GetMDBKPosition(textsAfterBkByBeforeVbVbaPastPres);

            var afterMDBK =
                textsAfterBkByBeforeVbVbaPastPres
                .Skip(MDBKPosition + 1)
                .ToList();

            MoveableUnit[] MDPositions =
                ModifierPositionHelper.GetMDUnitPositions(afterMDBK);

            Array.Reverse(MDPositions);

            List <Text> reversedMDUnit =
                MoveableUnitHelper.GetTextsFromMoveablePositionsList(
                    afterMDBK, MDPositions);

            ReplaceMDUnitAfterMDBKWithReversedMDUnit(
                bKBySentenceDecorator, reversedMDUnit);
        }
예제 #2
0
        private static void ReplaceBKByWithFangFashi(
            BKBySentenceDecorator bKBySentenceDecorator)
        {
            var bkByText = bKBySentenceDecorator.BkByText;

            bkByText.pe_text_revised = " fangfashi ";
        }
예제 #3
0
        private void ShuffleMDUnitsBeforeMDBKInDescendingOrder(
            List <Text> textsAfterBkByBeforeVbVbaPastPres,
            BKBySentenceDecorator bkBySentenceDecorator)
        {
            int MDBKPosition =
                bkBySentenceDecorator
                .GetMDBKPosition(textsAfterBkByBeforeVbVbaPastPres);

            var beforeMDBK =
                textsAfterBkByBeforeVbVbaPastPres.Take(MDBKPosition).ToList();

            MoveableUnit[] MDPositions =
                ModifierPositionHelper.GetMDUnitPositions(beforeMDBK);

            if (MDPositions.Any())
            {
                Array.Reverse(MDPositions);

                List <Text> reversedMDUnit =
                    MoveableUnitHelper.GetTextsFromMoveablePositionsList(
                        beforeMDBK, MDPositions);

                ReplaceMDUnitBeforeMDBKWithReversedMDUnit(
                    bkBySentenceDecorator, MDPositions, reversedMDUnit);
            }
        }
예제 #4
0
        public Sentence ShuffleSentence(Sentence sentence)
        {
            if (!sentence.Texts.Any(text => text.IsMDBK() || text.pe_tag_revised_by_Shuffler == UnitTypes.MDBK))
            {
                return(sentence);
            }

            _bKBySentenceDecorator =
                new BKBySentenceDecorator(sentence);

            if (sentence.Texts.Count(text => text.IsMDBK()) == 1)
            {
                ShuffleMDUnitsFromMDBKToBeforeFirstNNAfterBKBy();

                ShuffleMDUnitsFromAfterMDBKToImmediatelyAfterMDBK();

                ShufflePAST_DE_UnitToBeforeMDBKUnit();

                Shuffle_De_NNUnitAfterMDBKUnit();

                DeleteModifiers();

                ReplaceMDBKWithYouguan();
            }
            else
            {
                Shuffle_De_NNUnitAfterMDBKUnit();

                CreateSentenceOptions();

                sentence.SentenceHasMultipleOptions = true;
            }

            return(sentence);
        }
예제 #5
0
        public Sentence ShuffleSentence(Sentence sentence)
        {
            if (!sentence.HasBKBy)
            {
                return(sentence);
            }

            var bKBySentenceDecorator =
                new BKBySentenceDecorator(sentence);

            int bkByPosition =
                bKBySentenceDecorator.BKByIndexPosition;

            var bKBYUnit = bKBySentenceDecorator.Texts.GetRange(
                bkByPosition,
                bKBySentenceDecorator.Proceeding_NBKP_BKP_VB_VBA_PAST_position);

            if (bKBySentenceDecorator.HasPRES(bKBYUnit))
            {
                ReplaceBKByWithFangFashi(
                    bKBySentenceDecorator);
            }
            else if (bKBySentenceDecorator.HasNN(bKBYUnit))
            {
                ApplyDeParticlesWhereNNThenPASTThenBKBy(
                    bKBySentenceDecorator);
            }

            List <Text> textsAfterBkByBeforeVB_VBA_PAST_PRES =
                GetTextsAfterBkByBeforeVB_VBA_PAST_PRES(bKBySentenceDecorator);

            if (textsAfterBkByBeforeVB_VBA_PAST_PRES.Any(
                    text => text.IsModifier))
            {
                if (AllModifiersAreOf(textsAfterBkByBeforeVB_VBA_PAST_PRES))
                {
                    ReplaceModifiersWithMDBK(
                        textsAfterBkByBeforeVB_VBA_PAST_PRES);
                }
                else
                {
                    SetFirstMDThatIsNotOfToMDBK(
                        textsAfterBkByBeforeVB_VBA_PAST_PRES);

                    ShuffleMDUnitsBeforeMDBKInDescendingOrder(
                        textsAfterBkByBeforeVB_VBA_PAST_PRES,
                        bKBySentenceDecorator);

                    ShuffleMDUnitsAfterMDBKInDescendingOrder(
                        textsAfterBkByBeforeVB_VBA_PAST_PRES,
                        bKBySentenceDecorator);
                }
            }

            return(sentence);
        }
예제 #6
0
        private static List <Text> GetTextsAfterBkByBeforeVB_VBA_PAST_PRES(BKBySentenceDecorator bkBySentenceDecorator)
        {
            int bkByPos = bkBySentenceDecorator.BKByIndexPosition;
            int VB_VBA_PAST_PRES_position = bkBySentenceDecorator.First_VB_VBA_PAST_PRES_PositionAfterBkBy;

            return(bkBySentenceDecorator
                   .Texts
                   .Skip(bkByPos)
                   .Take(VB_VBA_PAST_PRES_position).ToList());
        }
예제 #7
0
        private void ReplaceMDUnitAfterMDBKWithReversedMDUnit(
            BKBySentenceDecorator bKBySentenceDecorator,
            List <Text> reversedMdUnit)
        {
            int firstModifierAfterMDBK =
                bKBySentenceDecorator.FirstModifierAfterMDBK;

            bKBySentenceDecorator.Texts.RemoveRange(
                firstModifierAfterMDBK, reversedMdUnit.Count);

            ModifierPositionHelper.InsertReversedMDUnitBeforePosition(
                bKBySentenceDecorator, reversedMdUnit, firstModifierAfterMDBK);
        }
예제 #8
0
        private static void ReplaceMDUnitBeforeMDBKWithReversedMDUnit(
            BKBySentenceDecorator bkBySentenceDecorator,
            MoveableUnit[] MDPositions,
            List <Text> reversedMDUnit)
        {
            int firstModifierIndexAfterBKBy =
                bkBySentenceDecorator.FirstModifierIndexAfterBKBy;

            ModifierPositionHelper.RemoveCurrentMDUnit(
                bkBySentenceDecorator, MDPositions, firstModifierIndexAfterBKBy);

            ModifierPositionHelper.InsertReversedMDUnitBeforePosition(
                bkBySentenceDecorator, reversedMDUnit, firstModifierIndexAfterBKBy);
        }
예제 #9
0
        private void ApplyDeParticlesWhereNNThenPASTThenBKBy(BKBySentenceDecorator bKBySentenceDecorator)
        {
            var textsBeforeBy =
                bKBySentenceDecorator.TextsBeforeBy;

            if (bKBySentenceDecorator.NNUnitBeforeBkBy(textsBeforeBy))
            {
                int nnPosition = bKBySentenceDecorator.NNPosition;

                if (bKBySentenceDecorator.IsPASTUnitBetweenNNandBKBy(textsBeforeBy, nnPosition))
                {
                    DeParticleHelper.InsertDeParticleBeforeAndUnderline(
                        bKBySentenceDecorator, nnPosition);

                    int pastPosition = bKBySentenceDecorator
                                       .GetFirstPASTUnitPositionAfterNN(
                        bKBySentenceDecorator, nnPosition);

                    DeParticleHelper.InsertDeParticleAfterAndUnderline(
                        bKBySentenceDecorator, pastPosition + 1);
                }
            }
        }