Example #1
0
        public string[] Conjugate(ENUM_VERB_TYPE verbType)
        {
            VerbEntry ve;

            m_verbWrapper = new VerbWrapper();

            List <string> lst = new List <string>();

            m_verbInfoContainer.ResetIndex();
            while ((ve = m_verbInfoContainer.GetVerbEntry()) != null)
            {
                m_verbWrapper.SetVerbEntry(ve);
                m_verbWrapper.setTensePassivity(ENUM_TENSE_PASSIVITY.ACTIVE);

                if (verbType.Has(ENUM_VERB_TYPE.INFINITIVE))
                {
                    lst.AddRange(m_verbWrapper.PrintInfinitive());
                }

                if (!verbType.Has(ve.verbType))
                {
                    continue;
                }

                #region Conjugate

                foreach (ENUM_TENSE_TIME tm in m_timeList)
                {
                    m_verbWrapper.setTenseTime(tm);
                    //foreach (ENUM_TENSE_OBJECT obj in Enum.GetValues(typeof(ENUM_TENSE_OBJECT)))
                    foreach (ENUM_TENSE_POSITIVITY pos in Enum.GetValues(typeof(ENUM_TENSE_POSITIVITY)))
                    {
                        m_verbWrapper.setTensePositivity(pos);
                        if (!m_verbWrapper.IsValidPositivity())
                        {
                            continue;
                        }

                        foreach (ENUM_TENSE_PERSON person in Enum.GetValues(typeof(ENUM_TENSE_PERSON)))
                        {
                            if (person == ENUM_TENSE_PERSON.INVALID || person == ENUM_TENSE_PERSON.UNMACHED_SEGMENT)
                            {
                                continue;
                            }

                            m_verbWrapper.setTensePerson(person);

                            if (m_verbWrapper.isValidTense(ENUM_VERB_TRANSITIVITY.INTRANSITIVE))
                            {
                                lst.Add(m_verbWrapper.PrintVerb().Split(' ')[0]);
                            }
                        }
                    }
                }

                #endregion
            }

            return(lst.Distinct().ToArray());
        }
Example #2
0
 public VerbEntry()
 {
     this.pastStem     = "";
     this.presentStem  = "";
     this.transitivity = ENUM_VERB_TRANSITIVITY.INVALID;
     this.verbType     = ENUM_VERB_TYPE.INVALID;
     this.pishvand     = "";
     this.felyar       = "";
     this.harfe_ezafe  = "";
 }
Example #3
0
 public VerbEntry(
     string past_stem,
     string present_stem,
     ENUM_VERB_TRANSITIVITY transitivity,
     ENUM_VERB_TYPE verb_type,
     string _pishvand,
     string _felyar,
     string h_ezafe)
 {
     this.SetVerbEntry(past_stem, present_stem, transitivity, verb_type, _pishvand, _felyar, h_ezafe);
 }
Example #4
0
        private void addVerbEntry(
            string mazi,
            string mozare,
            ENUM_VERB_TRANSITIVITY transitivity,
            ENUM_VERB_TYPE verb_type,
            string _pishvand,
            string _felyar,
            string h_ezafe)
        {
            VerbEntry ve = new VerbEntry();

            ve.SetVerbEntry(mazi, mozare, transitivity, verb_type, _pishvand, _felyar, h_ezafe);
            this.entrys.Add(ve);
        }
Example #5
0
        public VerbInfo[] ConjugateInfo(ENUM_VERB_TYPE verbType)
        {
            List <VerbInfo> lst = new List <VerbInfo>();

            foreach (ENUM_TENSE_PERSON pers in Enum.GetValues(typeof(ENUM_TENSE_PERSON)))
            {
                if (pers == ENUM_TENSE_PERSON.INVALID || pers == ENUM_TENSE_PERSON.UNMACHED_SEGMENT)
                {
                    continue;
                }
                lst.AddRange(ConjugateInfo(verbType, pers));
            }
            return(lst.ToArray());
        }
Example #6
0
 public void SetVerbEntry(
     string past_stem,
     string present_stem,
     ENUM_VERB_TRANSITIVITY transitivity,
     ENUM_VERB_TYPE verb_type,
     string _pishvand,
     string _felyar,
     string h_ezafe)
 {
     this.pastStem     = past_stem;
     this.presentStem  = present_stem;
     this.transitivity = transitivity;
     this.verbType     = verb_type;
     this.pishvand     = _pishvand;
     this.felyar       = _felyar;
     this.harfe_ezafe  = h_ezafe;
     this.SetStemAlpha();
 }
Example #7
0
        public GroupPattern GetFelyarPattern(ENUM_VERB_TYPE vtype)
        {
            GroupPattern  gp      = new GroupPattern();
            List <string> strList = new List <string>();

            this.entrys.ForEach(delegate(VerbEntry ve)
            {
                if ((ve.felyar != "") && (ve.verbType == vtype) && !strList.Contains(ve.felyar))
                {
                    strList.Add(ve.felyar);
                }
            });

            strList.ForEach(delegate(string s)
            {
                gp.addUnit(s);
            });

            return(gp);
        }
Example #8
0
        public ENUM_VERB_TYPE getTenseType()
        {
            Int32 mask = Convert.ToInt32(ENUM_VERB_TYPE.INVALID);

            ENUM_VERB_TYPE vtt = (ENUM_VERB_TYPE)(this.ID & mask);

            switch (vtt)
            {
            case ENUM_VERB_TYPE.SADE:
            case ENUM_VERB_TYPE.PISHVANDI:
            case ENUM_VERB_TYPE.PISHVANDI_MORAKKAB:
            case ENUM_VERB_TYPE.MORAKKAB:
            case ENUM_VERB_TYPE.EBARATE_FELI:
            case ENUM_VERB_TYPE.NAGOZAR:
            case ENUM_VERB_TYPE.ESNADI:
            case ENUM_VERB_TYPE.GHEIRE_SHAKHSI:
                return(vtt);

            default:
                return(ENUM_VERB_TYPE.INVALID);
            }
        }
Example #9
0
 public void setTenseType(ENUM_VERB_TYPE type)
 {
     this.ID  = this.ID & ~Convert.ToInt32(ENUM_VERB_TYPE.INVALID);
     this.ID |= Convert.ToInt32(type);
 }
Example #10
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);
        }
Example #11
0
        public bool LoadStemFile(string fileName)
        {
            this.entrys.Clear();

            // Specify file, instructions, and privelegdes
            FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.Read);

            // Create a new stream to read from a file
            StreamReader sr = new StreamReader(file);
            //int startPos = 0;
            Regex r = new Regex("([\\d])\\s+([\\d])\\s+([^\\s]+)\\s+([^\\s]+)\\s+([^\\s]+)\\s+([^\\s]+)\\s+([^\\s]+)");
            Match m;

            string mazi   = "";
            string mozare = "";
            ENUM_VERB_TRANSITIVITY trans = ENUM_VERB_TRANSITIVITY.INVALID;
            ENUM_VERB_TYPE         vtype = ENUM_VERB_TYPE.INVALID;
            string felyar   = "";
            string pishvand = "";
            string h_ezafe  = "";

            string input = null;

            while ((input = sr.ReadLine()) != null)
            {
                m = r.Match(input);

                if (m.Success)
                {
                    // Verb Type
                    switch (Convert.ToInt32(m.Groups[1].Value))
                    {
                    case 1:
                        vtype = ENUM_VERB_TYPE.SADE;
                        break;

                    case 2:
                        vtype = ENUM_VERB_TYPE.PISHVANDI;
                        break;

                    case 3:
                        vtype = ENUM_VERB_TYPE.MORAKKAB;
                        break;

                    case 4:
                        vtype = ENUM_VERB_TYPE.PISHVANDI_MORAKKAB;
                        break;

                    case 5:
                        vtype = ENUM_VERB_TYPE.EBARATE_FELI;
                        break;

                    case 6:
                        vtype = ENUM_VERB_TYPE.NAGOZAR;
                        break;

                    case 7:
                        break;

                    default:
                        vtype = ENUM_VERB_TYPE.INVALID;
                        break;
                    }

                    // Verb Transitivity
                    if (m.Groups[2].Value == "0")
                    {
                        trans = ENUM_VERB_TRANSITIVITY.INTRANSITIVE;
                    }
                    else if (m.Groups[2].Value == "1")
                    {
                        trans = ENUM_VERB_TRANSITIVITY.TRANSITIVE;
                    }
                    else if (m.Groups[2].Value == "2")
                    {
                        trans = ENUM_VERB_TRANSITIVITY.BILATERAL;
                    }

                    // Verb Stem
                    mazi   = m.Groups[3].Value;
                    mozare = m.Groups[4].Value;

                    // Components
                    felyar = m.Groups[5].Value;
                    if (felyar == "-")
                    {
                        felyar = "";
                    }
                    pishvand = m.Groups[6].Value;
                    if (pishvand == "-")
                    {
                        pishvand = "";
                    }
                    h_ezafe = m.Groups[7].Value;
                    if (h_ezafe == "-")
                    {
                        h_ezafe = "";
                    }

                    this.addVerbEntry(mazi, mozare, trans, vtype, pishvand, felyar, h_ezafe);
                }
            }

            // Close StreamReader
            sr.Close();

            // Close file
            file.Close();

            if (this.entrys.Count > 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }