GetPairs() public method

public GetPairs ( ) : List
return List
    public int MatchTags(SolarixGrammarEngineNET.SyntaxTreeNode token, SolarixGrammarEngineNET.GrammarEngine2 gren)
    {
        foreach (TagMatcher m in matchers)
        {
            if (m.Match(token, gren))
            {
                return(m.GetId());
            }
        }

        int    entry_id       = token.GetEntryID();
        int    pos_id         = gren.GetEntryClass(entry_id);
        string part_of_speech = gren.GetClassName(pos_id);
        string tags           = string.Join(" ", token.GetPairs().Select(z => string.Format("{0}={1}", gren.GetCoordName(z.CoordID), gren.GetCoordStateName(z.CoordID, z.StateID))).ToArray());
        string msg            = string.Format("Can not find tag for {0} {{ {1} {2} }}", token.GetWord(), part_of_speech, tags);

        throw new ApplicationException(msg);
    }
Beispiel #2
0
    public FootPrintToken(SolarixGrammarEngineNET.GrammarEngine2 gren, SolarixGrammarEngineNET.SyntaxTreeNode root)
    {
        Contract.Ensures(!string.IsNullOrEmpty(this.word));
        Contract.Ensures(this.node != null);
        Contract.Ensures(this.tags != null);

        this.word = root.GetWord();
        this.tags = new List <string>();
        this.node = root;

        this.tags.Add(root.GetWord().ToLower());

        if (root.GetWord().Equals("не", StringComparison.OrdinalIgnoreCase))
        {
            this.tags.Add("neg");
        }


        int part_of_speech = gren.GetEntryClass(root.GetEntryID());

        switch (part_of_speech)
        {
        case SolarixGrammarEngineNET.GrammarEngineAPI.CONJ_ru: this.tags.Add("conj"); break;     // союз

        case SolarixGrammarEngineNET.GrammarEngineAPI.PRONOUN_ru: this.tags.Add("pr"); break;    // местоимение Я

        case SolarixGrammarEngineNET.GrammarEngineAPI.NOUN_ru: this.tags.Add("n"); break;

        case SolarixGrammarEngineNET.GrammarEngineAPI.ADJ_ru: this.tags.Add("adj"); break;

        case SolarixGrammarEngineNET.GrammarEngineAPI.VERB_ru: this.tags.Add("v"); break;

        case SolarixGrammarEngineNET.GrammarEngineAPI.INFINITIVE_ru: this.tags.Add("v"); break;

        case SolarixGrammarEngineNET.GrammarEngineAPI.GERUND_2_ru: this.tags.AddRange("adv adv_v".Split(' ')); break;

        case SolarixGrammarEngineNET.GrammarEngineAPI.ADVERB_ru:
        {
            this.tags.Add("adv");
            if (StringExtender.InCI(word, "очень крайне наиболее наименее чрезвычайно почти".Split()))         // модификаторы наречий и прилагательных
            {
                this.tags.Add("a_modif");
            }

            string adv_cat = AdverbCategory.GetQuestionWordForAdverb(word);
            if (!string.IsNullOrEmpty(adv_cat))
            {
                this.tags.Add("adv_" + adv_cat);
            }

            break;
        }

        case SolarixGrammarEngineNET.GrammarEngineAPI.PREPOS_ru: this.tags.Add("p"); break;

        case SolarixGrammarEngineNET.GrammarEngineAPI.PRONOUN2_ru: this.tags.Add("pr"); break;

        default: this.tags.Add("x"); break;
        }

        foreach (var p in root.GetPairs())
        {
            if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.CASE_ru)
            {
                switch (p.StateID)
                {
                case SolarixGrammarEngineNET.GrammarEngineAPI.NOMINATIVE_CASE_ru: this.tags.Add("nom"); break;

                case SolarixGrammarEngineNET.GrammarEngineAPI.GENITIVE_CASE_ru: this.tags.Add("gen"); break;

                case SolarixGrammarEngineNET.GrammarEngineAPI.ACCUSATIVE_CASE_ru: this.tags.Add("acc"); break;

                case SolarixGrammarEngineNET.GrammarEngineAPI.DATIVE_CASE_ru: this.tags.Add("dat"); break;

                case SolarixGrammarEngineNET.GrammarEngineAPI.PREPOSITIVE_CASE_ru: this.tags.Add("prep"); break;

                case SolarixGrammarEngineNET.GrammarEngineAPI.PARTITIVE_CASE_ru: this.tags.Add("part"); break;

                case SolarixGrammarEngineNET.GrammarEngineAPI.LOCATIVE_CASE_ru: this.tags.Add("loc"); break;

                case SolarixGrammarEngineNET.GrammarEngineAPI.INSTRUMENTAL_CASE_ru: this.tags.Add("instr"); break;
                }
            }

            if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru)
            {
                switch (p.StateID)
                {
                case SolarixGrammarEngineNET.GrammarEngineAPI.SINGULAR_NUMBER_ru: this.tags.Add("sing"); break;

                case SolarixGrammarEngineNET.GrammarEngineAPI.PLURAL_NUMBER_ru: this.tags.Add("pl"); break;
                }
            }

            if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.TENSE_ru)
            {
                switch (p.StateID)
                {
                case SolarixGrammarEngineNET.GrammarEngineAPI.PAST_ru: this.tags.Add("past"); break;

                case SolarixGrammarEngineNET.GrammarEngineAPI.PRESENT_ru: this.tags.Add("pres"); break;

                case SolarixGrammarEngineNET.GrammarEngineAPI.FUTURE_ru: this.tags.Add("future"); break;
                }
            }

            if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.FORM_ru)
            {
                switch (p.StateID)
                {
                case SolarixGrammarEngineNET.GrammarEngineAPI.ANIMATIVE_FORM_ru: this.tags.Add("anim"); break;

                case SolarixGrammarEngineNET.GrammarEngineAPI.INANIMATIVE_FORM_ru: this.tags.Add("inanim"); break;
                }
            }

            if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.GENDER_ru)
            {
                switch (p.StateID)
                {
                case SolarixGrammarEngineNET.GrammarEngineAPI.MASCULINE_GENDER_ru: this.tags.Add("masc"); break;

                case SolarixGrammarEngineNET.GrammarEngineAPI.FEMININE_GENDER_ru: this.tags.Add("fem"); break;

                case SolarixGrammarEngineNET.GrammarEngineAPI.NEUTRAL_GENDER_ru: this.tags.Add("neut"); break;
                }
            }


            if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_ru)
            {
                switch (p.StateID)
                {
                case SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_1_ru: this.tags.Add("1"); break;

                case SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_2_ru: this.tags.Add("2"); break;

                case SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_3_ru: this.tags.Add("3"); break;
                }
            }


            if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.VERB_FORM_ru)
            {
                switch (p.StateID)
                {
                case SolarixGrammarEngineNET.GrammarEngineAPI.VB_INF_ru: this.tags.Add("vf1"); break;

                case SolarixGrammarEngineNET.GrammarEngineAPI.VB_ORDER_ru: this.tags.Add("imper"); break;
                }
            }
        }
    }
    public TokenTagsEnumerator(bool IsBoundaryToken, SolarixGrammarEngineNET.SyntaxTreeNode _token, SolarixGrammarEngineNET.GrammarEngine2 gren)
    {
        token = _token;
        list  = new List <TokenRecognizer>();


        int id_entry = token.GetEntryID();
        int id_class = gren.GetEntryClass(id_entry);

        // Подготовим список измерений и атрибутов.
        List <SolarixGrammarEngineNET.CoordPair> dims  = new List <SolarixGrammarEngineNET.CoordPair>();
        List <SolarixGrammarEngineNET.CoordPair> attrs = new List <SolarixGrammarEngineNET.CoordPair>();
        List <SolarixGrammarEngineNET.CoordPair> pairs = token.GetPairs();

        foreach (SolarixGrammarEngineNET.CoordPair p in pairs)
        {
            int t = gren.GetCoordType(id_class, p.CoordID);
            if (t == 0 || t == 2)
            {
                attrs.Add(p);
            }
            else if (t == 1)
            {
                dims.Add(p);
            }
        }

        // ------------------------------------------------------
        // Часть речи - самый общий случай
        // ------------------------------------------------------

        TokenRecognizer tr4 = new TokenRecognizer(id_class, -1);

        list.Add(tr4);

        List <TokenRecognizer> more_abstract = new List <TokenRecognizer>();

        more_abstract.Add(tr4);

        // ------------------------------------------------------
        // Часть речи и комбинации атрибутов
        // ------------------------------------------------------

        if (attrs.Count > 0)
        {
            List <TokenRecognizer> created_recognizers = new List <TokenRecognizer>();

            bool[] dim_bit = new bool[attrs.Count];
            for (int i = 0; i < attrs.Count; ++i)
            {
                dim_bit[i] = false;
            }

            while (true)
            {
                List <SolarixGrammarEngineNET.CoordPair> selected_pairs = new List <SolarixGrammarEngineNET.CoordPair>();
                for (int i = 0; i < attrs.Count; ++i)
                {
                    if (dim_bit[i])
                    {
                        selected_pairs.Add(attrs[i]);
                    }
                }

                if (selected_pairs.Count > 0)
                {
                    TokenRecognizer tr3 = new TokenRecognizer(id_class, -1, selected_pairs);
                    tr3.SetMoreAbstract(more_abstract);
                    list.Add(tr3);
                    created_recognizers.Add(tr3);
                }

                // Следующая комбинация
                int carry = 1;
                for (int ibit = dim_bit.Length - 1; ibit >= 0; --ibit)
                {
                    if (dim_bit[ibit] == false)
                    {
                        dim_bit[ibit] = true;
                        carry         = 0;
                        break;
                    }
                    else
                    {
                        dim_bit[ibit] = false;
                    }
                }

                if (carry == 1)
                {
                    break;
                }
            }

            more_abstract = created_recognizers;
        }


        // Лемма - только id словарной статьи. Это боее частный случай, чем указание части речи.
        TokenRecognizer tr2 = new TokenRecognizer(-1, id_entry);

        tr2.SetMoreAbstract(more_abstract);
        list.Add(tr2);
        more_abstract = new List <TokenRecognizer>();
        more_abstract.Add(tr2);


        if (dims.Count > 0)
        {
            List <TokenRecognizer> created_recognizers = new List <TokenRecognizer>();

            // -----------------------------------------------------------------------
            // Лемма (то есть id словарной статьи) и различные комбинации измерений.
            // -----------------------------------------------------------------------
            bool[] dim_bit = new bool[dims.Count];
            for (int i = 0; i < dims.Count; ++i)
            {
                dim_bit[i] = false;
            }

            while (true)
            {
                List <SolarixGrammarEngineNET.CoordPair> selected_pairs = new List <SolarixGrammarEngineNET.CoordPair>();
                for (int i = 0; i < dims.Count; ++i)
                {
                    if (dim_bit[i])
                    {
                        selected_pairs.Add(dims[i]);
                    }
                }

                if (selected_pairs.Count > 0)
                {
                    TokenRecognizer tr5 = new TokenRecognizer(-1, id_entry, selected_pairs);
                    tr5.SetMoreAbstract(more_abstract);
                    created_recognizers.Add(tr5);
                    list.Add(tr5);
                }

                // Следующая комбинация
                int carry = 1;
                for (int ibit = dim_bit.Length - 1; ibit >= 0; --ibit)
                {
                    if (dim_bit[ibit] == false)
                    {
                        dim_bit[ibit] = true;
                        carry         = 0;
                        break;
                    }
                    else
                    {
                        dim_bit[ibit] = false;
                    }
                }

                if (carry == 1)
                {
                    break;
                }
            }

            more_abstract = created_recognizers;
        }


        // ----------------------------------
        // Лексема - самый частный случай.
        // ----------------------------------

        /*
         * if( !IsBoundaryToken )
         * {
         * TokenRecognizer tr0 = new TokenRecognizer( token.GetWord() );
         * tr0.SetMoreAbstract( more_abstract );
         * list.Add( tr0 );
         * }
         */

        return;
    }
Beispiel #4
0
    static string ChangeVerbTo(SolarixGrammarEngineNET.GrammarEngine2 gren, SolarixGrammarEngineNET.SyntaxTreeNode node, string to_person)
    {
        List <int> coords = new List <int>();
        List <int> states = new List <int>();

        coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.TENSE_ru);
        states.Add(node.GetCoordState(SolarixGrammarEngineNET.GrammarEngineAPI.TENSE_ru));

        if (node.GetCoordState(SolarixGrammarEngineNET.GrammarEngineAPI.TENSE_ru) != SolarixGrammarEngineNET.GrammarEngineAPI.PAST_ru)
        {
            if (to_person == "1s")
            {
                coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru);
                states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.SINGULAR_NUMBER_ru);

                coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_ru);
                states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_1_ru);
            }
            else if (to_person == "2s")
            {
                coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru);
                states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.SINGULAR_NUMBER_ru);

                coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_ru);
                states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_2_ru);
            }
            else if (to_person == "3s")
            {
                coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru);
                states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.SINGULAR_NUMBER_ru);

                coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_ru);
                states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_2_ru);
            }
            else
            {
                throw new ArgumentException("to_person");
            }
        }


        foreach (var p in node.GetPairs())
        {
            if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.TENSE_ru ||
                p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.VERB_FORM_ru)
            {
                coords.Add(p.CoordID);
                states.Add(p.StateID);
            }
        }

        string        v2 = "";
        List <string> fx = SolarixGrammarEngineNET.GrammarEngine.sol_GenerateWordformsFX(gren.GetEngineHandle(), node.GetEntryID(), coords, states);

        if (fx != null && fx.Count > 0)
        {
            v2 = fx[0].ToLower();
        }
        else
        {
            v2 = null;
        }

        return(v2);
    }