示例#1
0
 public GroupPattern()
 {
     this.pattern   = "";
     this.stemAlpha = STEM_ALPHA.X_X;
     this.stemTime  = STEM_TIME.UNSET;
     this.stemCount = 0;
 }
示例#2
0
        public STEM_ALPHA BoundingAlpha(STEM_TIME stemTime)
        {
            STEM_ALPHA start, end, bound;

            start = this.StartingAlpha(stemTime);
            end   = this.EndingAlpha(stemTime);
            bound = STEM_ALPHA.X_X;

            if (start == STEM_ALPHA.A_X && end == STEM_ALPHA.X_A)
            {
                bound = STEM_ALPHA.A_A;
            }
            else if (start == STEM_ALPHA.A_X && end == STEM_ALPHA.X_B)
            {
                bound = STEM_ALPHA.A_B;
            }
            else if (start == STEM_ALPHA.B_X && end == STEM_ALPHA.X_A)
            {
                bound = STEM_ALPHA.B_A;
            }
            else if (start == STEM_ALPHA.B_X && end == STEM_ALPHA.X_B)
            {
                bound = STEM_ALPHA.B_B;
            }

            return(bound);
        }
示例#3
0
        public STEM_ALPHA StartingAlpha(STEM_TIME stemTime)
        {
            switch (stemTime)
            {
            case STEM_TIME.MAZI:
                return(this.alph_start_mazi);

            case STEM_TIME.MOZARE:
                return(this.alph_start_moza);

            default:
                break;
            }
            return(STEM_ALPHA.X_X);
        }
示例#4
0
        public STEM_ALPHA EndingAlpha(STEM_TIME stemTime)
        /* only for present stem */
        {
            switch (stemTime)
            {
            case STEM_TIME.MAZI:
                return(alph_end_mazi);

            case STEM_TIME.MOZARE:
                return(alph_end_moza);

            default:
                break;
            }
            return(STEM_ALPHA.X_X);
        }
示例#5
0
        public string GetTail(STEM_TIME st)
        {
            string stem = "";

            switch (st)
            {
            case STEM_TIME.MAZI:
                stem = this.pastStem;
                break;

            case STEM_TIME.MOZARE:
                stem = this.presentStem;
                break;
            }

            stem = stem.Substring(1);

            return(stem);
        }
示例#6
0
        public STEM_TIME getStemTime()
        {
            STEM_TIME st = STEM_TIME.UNSET;

            switch (this.getTenseTime())
            {
            case ENUM_TENSE_TIME.MAZI_E_SADE:
            case ENUM_TENSE_TIME.MAZI_E_ESTEMRARI:
            case ENUM_TENSE_TIME.MAZI_E_BAEID:
            case ENUM_TENSE_TIME.MAZI_E_MOSTAMAR:
            case ENUM_TENSE_TIME.MAZI_E_SADEYE_NAGHLI:
            case ENUM_TENSE_TIME.MAZI_E_ESTEMRARIE_NAGHLI:
            case ENUM_TENSE_TIME.MAZI_E_BAEIDE_NAGHLI:
            case ENUM_TENSE_TIME.MAZI_E_MOSTAMARE_NAGHLI:
            case ENUM_TENSE_TIME.MAZI_E_ELTEZAMI:
            case ENUM_TENSE_TIME.AYANDE:
                st = STEM_TIME.MAZI;
                break;

            case ENUM_TENSE_TIME.MOZARE_E_EKHBARI:
            case ENUM_TENSE_TIME.MOZARE_E_MOSTAMAR:
            case ENUM_TENSE_TIME.MOZARE_E_ELTEZAMI:
            case ENUM_TENSE_TIME.AMR:
                switch (this.getTensePassivity())
                {
                case ENUM_TENSE_PASSIVITY.ACTIVE:
                    st = STEM_TIME.MOZARE;
                    break;

                case ENUM_TENSE_PASSIVITY.PASSIVE:
                    st = STEM_TIME.MAZI;
                    break;
                }
                break;

            default:
                break;
            }

            return(st);
        }
示例#7
0
        public GroupPattern GetStemPatten(STEM_TIME st, STEM_ALPHA vs, ENUM_VERB_TYPE verb_type, ENUM_PATTERN_GENERALITY generality)
        {
            GroupPattern dp = new GroupPattern();

            dp.stemAlpha = vs;
            dp.stemTime  = st;
            string generalVerb = ".{2,4}";

            switch (st)
            {
            case STEM_TIME.MAZI:
                switch (vs)
                {
                case STEM_ALPHA.A_X:
                case STEM_ALPHA.A_B:
                case STEM_ALPHA.A_A:
                    if (generality == ENUM_PATTERN_GENERALITY.EXPLICIT)
                    {
                        this.entrys.ForEach(delegate(VerbEntry ve)
                        {
                            if ((ve.StartingAlpha(STEM_TIME.MAZI) == STEM_ALPHA.A_X) && (ve.verbType == verb_type))
                            {
                                dp.addUnit(ve.GetTail(STEM_TIME.MAZI));
                            }
                        });
                        dp.pattern = "[آا](?:" + dp.pattern + ")";
                    }
                    else
                    {
                        dp.pattern = "[آا](?:" + generalVerb + ")";
                    }
                    break;

                case STEM_ALPHA.B_X:
                case STEM_ALPHA.B_B:
                case STEM_ALPHA.B_A:
                    if (generality == ENUM_PATTERN_GENERALITY.EXPLICIT)
                    {
                        this.entrys.ForEach(delegate(VerbEntry ve)
                        {
                            if ((ve.StartingAlpha(STEM_TIME.MAZI) == STEM_ALPHA.B_X) && (ve.verbType == verb_type))
                            {
                                dp.addUnit(ve.pastStem);
                            }
                        });
                    }
                    else
                    {
                        dp.pattern = generalVerb;
                    }
                    break;

                default:
                    break;
                }
                break;

            case STEM_TIME.MOZARE:
                switch (vs)
                {
                case STEM_ALPHA.A_B:
                    if (generality == ENUM_PATTERN_GENERALITY.EXPLICIT)
                    {
                        this.entrys.ForEach(delegate(VerbEntry ve)
                        {
                            if ((ve.BoundingAlpha(STEM_TIME.MOZARE) == STEM_ALPHA.A_B) && (ve.verbType == verb_type))
                            {
                                dp.addUnit(ve.GetTail(STEM_TIME.MOZARE));
                            }
                        });
                        dp.pattern = "[آا](?:" + dp.pattern + ")";
                    }
                    else
                    {
                        dp.pattern = "[آا](?:" + generalVerb + ")";
                    }
                    break;

                case STEM_ALPHA.A_A:
                    if (generality == ENUM_PATTERN_GENERALITY.EXPLICIT)
                    {
                        this.entrys.ForEach(delegate(VerbEntry ve)
                        {
                            if ((ve.BoundingAlpha(STEM_TIME.MOZARE) == STEM_ALPHA.A_A) && (ve.verbType == verb_type))
                            {
                                dp.addUnit(ve.GetTail(STEM_TIME.MOZARE));
                            }
                        });
                        dp.pattern = "[آا](?:" + dp.pattern + ")";
                    }
                    else
                    {
                        dp.pattern = "[آا](?:" + generalVerb + ")";
                    }
                    break;

                case STEM_ALPHA.B_B:
                    if (generality == ENUM_PATTERN_GENERALITY.EXPLICIT)
                    {
                        this.entrys.ForEach(delegate(VerbEntry ve)
                        {
                            if ((ve.BoundingAlpha(STEM_TIME.MOZARE) == STEM_ALPHA.B_B) && (ve.verbType == verb_type))
                            {
                                dp.addUnit(ve.presentStem);
                            }
                        });
                    }
                    else
                    {
                        dp.pattern = generalVerb;
                    }
                    break;

                case STEM_ALPHA.B_A:
                    if (generality == ENUM_PATTERN_GENERALITY.EXPLICIT)
                    {
                        this.entrys.ForEach(delegate(VerbEntry ve)
                        {
                            if ((ve.BoundingAlpha(STEM_TIME.MOZARE) == STEM_ALPHA.B_A) && (ve.verbType == verb_type))
                            {
                                dp.addUnit(ve.presentStem);
                            }
                        });
                    }
                    else
                    {
                        dp.pattern = "[آا](?:" + generalVerb + ")";
                    }
                    break;

                default:
                    break;
                }
                break;
            }

            return(dp);
        }