Esempio n. 1
0
        private string str_BuildAnalysisString(IWordForm wf)
        {
            StringBuilder strb_ana = new StringBuilder();
            strb_ana.Append("<ana lex=\"");
            strb_ana.Append(wf.Lemma);
            strb_ana.Append("\" gr=\"");
            if (wf.PartOfSpeech == ET_PartOfSpeech.POS_ADJ ||
                wf.PartOfSpeech == ET_PartOfSpeech.POS_PRONOUN_ADJ)
            {
                if (wf.PartOfSpeech == ET_PartOfSpeech.POS_ADJ)
                {
                    strb_ana.Append("A");
                }
                else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_PRONOUN_ADJ)
                {
                    strb_ana.Append("APRO");
                }

                // Gender
                if (wf.Gender == ET_Gender.GENDER_F)
                {
                    strb_ana.Append(",f");
                }
                else if (wf.Gender == ET_Gender.GENDER_M)
                {
                    strb_ana.Append(",m");
                }
                else if (wf.Gender == ET_Gender.GENDER_N)
                {
                    strb_ana.Append(",n");
                }

                // Number
                if (wf.Number == ET_Number.NUM_SG)
                {
                    strb_ana.Append(",sg");
                }
                else if (wf.Number == ET_Number.NUM_PL)
                {
                    strb_ana.Append(",pl");
                }

                // Case
                if (wf.Case == ET_Case.CASE_NOM)
                {
                    strb_ana.Append(",nom");
                }
                else if (wf.Case == ET_Case.CASE_ACC)
                {
                    strb_ana.Append(",acc");
                    // Animacy
                    if (wf.Animacy == ET_Animacy.ANIM_NO)
                    {
                        strb_ana.Append(",inan");
                    }
                    else if (wf.Animacy == ET_Animacy.ANIM_YES)
                    {
                        strb_ana.Append(",anim");
                    }
                }
                else if (wf.Case == ET_Case.CASE_GEN)
                {
                    strb_ana.Append(",gen");
                }
                else if (wf.Case == ET_Case.CASE_DAT)
                {
                    strb_ana.Append(",dat");
                }
                else if (wf.Case == ET_Case.CASE_INST)
                {
                    strb_ana.Append(",ins");
                }
                else if (wf.Case == ET_Case.CASE_PREP)
                {
                    strb_ana.Append(",loc");
                }
                else if (wf.Case == ET_Case.CASE_LOC)
                {
                    strb_ana.Append(",loc2");
                }
                else if (wf.Case == ET_Case.CASE_PART)
                {
                    strb_ana.Append(",gen2");
                }
                else if (wf.Case == ET_Case.CASE_NUM)
                {
                    strb_ana.Append(",adnum");
                }

                // Unchangeable adjectives
                if (wf.Subparadigm != ET_Subparadigm.SUBPARADIGM_COMPARATIVE &&
                    wf.Gender == ET_Gender.GENDER_UNDEFINED &&
                    wf.Number == ET_Number.NUM_UNDEFINED &&
                    wf.Case == ET_Case.CASE_UNDEFINED)
                {
                    strb_ana.Append(",0");
                }

                // Long/short/comparative
                if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_LONG_ADJ)
                {
                    strb_ana.Append(",plen");
                }
                else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_SHORT_ADJ)
                {
                    strb_ana.Append(",brev");
                }
                else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_COMPARATIVE)
                {
                    strb_ana.Append(",comp");
                }
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_ADV)
            {
                strb_ana.Append("ADV");
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_COMPAR)
            {
                strb_ana.Append("COMP");
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_CONJ)
            {
                strb_ana.Append("CONJ");
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_INTERJ)
            {
                strb_ana.Append("INTERJ");
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_NOUN)
            {
                strb_ana.Append("S");

                // Animacy
                if (wf.Animacy == ET_Animacy.ANIM_NO)
                {
                    strb_ana.Append(",inan");
                }
                else if (wf.Animacy == ET_Animacy.ANIM_YES)
                {
                    strb_ana.Append(",anim");
                }

                // Gender
                if (wf.Gender == ET_Gender.GENDER_F)
                {
                    strb_ana.Append(",f");
                }
                else if (wf.Gender == ET_Gender.GENDER_M)
                {
                    strb_ana.Append(",m");
                }
                else if (wf.Gender == ET_Gender.GENDER_N)
                {
                    strb_ana.Append(",n");
                }
                // TODO: M-F, pluralia tantum

                // Number
                if (wf.Number == ET_Number.NUM_SG)
                {
                    strb_ana.Append(",sg");
                }
                else if (wf.Number == ET_Number.NUM_PL)
                {
                    strb_ana.Append(",pl");
                }

                // Case
                if (wf.Case == ET_Case.CASE_NOM)
                {
                    strb_ana.Append(",nom");
                }
                else if (wf.Case == ET_Case.CASE_ACC)
                {
                    strb_ana.Append(",acc");
                }
                else if (wf.Case == ET_Case.CASE_GEN)
                {
                    strb_ana.Append(",gen");
                }
                else if (wf.Case == ET_Case.CASE_DAT)
                {
                    strb_ana.Append(",dat");
                }
                else if (wf.Case == ET_Case.CASE_INST)
                {
                    strb_ana.Append(",ins");
                }
                else if (wf.Case == ET_Case.CASE_PREP)
                {
                    strb_ana.Append(",loc");
                }
                else if (wf.Case == ET_Case.CASE_LOC)
                {
                    strb_ana.Append(",loc2");
                }
                else if (wf.Case == ET_Case.CASE_PART)
                {
                    strb_ana.Append(",gen2");
                }
                else if (wf.Case == ET_Case.CASE_NUM)
                {
                    strb_ana.Append(",adnum");
                }

                // Unchangeable nouns
                if (wf.Number == ET_Number.NUM_UNDEFINED &&
                    wf.Case == ET_Case.CASE_UNDEFINED)
                {
                    strb_ana.Append(",0");
                }
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_NULL)
            {
                strb_ana.Append("NULL");
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_NUM ||
                     wf.PartOfSpeech == ET_PartOfSpeech.POS_NUM_ADJ)
            {
                if (wf.PartOfSpeech == ET_PartOfSpeech.POS_NUM)
                {
                    strb_ana.Append("NUM");
                }
                else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_NUM_ADJ)
                {
                    strb_ana.Append("ANUM");
                }

                // Gender (POS_NUM can also have it: два vs. две)
                if (wf.Gender == ET_Gender.GENDER_F)
                {
                    strb_ana.Append(",f");
                }
                else if (wf.Gender == ET_Gender.GENDER_M)
                {
                    strb_ana.Append(",m");
                }
                else if (wf.Gender == ET_Gender.GENDER_N)
                {
                    strb_ana.Append(",n");
                }

                // Number (POS_NUM can also have it: один vs. одни)
                if (wf.Number == ET_Number.NUM_SG)
                {
                    strb_ana.Append(",sg");
                }
                else if (wf.Number == ET_Number.NUM_PL)
                {
                    strb_ana.Append(",pl");
                }

                // Case
                if (wf.Case == ET_Case.CASE_NOM)
                {
                    strb_ana.Append(",nom");
                }
                else if (wf.Case == ET_Case.CASE_ACC)
                {
                    strb_ana.Append(",acc");
                    // Animacy
                    if (wf.Animacy == ET_Animacy.ANIM_NO)
                    {
                        strb_ana.Append(",inan");
                    }
                    else if (wf.Animacy == ET_Animacy.ANIM_YES)
                    {
                        strb_ana.Append(",anim");
                    }
                }
                else if (wf.Case == ET_Case.CASE_GEN)
                {
                    strb_ana.Append(",gen");
                }
                else if (wf.Case == ET_Case.CASE_DAT)
                {
                    strb_ana.Append(",dat");
                }
                else if (wf.Case == ET_Case.CASE_INST)
                {
                    strb_ana.Append(",ins");
                }
                else if (wf.Case == ET_Case.CASE_PREP)
                {
                    strb_ana.Append(",loc");
                }
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_PARENTH)
            {
                strb_ana.Append("PARENTH");
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_PARTICLE)
            {
                strb_ana.Append("PART");
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_PREDIC)
            {
                strb_ana.Append("PRAEDIC");
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_PREP)
            {
                strb_ana.Append("PR");
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_PRONOUN)
            {
                strb_ana.Append("SPRO");

                // Person
                if (wf.Person == ET_Person.PERSON_1)
                {
                    strb_ana.Append(",1p");
                }
                else if (wf.Person == ET_Person.PERSON_2)
                {
                    strb_ana.Append(",2p");
                }
                else if (wf.Person == ET_Person.PERSON_3)
                {
                    strb_ana.Append(",3p");
                }

                // Animacy
                if (wf.Animacy == ET_Animacy.ANIM_NO)
                {
                    strb_ana.Append(",inan");
                }
                else if (wf.Animacy == ET_Animacy.ANIM_YES)
                {
                    strb_ana.Append(",anim");
                }

                // Gender
                if (wf.Gender == ET_Gender.GENDER_F)
                {
                    strb_ana.Append(",f");
                }
                else if (wf.Gender == ET_Gender.GENDER_M)
                {
                    strb_ana.Append(",m");
                }
                else if (wf.Gender == ET_Gender.GENDER_N)
                {
                    strb_ana.Append(",n");
                }
                // TODO: M-F, pluralia tantum

                // Number
                if (wf.Number == ET_Number.NUM_SG)
                {
                    strb_ana.Append(",sg");
                }
                else if (wf.Number == ET_Number.NUM_PL)
                {
                    strb_ana.Append(",pl");
                }

                // Case
                if (wf.Case == ET_Case.CASE_NOM)
                {
                    strb_ana.Append(",nom");
                }
                else if (wf.Case == ET_Case.CASE_ACC)
                {
                    strb_ana.Append(",acc");
                }
                else if (wf.Case == ET_Case.CASE_GEN)
                {
                    strb_ana.Append(",gen");
                }
                else if (wf.Case == ET_Case.CASE_DAT)
                {
                    strb_ana.Append(",dat");
                }
                else if (wf.Case == ET_Case.CASE_INST)
                {
                    strb_ana.Append(",ins");
                }
                else if (wf.Case == ET_Case.CASE_PREP)
                {
                    strb_ana.Append(",loc");
                }
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_PRONOUN_PREDIC)
            {
                strb_ana.Append("PRAEDICPRO");
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_VERB)
            {
                strb_ana.Append("V");

                // TODO: transitivity

                // Aspect
                if (wf.Aspect == ET_Aspect.ASPECT_IMPERFECTIVE)
                {
                    strb_ana.Append(",ipfv");
                }
                else if (wf.Aspect == ET_Aspect.ASPECT_PERFECTIVE)
                {
                    strb_ana.Append(",pfv");
                }

                // Subparadigm
                if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PRESENT_TENSE)
                {
                    strb_ana.Append(",indic");

                    // Reflexivity
                    if (wf.IsReflexive == ET_Reflexive.REFL_NO)
                    {
                        strb_ana.Append(",act");
                    }
                    else if (wf.IsReflexive == ET_Reflexive.REFL_YES)
                    {
                        strb_ana.Append(",med");
                    }

                    // Tense
                    if (wf.Aspect == ET_Aspect.ASPECT_IMPERFECTIVE)
                    {
                        strb_ana.Append(",praes");
                    }
                    else if (wf.Aspect == ET_Aspect.ASPECT_PERFECTIVE)
                    {
                        strb_ana.Append(",fut");
                    }
                    else if (wf.Aspect == ET_Aspect.ASPECT_UNDEFINED)
                    {
                        strb_ana.Append(",nonpast");
                    }

                    // Person
                    if (wf.Person == ET_Person.PERSON_1)
                    {
                        strb_ana.Append(",1p");
                    }
                    else if (wf.Person == ET_Person.PERSON_2)
                    {
                        strb_ana.Append(",2p");
                    }
                    else if (wf.Person == ET_Person.PERSON_3)
                    {
                        strb_ana.Append(",3p");
                    }

                    // Number
                    if (wf.Number == ET_Number.NUM_SG)
                    {
                        strb_ana.Append(",sg");
                    }
                    else if (wf.Number == ET_Number.NUM_PL)
                    {
                        strb_ana.Append(",pl");
                    }
                }
                else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PAST_TENSE)
                {
                    strb_ana.Append(",indic");

                    // Reflexivity
                    if (wf.IsReflexive == ET_Reflexive.REFL_NO)
                    {
                        strb_ana.Append(",act");
                    }
                    else if (wf.IsReflexive == ET_Reflexive.REFL_YES)
                    {
                        strb_ana.Append(",med");
                    }

                    // Tense
                    strb_ana.Append(",praet");

                    // Gender
                    if (wf.Gender == ET_Gender.GENDER_F)
                    {
                        strb_ana.Append(",f");
                    }
                    else if (wf.Gender == ET_Gender.GENDER_M)
                    {
                        strb_ana.Append(",m");
                    }
                    else if (wf.Gender == ET_Gender.GENDER_N)
                    {
                        strb_ana.Append(",n");
                    }

                    // Number
                    if (wf.Number == ET_Number.NUM_SG)
                    {
                        strb_ana.Append(",sg");
                    }
                    else if (wf.Number == ET_Number.NUM_PL)
                    {
                        strb_ana.Append(",pl");
                    }
                }
                else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PAST_ACT ||
                         wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PRES_ACT)
                {
                    strb_ana.Append(",partcp");

                    // Reflexivity
                    if (wf.IsReflexive == ET_Reflexive.REFL_NO)
                    {
                        strb_ana.Append(",act");
                    }
                    else if (wf.IsReflexive == ET_Reflexive.REFL_YES)
                    {
                        strb_ana.Append(",med");
                    }

                    // Tense
                    if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PAST_ACT)
                    {
                        strb_ana.Append(",praet");
                    }
                    else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PRES_ACT)
                    {
                        if (wf.Aspect == ET_Aspect.ASPECT_IMPERFECTIVE)
                        {
                            strb_ana.Append(",praes");
                        }
                        else if (wf.Aspect == ET_Aspect.ASPECT_PERFECTIVE)
                        {
                            strb_ana.Append(",fut");
                        }
                        else if (wf.Aspect == ET_Aspect.ASPECT_UNDEFINED)
                        {
                            strb_ana.Append(",nonpast");
                        }
                    }

                    // Gender
                    if (wf.Gender == ET_Gender.GENDER_F)
                    {
                        strb_ana.Append(",f");
                    }
                    else if (wf.Gender == ET_Gender.GENDER_M)
                    {
                        strb_ana.Append(",m");
                    }
                    else if (wf.Gender == ET_Gender.GENDER_N)
                    {
                        strb_ana.Append(",n");
                    }

                    // Number
                    if (wf.Number == ET_Number.NUM_SG)
                    {
                        strb_ana.Append(",sg");
                    }
                    else if (wf.Number == ET_Number.NUM_PL)
                    {
                        strb_ana.Append(",pl");
                    }

                    // Case
                    if (wf.Case == ET_Case.CASE_NOM)
                    {
                        strb_ana.Append(",nom");
                    }
                    else if (wf.Case == ET_Case.CASE_ACC)
                    {
                        strb_ana.Append(",acc");
                        // Animacy
                        if (wf.Animacy == ET_Animacy.ANIM_NO)
                        {
                            strb_ana.Append(",inan");
                        }
                        else if (wf.Animacy == ET_Animacy.ANIM_YES)
                        {
                            strb_ana.Append(",anim");
                        }
                    }
                    else if (wf.Case == ET_Case.CASE_GEN)
                    {
                        strb_ana.Append(",gen");
                    }
                    else if (wf.Case == ET_Case.CASE_DAT)
                    {
                        strb_ana.Append(",dat");
                    }
                    else if (wf.Case == ET_Case.CASE_INST)
                    {
                        strb_ana.Append(",ins");
                    }
                    else if (wf.Case == ET_Case.CASE_PREP)
                    {
                        strb_ana.Append(",loc");
                    }

                    strb_ana.Append(",plen");
                }

                else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PAST_PASS_LONG ||
                         wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PRES_PASS_LONG)
                {
                    strb_ana.Append(",partcp");

                    // Reflexivity
                    if (wf.IsReflexive == ET_Reflexive.REFL_NO)
                    {
                        strb_ana.Append(",pass");
                    }
                    else if (wf.IsReflexive == ET_Reflexive.REFL_YES)
                    {
                        strb_ana.Append(",pass,med");
                    }

                    // Tense
                    if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PAST_PASS_LONG)
                    {
                        strb_ana.Append(",praet");
                    }
                    else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PRES_PASS_LONG)
                    {
                        if (wf.Aspect == ET_Aspect.ASPECT_IMPERFECTIVE)
                        {
                            strb_ana.Append(",praes");
                        }
                        else if (wf.Aspect == ET_Aspect.ASPECT_PERFECTIVE)
                        {
                            strb_ana.Append(",fut");
                        }
                        else if (wf.Aspect == ET_Aspect.ASPECT_UNDEFINED)
                        {
                            strb_ana.Append(",nonpast");
                        }
                    }

                    // Gender
                    if (wf.Gender == ET_Gender.GENDER_F)
                    {
                        strb_ana.Append(",f");
                    }
                    else if (wf.Gender == ET_Gender.GENDER_M)
                    {
                        strb_ana.Append(",m");
                    }
                    else if (wf.Gender == ET_Gender.GENDER_N)
                    {
                        strb_ana.Append(",n");
                    }

                    // Number
                    if (wf.Number == ET_Number.NUM_SG)
                    {
                        strb_ana.Append(",sg");
                    }
                    else if (wf.Number == ET_Number.NUM_PL)
                    {
                        strb_ana.Append(",pl");
                    }

                    // Case
                    if (wf.Case == ET_Case.CASE_NOM)
                    {
                        strb_ana.Append(",nom");
                    }
                    else if (wf.Case == ET_Case.CASE_ACC)
                    {
                        strb_ana.Append(",acc");
                        // Animacy
                        if (wf.Animacy == ET_Animacy.ANIM_NO)
                        {
                            strb_ana.Append(",inan");
                        }
                        else if (wf.Animacy == ET_Animacy.ANIM_YES)
                        {
                            strb_ana.Append(",anim");
                        }
                    }
                    else if (wf.Case == ET_Case.CASE_GEN)
                    {
                        strb_ana.Append(",gen");
                    }
                    else if (wf.Case == ET_Case.CASE_DAT)
                    {
                        strb_ana.Append(",dat");
                    }
                    else if (wf.Case == ET_Case.CASE_INST)
                    {
                        strb_ana.Append(",ins");
                    }
                    else if (wf.Case == ET_Case.CASE_PREP)
                    {
                        strb_ana.Append(",loc");
                    }

                    strb_ana.Append(",plen");
                }

                else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PAST_PASS_SHORT ||
                         wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PRES_PASS_SHORT)
                {
                    strb_ana.Append(",partcp");

                    // Reflexivity
                    if (wf.IsReflexive == ET_Reflexive.REFL_NO)
                    {
                        strb_ana.Append(",pass");
                    }
                    else if (wf.IsReflexive == ET_Reflexive.REFL_YES)
                    {
                        strb_ana.Append(",pass,med");
                    }

                    // Tense
                    if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PAST_ACT)
                    {
                        strb_ana.Append(",praet");
                    }
                    else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PRES_ACT)
                    {
                        if (wf.Aspect == ET_Aspect.ASPECT_IMPERFECTIVE)
                        {
                            strb_ana.Append(",praes");
                        }
                        else if (wf.Aspect == ET_Aspect.ASPECT_PERFECTIVE)
                        {
                            strb_ana.Append(",fut");
                        }
                        else if (wf.Aspect == ET_Aspect.ASPECT_UNDEFINED)
                        {
                            strb_ana.Append(",nonpast");
                        }
                    }

                    // Gender
                    if (wf.Gender == ET_Gender.GENDER_F)
                    {
                        strb_ana.Append(",f");
                    }
                    else if (wf.Gender == ET_Gender.GENDER_M)
                    {
                        strb_ana.Append(",m");
                    }
                    else if (wf.Gender == ET_Gender.GENDER_N)
                    {
                        strb_ana.Append(",n");
                    }

                    // Number
                    if (wf.Number == ET_Number.NUM_SG)
                    {
                        strb_ana.Append(",sg");
                    }
                    else if (wf.Number == ET_Number.NUM_PL)
                    {
                        strb_ana.Append(",pl");
                    }

                    strb_ana.Append(",brev");
                }

                else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_ADVERBIAL_PAST ||
                         wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_ADVERBIAL_PRESENT)
                {
                    strb_ana.Append(",ger");

                    // Reflexivity
                    if (wf.IsReflexive == ET_Reflexive.REFL_NO)
                    {
                        strb_ana.Append(",act");
                    }
                    else if (wf.IsReflexive == ET_Reflexive.REFL_YES)
                    {
                        strb_ana.Append(",med");
                    }

                    // Tense
                    if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PAST_ACT)
                    {
                        strb_ana.Append(",praet");
                    }
                    else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PRES_ACT)
                    {
                        if (wf.Aspect == ET_Aspect.ASPECT_IMPERFECTIVE)
                        {
                            strb_ana.Append(",praes");
                        }
                        else if (wf.Aspect == ET_Aspect.ASPECT_PERFECTIVE)
                        {
                            strb_ana.Append(",fut");
                        }
                        else if (wf.Aspect == ET_Aspect.ASPECT_UNDEFINED)
                        {
                            strb_ana.Append(",nonpast");
                        }
                    }
                }

                else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_IMPERATIVE)
                {
                    strb_ana.Append(",imper");

                    // Reflexivity
                    if (wf.IsReflexive == ET_Reflexive.REFL_NO)
                    {
                        strb_ana.Append(",act");
                    }
                    else if (wf.IsReflexive == ET_Reflexive.REFL_YES)
                    {
                        strb_ana.Append(",med");
                    }

                    // Person
                    if (wf.Person == ET_Person.PERSON_1)
                    {
                        strb_ana.Append(",1p");
                    }
                    else if (wf.Person == ET_Person.PERSON_2)
                    {
                        strb_ana.Append(",2p");
                    }

                    // Number
                    if (wf.Number == ET_Number.NUM_SG)
                    {
                        strb_ana.Append(",sg");
                    }
                    else if (wf.Number == ET_Number.NUM_PL)
                    {
                        strb_ana.Append(",pl");
                    }
                }

                else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_INFINITIVE)
                {
                    strb_ana.Append(",inf");
                }
            }
            if (wf.LexemeId <= 0)
            {
                strb_ana.Append(",bastard");
            }

            strb_ana.Append("\"></ana>");
            return strb_ana.ToString();
        }
Esempio n. 2
0
        private string str_BuildAnalysisString(IWordForm wf)
        {
            StringBuilder strb_ana = new StringBuilder();

            strb_ana.Append("<ana lex=\"");
            strb_ana.Append(wf.Lemma);
            strb_ana.Append("\" gr=\"");
            if (wf.PartOfSpeech == ET_PartOfSpeech.POS_ADJ ||
                wf.PartOfSpeech == ET_PartOfSpeech.POS_PRONOUN_ADJ)
            {
                if (wf.PartOfSpeech == ET_PartOfSpeech.POS_ADJ)
                {
                    strb_ana.Append("A");
                }
                else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_PRONOUN_ADJ)
                {
                    strb_ana.Append("APRO");
                }

                // Gender
                if (wf.Gender == ET_Gender.GENDER_F)
                {
                    strb_ana.Append(",f");
                }
                else if (wf.Gender == ET_Gender.GENDER_M)
                {
                    strb_ana.Append(",m");
                }
                else if (wf.Gender == ET_Gender.GENDER_N)
                {
                    strb_ana.Append(",n");
                }

                // Number
                if (wf.Number == ET_Number.NUM_SG)
                {
                    strb_ana.Append(",sg");
                }
                else if (wf.Number == ET_Number.NUM_PL)
                {
                    strb_ana.Append(",pl");
                }

                // Case
                if (wf.Case == ET_Case.CASE_NOM)
                {
                    strb_ana.Append(",nom");
                }
                else if (wf.Case == ET_Case.CASE_ACC)
                {
                    strb_ana.Append(",acc");
                    // Animacy
                    if (wf.Animacy == ET_Animacy.ANIM_NO)
                    {
                        strb_ana.Append(",inan");
                    }
                    else if (wf.Animacy == ET_Animacy.ANIM_YES)
                    {
                        strb_ana.Append(",anim");
                    }
                }
                else if (wf.Case == ET_Case.CASE_GEN)
                {
                    strb_ana.Append(",gen");
                }
                else if (wf.Case == ET_Case.CASE_DAT)
                {
                    strb_ana.Append(",dat");
                }
                else if (wf.Case == ET_Case.CASE_INST)
                {
                    strb_ana.Append(",ins");
                }
                else if (wf.Case == ET_Case.CASE_PREP)
                {
                    strb_ana.Append(",loc");
                }
                else if (wf.Case == ET_Case.CASE_LOC)
                {
                    strb_ana.Append(",loc2");
                }
                else if (wf.Case == ET_Case.CASE_PART)
                {
                    strb_ana.Append(",gen2");
                }
                else if (wf.Case == ET_Case.CASE_NUM)
                {
                    strb_ana.Append(",adnum");
                }

                // Unchangeable adjectives
                if (wf.Subparadigm != ET_Subparadigm.SUBPARADIGM_COMPARATIVE &&
                    wf.Gender == ET_Gender.GENDER_UNDEFINED &&
                    wf.Number == ET_Number.NUM_UNDEFINED &&
                    wf.Case == ET_Case.CASE_UNDEFINED)
                {
                    strb_ana.Append(",0");
                }

                // Long/short/comparative
                if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_LONG_ADJ)
                {
                    strb_ana.Append(",plen");
                }
                else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_SHORT_ADJ)
                {
                    strb_ana.Append(",brev");
                }
                else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_COMPARATIVE)
                {
                    strb_ana.Append(",comp");
                }
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_ADV)
            {
                strb_ana.Append("ADV");
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_COMPAR)
            {
                strb_ana.Append("COMP");
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_CONJ)
            {
                strb_ana.Append("CONJ");
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_INTERJ)
            {
                strb_ana.Append("INTERJ");
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_NOUN)
            {
                strb_ana.Append("S");

                // Animacy
                if (wf.Animacy == ET_Animacy.ANIM_NO)
                {
                    strb_ana.Append(",inan");
                }
                else if (wf.Animacy == ET_Animacy.ANIM_YES)
                {
                    strb_ana.Append(",anim");
                }

                // Gender
                if (wf.Gender == ET_Gender.GENDER_F)
                {
                    strb_ana.Append(",f");
                }
                else if (wf.Gender == ET_Gender.GENDER_M)
                {
                    strb_ana.Append(",m");
                }
                else if (wf.Gender == ET_Gender.GENDER_N)
                {
                    strb_ana.Append(",n");
                }
                // TODO: M-F, pluralia tantum

                // Number
                if (wf.Number == ET_Number.NUM_SG)
                {
                    strb_ana.Append(",sg");
                }
                else if (wf.Number == ET_Number.NUM_PL)
                {
                    strb_ana.Append(",pl");
                }

                // Case
                if (wf.Case == ET_Case.CASE_NOM)
                {
                    strb_ana.Append(",nom");
                }
                else if (wf.Case == ET_Case.CASE_ACC)
                {
                    strb_ana.Append(",acc");
                }
                else if (wf.Case == ET_Case.CASE_GEN)
                {
                    strb_ana.Append(",gen");
                }
                else if (wf.Case == ET_Case.CASE_DAT)
                {
                    strb_ana.Append(",dat");
                }
                else if (wf.Case == ET_Case.CASE_INST)
                {
                    strb_ana.Append(",ins");
                }
                else if (wf.Case == ET_Case.CASE_PREP)
                {
                    strb_ana.Append(",loc");
                }
                else if (wf.Case == ET_Case.CASE_LOC)
                {
                    strb_ana.Append(",loc2");
                }
                else if (wf.Case == ET_Case.CASE_PART)
                {
                    strb_ana.Append(",gen2");
                }
                else if (wf.Case == ET_Case.CASE_NUM)
                {
                    strb_ana.Append(",adnum");
                }

                // Unchangeable nouns
                if (wf.Number == ET_Number.NUM_UNDEFINED &&
                    wf.Case == ET_Case.CASE_UNDEFINED)
                {
                    strb_ana.Append(",0");
                }
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_NULL)
            {
                strb_ana.Append("NULL");
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_NUM ||
                     wf.PartOfSpeech == ET_PartOfSpeech.POS_NUM_ADJ)
            {
                if (wf.PartOfSpeech == ET_PartOfSpeech.POS_NUM)
                {
                    strb_ana.Append("NUM");
                }
                else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_NUM_ADJ)
                {
                    strb_ana.Append("ANUM");
                }

                // Gender (POS_NUM can also have it: два vs. две)
                if (wf.Gender == ET_Gender.GENDER_F)
                {
                    strb_ana.Append(",f");
                }
                else if (wf.Gender == ET_Gender.GENDER_M)
                {
                    strb_ana.Append(",m");
                }
                else if (wf.Gender == ET_Gender.GENDER_N)
                {
                    strb_ana.Append(",n");
                }

                // Number (POS_NUM can also have it: один vs. одни)
                if (wf.Number == ET_Number.NUM_SG)
                {
                    strb_ana.Append(",sg");
                }
                else if (wf.Number == ET_Number.NUM_PL)
                {
                    strb_ana.Append(",pl");
                }

                // Case
                if (wf.Case == ET_Case.CASE_NOM)
                {
                    strb_ana.Append(",nom");
                }
                else if (wf.Case == ET_Case.CASE_ACC)
                {
                    strb_ana.Append(",acc");
                    // Animacy
                    if (wf.Animacy == ET_Animacy.ANIM_NO)
                    {
                        strb_ana.Append(",inan");
                    }
                    else if (wf.Animacy == ET_Animacy.ANIM_YES)
                    {
                        strb_ana.Append(",anim");
                    }
                }
                else if (wf.Case == ET_Case.CASE_GEN)
                {
                    strb_ana.Append(",gen");
                }
                else if (wf.Case == ET_Case.CASE_DAT)
                {
                    strb_ana.Append(",dat");
                }
                else if (wf.Case == ET_Case.CASE_INST)
                {
                    strb_ana.Append(",ins");
                }
                else if (wf.Case == ET_Case.CASE_PREP)
                {
                    strb_ana.Append(",loc");
                }
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_PARENTH)
            {
                strb_ana.Append("PARENTH");
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_PARTICLE)
            {
                strb_ana.Append("PART");
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_PREDIC)
            {
                strb_ana.Append("PRAEDIC");
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_PREP)
            {
                strb_ana.Append("PR");
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_PRONOUN)
            {
                strb_ana.Append("SPRO");

                // Person
                if (wf.Person == ET_Person.PERSON_1)
                {
                    strb_ana.Append(",1p");
                }
                else if (wf.Person == ET_Person.PERSON_2)
                {
                    strb_ana.Append(",2p");
                }
                else if (wf.Person == ET_Person.PERSON_3)
                {
                    strb_ana.Append(",3p");
                }

                // Animacy
                if (wf.Animacy == ET_Animacy.ANIM_NO)
                {
                    strb_ana.Append(",inan");
                }
                else if (wf.Animacy == ET_Animacy.ANIM_YES)
                {
                    strb_ana.Append(",anim");
                }

                // Gender
                if (wf.Gender == ET_Gender.GENDER_F)
                {
                    strb_ana.Append(",f");
                }
                else if (wf.Gender == ET_Gender.GENDER_M)
                {
                    strb_ana.Append(",m");
                }
                else if (wf.Gender == ET_Gender.GENDER_N)
                {
                    strb_ana.Append(",n");
                }
                // TODO: M-F, pluralia tantum

                // Number
                if (wf.Number == ET_Number.NUM_SG)
                {
                    strb_ana.Append(",sg");
                }
                else if (wf.Number == ET_Number.NUM_PL)
                {
                    strb_ana.Append(",pl");
                }

                // Case
                if (wf.Case == ET_Case.CASE_NOM)
                {
                    strb_ana.Append(",nom");
                }
                else if (wf.Case == ET_Case.CASE_ACC)
                {
                    strb_ana.Append(",acc");
                }
                else if (wf.Case == ET_Case.CASE_GEN)
                {
                    strb_ana.Append(",gen");
                }
                else if (wf.Case == ET_Case.CASE_DAT)
                {
                    strb_ana.Append(",dat");
                }
                else if (wf.Case == ET_Case.CASE_INST)
                {
                    strb_ana.Append(",ins");
                }
                else if (wf.Case == ET_Case.CASE_PREP)
                {
                    strb_ana.Append(",loc");
                }
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_PRONOUN_PREDIC)
            {
                strb_ana.Append("PRAEDICPRO");
            }

            else if (wf.PartOfSpeech == ET_PartOfSpeech.POS_VERB)
            {
                strb_ana.Append("V");

                // TODO: transitivity

                // Aspect
                if (wf.Aspect == ET_Aspect.ASPECT_IMPERFECTIVE)
                {
                    strb_ana.Append(",ipfv");
                }
                else if (wf.Aspect == ET_Aspect.ASPECT_PERFECTIVE)
                {
                    strb_ana.Append(",pfv");
                }

                // Subparadigm
                if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PRESENT_TENSE)
                {
                    strb_ana.Append(",indic");

                    // Reflexivity
                    if (wf.IsReflexive == ET_Reflexive.REFL_NO)
                    {
                        strb_ana.Append(",act");
                    }
                    else if (wf.IsReflexive == ET_Reflexive.REFL_YES)
                    {
                        strb_ana.Append(",med");
                    }

                    // Tense
                    if (wf.Aspect == ET_Aspect.ASPECT_IMPERFECTIVE)
                    {
                        strb_ana.Append(",praes");
                    }
                    else if (wf.Aspect == ET_Aspect.ASPECT_PERFECTIVE)
                    {
                        strb_ana.Append(",fut");
                    }
                    else if (wf.Aspect == ET_Aspect.ASPECT_UNDEFINED)
                    {
                        strb_ana.Append(",nonpast");
                    }

                    // Person
                    if (wf.Person == ET_Person.PERSON_1)
                    {
                        strb_ana.Append(",1p");
                    }
                    else if (wf.Person == ET_Person.PERSON_2)
                    {
                        strb_ana.Append(",2p");
                    }
                    else if (wf.Person == ET_Person.PERSON_3)
                    {
                        strb_ana.Append(",3p");
                    }

                    // Number
                    if (wf.Number == ET_Number.NUM_SG)
                    {
                        strb_ana.Append(",sg");
                    }
                    else if (wf.Number == ET_Number.NUM_PL)
                    {
                        strb_ana.Append(",pl");
                    }
                }
                else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PAST_TENSE)
                {
                    strb_ana.Append(",indic");

                    // Reflexivity
                    if (wf.IsReflexive == ET_Reflexive.REFL_NO)
                    {
                        strb_ana.Append(",act");
                    }
                    else if (wf.IsReflexive == ET_Reflexive.REFL_YES)
                    {
                        strb_ana.Append(",med");
                    }

                    // Tense
                    strb_ana.Append(",praet");

                    // Gender
                    if (wf.Gender == ET_Gender.GENDER_F)
                    {
                        strb_ana.Append(",f");
                    }
                    else if (wf.Gender == ET_Gender.GENDER_M)
                    {
                        strb_ana.Append(",m");
                    }
                    else if (wf.Gender == ET_Gender.GENDER_N)
                    {
                        strb_ana.Append(",n");
                    }

                    // Number
                    if (wf.Number == ET_Number.NUM_SG)
                    {
                        strb_ana.Append(",sg");
                    }
                    else if (wf.Number == ET_Number.NUM_PL)
                    {
                        strb_ana.Append(",pl");
                    }
                }
                else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PAST_ACT ||
                         wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PRES_ACT)
                {
                    strb_ana.Append(",partcp");

                    // Reflexivity
                    if (wf.IsReflexive == ET_Reflexive.REFL_NO)
                    {
                        strb_ana.Append(",act");
                    }
                    else if (wf.IsReflexive == ET_Reflexive.REFL_YES)
                    {
                        strb_ana.Append(",med");
                    }

                    // Tense
                    if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PAST_ACT)
                    {
                        strb_ana.Append(",praet");
                    }
                    else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PRES_ACT)
                    {
                        if (wf.Aspect == ET_Aspect.ASPECT_IMPERFECTIVE)
                        {
                            strb_ana.Append(",praes");
                        }
                        else if (wf.Aspect == ET_Aspect.ASPECT_PERFECTIVE)
                        {
                            strb_ana.Append(",fut");
                        }
                        else if (wf.Aspect == ET_Aspect.ASPECT_UNDEFINED)
                        {
                            strb_ana.Append(",nonpast");
                        }
                    }

                    // Gender
                    if (wf.Gender == ET_Gender.GENDER_F)
                    {
                        strb_ana.Append(",f");
                    }
                    else if (wf.Gender == ET_Gender.GENDER_M)
                    {
                        strb_ana.Append(",m");
                    }
                    else if (wf.Gender == ET_Gender.GENDER_N)
                    {
                        strb_ana.Append(",n");
                    }

                    // Number
                    if (wf.Number == ET_Number.NUM_SG)
                    {
                        strb_ana.Append(",sg");
                    }
                    else if (wf.Number == ET_Number.NUM_PL)
                    {
                        strb_ana.Append(",pl");
                    }

                    // Case
                    if (wf.Case == ET_Case.CASE_NOM)
                    {
                        strb_ana.Append(",nom");
                    }
                    else if (wf.Case == ET_Case.CASE_ACC)
                    {
                        strb_ana.Append(",acc");
                        // Animacy
                        if (wf.Animacy == ET_Animacy.ANIM_NO)
                        {
                            strb_ana.Append(",inan");
                        }
                        else if (wf.Animacy == ET_Animacy.ANIM_YES)
                        {
                            strb_ana.Append(",anim");
                        }
                    }
                    else if (wf.Case == ET_Case.CASE_GEN)
                    {
                        strb_ana.Append(",gen");
                    }
                    else if (wf.Case == ET_Case.CASE_DAT)
                    {
                        strb_ana.Append(",dat");
                    }
                    else if (wf.Case == ET_Case.CASE_INST)
                    {
                        strb_ana.Append(",ins");
                    }
                    else if (wf.Case == ET_Case.CASE_PREP)
                    {
                        strb_ana.Append(",loc");
                    }

                    strb_ana.Append(",plen");
                }

                else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PAST_PASS_LONG ||
                         wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PRES_PASS_LONG)
                {
                    strb_ana.Append(",partcp");

                    // Reflexivity
                    if (wf.IsReflexive == ET_Reflexive.REFL_NO)
                    {
                        strb_ana.Append(",pass");
                    }
                    else if (wf.IsReflexive == ET_Reflexive.REFL_YES)
                    {
                        strb_ana.Append(",pass,med");
                    }

                    // Tense
                    if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PAST_PASS_LONG)
                    {
                        strb_ana.Append(",praet");
                    }
                    else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PRES_PASS_LONG)
                    {
                        if (wf.Aspect == ET_Aspect.ASPECT_IMPERFECTIVE)
                        {
                            strb_ana.Append(",praes");
                        }
                        else if (wf.Aspect == ET_Aspect.ASPECT_PERFECTIVE)
                        {
                            strb_ana.Append(",fut");
                        }
                        else if (wf.Aspect == ET_Aspect.ASPECT_UNDEFINED)
                        {
                            strb_ana.Append(",nonpast");
                        }
                    }

                    // Gender
                    if (wf.Gender == ET_Gender.GENDER_F)
                    {
                        strb_ana.Append(",f");
                    }
                    else if (wf.Gender == ET_Gender.GENDER_M)
                    {
                        strb_ana.Append(",m");
                    }
                    else if (wf.Gender == ET_Gender.GENDER_N)
                    {
                        strb_ana.Append(",n");
                    }

                    // Number
                    if (wf.Number == ET_Number.NUM_SG)
                    {
                        strb_ana.Append(",sg");
                    }
                    else if (wf.Number == ET_Number.NUM_PL)
                    {
                        strb_ana.Append(",pl");
                    }

                    // Case
                    if (wf.Case == ET_Case.CASE_NOM)
                    {
                        strb_ana.Append(",nom");
                    }
                    else if (wf.Case == ET_Case.CASE_ACC)
                    {
                        strb_ana.Append(",acc");
                        // Animacy
                        if (wf.Animacy == ET_Animacy.ANIM_NO)
                        {
                            strb_ana.Append(",inan");
                        }
                        else if (wf.Animacy == ET_Animacy.ANIM_YES)
                        {
                            strb_ana.Append(",anim");
                        }
                    }
                    else if (wf.Case == ET_Case.CASE_GEN)
                    {
                        strb_ana.Append(",gen");
                    }
                    else if (wf.Case == ET_Case.CASE_DAT)
                    {
                        strb_ana.Append(",dat");
                    }
                    else if (wf.Case == ET_Case.CASE_INST)
                    {
                        strb_ana.Append(",ins");
                    }
                    else if (wf.Case == ET_Case.CASE_PREP)
                    {
                        strb_ana.Append(",loc");
                    }

                    strb_ana.Append(",plen");
                }

                else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PAST_PASS_SHORT ||
                         wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PRES_PASS_SHORT)
                {
                    strb_ana.Append(",partcp");

                    // Reflexivity
                    if (wf.IsReflexive == ET_Reflexive.REFL_NO)
                    {
                        strb_ana.Append(",pass");
                    }
                    else if (wf.IsReflexive == ET_Reflexive.REFL_YES)
                    {
                        strb_ana.Append(",pass,med");
                    }

                    // Tense
                    if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PAST_ACT)
                    {
                        strb_ana.Append(",praet");
                    }
                    else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PRES_ACT)
                    {
                        if (wf.Aspect == ET_Aspect.ASPECT_IMPERFECTIVE)
                        {
                            strb_ana.Append(",praes");
                        }
                        else if (wf.Aspect == ET_Aspect.ASPECT_PERFECTIVE)
                        {
                            strb_ana.Append(",fut");
                        }
                        else if (wf.Aspect == ET_Aspect.ASPECT_UNDEFINED)
                        {
                            strb_ana.Append(",nonpast");
                        }
                    }

                    // Gender
                    if (wf.Gender == ET_Gender.GENDER_F)
                    {
                        strb_ana.Append(",f");
                    }
                    else if (wf.Gender == ET_Gender.GENDER_M)
                    {
                        strb_ana.Append(",m");
                    }
                    else if (wf.Gender == ET_Gender.GENDER_N)
                    {
                        strb_ana.Append(",n");
                    }

                    // Number
                    if (wf.Number == ET_Number.NUM_SG)
                    {
                        strb_ana.Append(",sg");
                    }
                    else if (wf.Number == ET_Number.NUM_PL)
                    {
                        strb_ana.Append(",pl");
                    }

                    strb_ana.Append(",brev");
                }

                else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_ADVERBIAL_PAST ||
                         wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_ADVERBIAL_PRESENT)
                {
                    strb_ana.Append(",ger");

                    // Reflexivity
                    if (wf.IsReflexive == ET_Reflexive.REFL_NO)
                    {
                        strb_ana.Append(",act");
                    }
                    else if (wf.IsReflexive == ET_Reflexive.REFL_YES)
                    {
                        strb_ana.Append(",med");
                    }

                    // Tense
                    if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PAST_ACT)
                    {
                        strb_ana.Append(",praet");
                    }
                    else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_PART_PRES_ACT)
                    {
                        if (wf.Aspect == ET_Aspect.ASPECT_IMPERFECTIVE)
                        {
                            strb_ana.Append(",praes");
                        }
                        else if (wf.Aspect == ET_Aspect.ASPECT_PERFECTIVE)
                        {
                            strb_ana.Append(",fut");
                        }
                        else if (wf.Aspect == ET_Aspect.ASPECT_UNDEFINED)
                        {
                            strb_ana.Append(",nonpast");
                        }
                    }
                }

                else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_IMPERATIVE)
                {
                    strb_ana.Append(",imper");

                    // Reflexivity
                    if (wf.IsReflexive == ET_Reflexive.REFL_NO)
                    {
                        strb_ana.Append(",act");
                    }
                    else if (wf.IsReflexive == ET_Reflexive.REFL_YES)
                    {
                        strb_ana.Append(",med");
                    }

                    // Person
                    if (wf.Person == ET_Person.PERSON_1)
                    {
                        strb_ana.Append(",1p");
                    }
                    else if (wf.Person == ET_Person.PERSON_2)
                    {
                        strb_ana.Append(",2p");
                    }

                    // Number
                    if (wf.Number == ET_Number.NUM_SG)
                    {
                        strb_ana.Append(",sg");
                    }
                    else if (wf.Number == ET_Number.NUM_PL)
                    {
                        strb_ana.Append(",pl");
                    }
                }

                else if (wf.Subparadigm == ET_Subparadigm.SUBPARADIGM_INFINITIVE)
                {
                    strb_ana.Append(",inf");
                }
            }
            if (wf.LexemeId <= 0)
            {
                strb_ana.Append(",bastard");
            }

            strb_ana.Append("\"></ana>");
            return(strb_ana.ToString());
        }