示例#1
0
        public bool Match(SolarixGrammarEngineNET.SyntaxTreeNode proj, int iver, SolarixGrammarEngineNET.GrammarEngine2 gren)
        {
            if (lexeme != null)
            {
                return(proj.GetWord().Equals(lexeme, StringComparison.InvariantCultureIgnoreCase));
            }

            if (id_lemma != null)
            {
                int ekey = proj.GetVersionEntryID(iver);
                if (id_lemma.Contains(ekey))
                {
                    return(true);
                }

                return(false);
            }

            if (pos != null)
            {
                bool pos_matched = false;

                int ekey = proj.GetVersionEntryID(iver);
                if (ekey != -1)
                {
                    int id_class = gren.GetEntryClass(ekey);
                    pos_matched = pos.Contains(id_class);
                }

                if (!pos_matched)
                {
                    return(false);
                }
            }

            if (pairs != null)
            {
                bool contains_all_required_pairs = true;
                foreach (SolarixGrammarEngineNET.CoordPair p in pairs)
                {
                    if (!proj.VersionContains(iver, p))
                    {
                        contains_all_required_pairs = false;
                        break;
                    }
                }

                if (!contains_all_required_pairs)
                {
                    return(false);
                }
            }

            return(true);
        }
示例#2
0
        public int MatchTags(SolarixGrammarEngineNET.SyntaxTreeNode proj, int iproj, SolarixGrammarEngineNET.GrammarEngine2 gren)
        {
            foreach (TagMatcher m in matchers)
            {
                if (m.Match(proj, iproj, gren))
                {
                    // ---~~~~~ DEBUG ~~~---
#if DEBUG
                    string matcher = m.ToString();
                    string form    = "";

                    int npair = SolarixGrammarEngineNET.GrammarEngine.sol_GetNodeVerPairsCount(proj.hNode, iproj);
                    for (int j = 0; j < npair; ++j)
                    {
                        int id_coord = SolarixGrammarEngineNET.GrammarEngine.sol_GetNodeVerPairCoord(proj.hNode, iproj, j);
                        int id_state = SolarixGrammarEngineNET.GrammarEngine.sol_GetNodeVerPairState(proj.hNode, iproj, j);

                        string coord_name = gren.GetCoordName(id_coord);

                        string state_name = null;
                        if (gren.CountCoordStates(id_coord) == 0)
                        {
                            state_name = id_state.ToString();
                        }
                        else
                        {
                            state_name = gren.GetCoordStateName(id_coord, id_state);
                        }

                        form += string.Format(" {0}:{1}", coord_name, state_name);
                    }
#endif
                    // ---~~~~~ ..... ~~~---

                    return(m.GetId());
                }
            }

            return(-1);
        }