示例#1
0
		internal void tracePtrs(PointerType ptp, PartOfSpeech p, int depth)
		{
			tracePtrs(new SearchType(false, ptp), p, depth);
		}
示例#2
0
		/// <summary>
		/// Trace coordinate terms.
		/// </summary>
		/// <param name="ptp"></param>
		/// <param name="fpos"></param>
		/// <param name="depth"></param>
		internal void traceCoords(PointerType ptp, PartOfSpeech fpos, int depth)
		{
			for (int i = 0; i < ptrs.Length; i++)
			{
				Pointer pt = ptrs[i];
				/* WN2.0
								if (pt.ptp.mnemonic=="HYPERPTR" &&
									(pt.sce==0 ||
									 pt.sce==whichword))
				*/
				// WN2.1 if statement change - TDMS
				if ((pt.ptp.ident == HYPERPTR || pt.ptp.ident == INSTANCE) &&
					((pt.sce == 0) ||
					(pt.sce == whichword)))
				{
					if (!search.prflag)
					{
						strsns(sense + 1);
						search.prflag = true;
					}
					spaces("TRACEC", depth);
					SynSet cursyn = new SynSet(pt.off, pt.pos, this);
					search.wordsFrom(cursyn);
					cursyn.str("-> ", "\n", 1, 0, 0, 1);
					cursyn.tracePtrs(ptp, cursyn.pos, depth);
					// TDMS 6 Oct 2005 - build hierarchical results
					if (this.senses == null)
						this.senses = new SynSetList();
					cursyn.thisptr = pt;  // TDMS 17 Nov 2005 - add this pointer type
					this.senses.Add(cursyn);

					if (depth > 0)
					{
						depth = depthcheck(depth);
						cursyn.traceCoords(ptp, cursyn.pos, depth + 1);
						// TDMS 6 Oct 2005 - build hierarchical results
						// TODO: verify this
						if (this.senses == null)
							this.senses = new SynSetList();
						cursyn.thisptr = pt;  // TDMS 17 Nov 2005 - add this pointer type
						this.senses.Add(cursyn);
					}
				}
			}
		}
示例#3
0
        //As SizeF ' of Search
        public void useList(ArrayList w, string help, ref string tmpstr)
        {
            int    j        = 0;
            int    i        = 0;
            int    x        = 0;
            int    senses   = 0;
            int    ttexts   = 0;
            string wrdtype  = "";
            string srchword = "";
            string tmpword  = null;

            if (help != null & !string.IsNullOrEmpty(help))
            {
                //usePassage(help, tmpstr)
                //            tmpstr += help
            }

            // loop for noun, verb, adj, adv
            for (j = 0; j <= w.Count - 1; j++)
            {
                Search            se  = (Search)w[j];
                Wnlib.PointerType ptp = (Wnlib.PointerType)se.sch.ptp;

                if (string.IsNullOrEmpty(srchword) & !string.IsNullOrEmpty(se.word))
                {
                    srchword = se.word;
                }

                if (se.senses.Count == 0 & string.IsNullOrEmpty(se.buf))
                {
                    continue;
                }

                // this info will be used in the search summary
                if (senses == 0)
                {
                    senses  = se.senses.Count;
                    ttexts  = se.taggedSenses;
                    wrdtype = se.pos.name;
                }

                switch (se.sch.label)
                {
                case "Frequency":
                    ArrayList freqcats = new ArrayList();

                    freqcats.Add("extremely rare");
                    freqcats.Add("very rare");
                    freqcats.Add("rare");
                    freqcats.Add("uncommon");
                    freqcats.Add("common");
                    freqcats.Add("familiar");
                    freqcats.Add("very familiar");
                    freqcats.Add("extremely familiar");

                    string thisfreq = null;
                    int    cnt      = 0;
                    int    familiar = 0;
                    string wrd      = null;

                    cnt = (int)se.countSenses[0];
                    if (cnt == 0)
                    {
                        familiar = 0;
                    }
                    else if (cnt == 1)
                    {
                        familiar = 1;
                    }
                    else if (cnt == 2)
                    {
                        familiar = 2;
                    }
                    else if (cnt >= 3 & cnt <= 4)
                    {
                        familiar = 3;
                    }
                    else if (cnt >= 5 & cnt <= 8)
                    {
                        familiar = 4;
                    }
                    else if (cnt >= 9 & cnt <= 16)
                    {
                        familiar = 5;
                    }
                    else if (cnt >= 17 & cnt <= 32)
                    {
                        familiar = 6;
                    }
                    else if (cnt > 32)
                    {
                        familiar = 7;
                    }

                    switch (se.pos.name)
                    {
                    case "noun":
                        wrd = "a noun";

                        break;

                    case "adj":
                        wrd = "an adjective";

                        break;

                    case "verb":
                        wrd = "a verb";

                        break;

                    case "adverb":
                        wrd = "an adverb";

                        break;

                    default:
                        // should never get to here
                        wrd = "a " + se.pos.name;
                        break;
                    }

                    tmpstr = se.word + " used as " + wrd + " is " + freqcats[familiar] + " (polysemy count=" + cnt + ").";
                    return;


                    break;

                case "Overview":
                    string tmpname = se.pos.name;

                    if (tmpname == "adj")
                    {
                        tmpname = "adjective";
                        // looks better when the full word is presented
                    }
                    tmpstr += "<p class='Type'>" + Strings.UCase(se.sch.label + " of " + tmpname + " " + se.word) + "</p>";

                    Wnlib.SynSet syns = null;
                    string       wrds = null;

                    for (x = 0; x <= se.senses.Count - 1; x++)
                    {
                        tmpstr += "<font color='red'><b>" + x + 1 + ") </b></font> ";
                        //                        tmpstr += "<font color='blue'><b>"

                        syns = (Wnlib.SynSet)se.senses[x];
                        wrds = "";

                        // loop for each synonym in the definition
                        for (i = 0; i <= syns.words.Length - 1; i++)
                        {
                            if (i > 0)
                            {
                                wrds += ",";
                            }

                            tmpword = syns.words[i].word;

                            wrds += tmpword;

                            //If syns.words(i).uniq <> 0 Then
                            //    tmpstr += "</b><font color='red'><sup>" & syns.words(i).uniq
                            //    tmpstr += "</sup></font><b>"
                            //End If
                        }

                        //wrds = formatWordList(wrds)

                        //tmpstr += wrds

                        string tmpstr2 = null;

                        //tmpstr2 = syns.defn;
                        //tmpstr2 = linkDefinition(tmpstr2)
                        tmpstr += formatWrdDefn(wrds, syns);
                        //tmpstr += "</b><b>:</b></font> " & tmpstr2 & "<br />"
                    }


                    break;
                //Dim se As Search = CType(w(j), Search)
                //sw = se.word
                //usePassage(se.buf, tmpstr)
                //tmpstr.Text += se.buf;

                default:
                    Wnlib.SynSet ss = new Wnlib.SynSet();
                    ss.defn    = se.buf;
                    ss.hereiam = -1;
                    tmpstr     = decodeOther(ss);
                    break;
                    //tmpstr += se.buf
                    //tmpstr = Replace(tmpstr, "_", " ")
                    //tmpstr = Replace(tmpstr, vbLf, "<br />")
                }
            }

            // show the message at the bottom showing senses and tagged texts
            //        If senses = 0 Then
            //        tmpstr = "No results found for " & srchword & "."
            //        Else
            tmpstr += "<font color='green'>";
            tmpstr += "<br />" + Constants.vbCrLf + wrdtype + " " + srchword + " has ";
            if (senses > 0)
            {
                tmpstr += senses + " sense(s)";
            }
            else
            {
                tmpstr += "no senses ";
            }

            if (ttexts > 0)
            {
                tmpstr += " (first " + ttexts + " from tagged texts)";
            }
            tmpstr += "</font>";

            // make contents of quotes italicized
            italicizeQuotes(ref tmpstr);
            //        End If
        }
示例#4
0
		internal bool has(PointerType p)
		{
			for (int i = 0; i < ptrs.Length; i++)
				if (ptrs[i].ptp == p)
					return true;
			return false;
		}
示例#5
0
文件: util.cs 项目: cuiwanyun/KBQA
        public SynSet target; // cached version of off

        #endregion Fields

        #region Constructors

        internal Pointer(string s)
        {
            ptp=PointerType.of(s);
        }
示例#6
0
        public void useList(ArrayList w, string help, ref string tmpstr)
        {
            int    j        = 0;
            int    i        = 0;
            int    x        = 0;
            int    senses   = 0;
            int    ttexts   = 0;
            string wrdtype  = "";
            string srchword = "";
            string tmpword  = null;

            if (help != null & !string.IsNullOrEmpty(help))
            {
            }

            for (j = 0; j <= w.Count - 1; j++)
            {
                Search            se  = (Search)w[j];
                Wnlib.PointerType ptp = (Wnlib.PointerType)se.sch.ptp;

                if (string.IsNullOrEmpty(srchword) & !string.IsNullOrEmpty(se.word))
                {
                    srchword = se.word;
                }

                if (se.senses.Count == 0 & string.IsNullOrEmpty(se.buf))
                {
                    continue;
                }


                if (senses == 0)
                {
                    senses  = se.senses.Count;
                    ttexts  = se.taggedSenses;
                    wrdtype = se.pos.name;
                }

                switch (se.sch.label)
                {
                case "Frequency":
                    ArrayList freqcats = new ArrayList();

                    freqcats.Add("extremely rare");
                    freqcats.Add("very rare");
                    freqcats.Add("rare");
                    freqcats.Add("uncommon");
                    freqcats.Add("common");
                    freqcats.Add("familiar");
                    freqcats.Add("very familiar");
                    freqcats.Add("extremely familiar");

                    string thisfreq = null;
                    int    cnt      = 0;
                    int    familiar = 0;
                    string wrd      = null;

                    cnt = (int)se.countSenses[0];
                    if (cnt == 0)
                    {
                        familiar = 0;
                    }
                    else if (cnt == 1)
                    {
                        familiar = 1;
                    }
                    else if (cnt == 2)
                    {
                        familiar = 2;
                    }
                    else if (cnt >= 3 & cnt <= 4)
                    {
                        familiar = 3;
                    }
                    else if (cnt >= 5 & cnt <= 8)
                    {
                        familiar = 4;
                    }
                    else if (cnt >= 9 & cnt <= 16)
                    {
                        familiar = 5;
                    }
                    else if (cnt >= 17 & cnt <= 32)
                    {
                        familiar = 6;
                    }
                    else if (cnt > 32)
                    {
                        familiar = 7;
                    }

                    switch (se.pos.name)
                    {
                    case "noun":
                        wrd = "a noun";

                        break;

                    case "adj":
                        wrd = "an adjective";

                        break;

                    case "verb":
                        wrd = "a verb";

                        break;

                    case "adverb":
                        wrd = "an adverb";

                        break;

                    default:

                        wrd = "a " + se.pos.name;
                        break;
                    }

                    tmpstr = se.word + " used as " + wrd + " is " + freqcats[familiar] + " (polysemy count=" + cnt + ").";
                    return;


                    break;

                case "Overview":
                    string tmpname = se.pos.name;

                    if (tmpname == "adj")
                    {
                        tmpname = "adjective";
                        // looks better when the full word is presented
                    }
                    tmpstr += "<p class='Type'>" + Strings.UCase(se.sch.label + " of " + tmpname + " " + se.word) + "</p>";

                    Wnlib.SynSet syns = null;
                    string       wrds = null;

                    for (x = 0; x <= se.senses.Count - 1; x++)
                    {
                        tmpstr += "<font color='red'><b>" + x + 1 + ") </b></font> ";
                        //                        tmpstr += "<font color='blue'><b>"

                        syns = (Wnlib.SynSet)se.senses[x];
                        wrds = "";

                        // loop for each synonym in the definition
                        for (i = 0; i <= syns.words.Length - 1; i++)
                        {
                            if (i > 0)
                            {
                                wrds += ",";
                            }

                            tmpword = syns.words[i].word;

                            wrds += tmpword;
                        }



                        string tmpstr2 = null;

                        tmpstr2 = syns.defn;
                        //tmpstr2 = linkDefinition(tmpstr2)
                        tmpstr += formatWrdDefn(wrds, tmpstr2);
                        //tmpstr += "</b><b>:</b></font> " & tmpstr2 & "<br />"
                    }


                    break;

                default:
                    tmpstr = decodeOther(se.buf);
                    break;
                }
            }


            tmpstr += "<font color='green'>";
            tmpstr += "<br />" + Constants.vbCrLf + wrdtype + " " + srchword + " has ";
            if (senses > 0)
            {
                tmpstr += senses + " sense(s)";
            }
            else
            {
                tmpstr += "no senses ";
            }

            if (ttexts > 0)
            {
                tmpstr += " (first " + ttexts + " from tagged texts)";
            }
            tmpstr += "</font>";

            // make contents of quotes italicized
            italicizeQuotes(ref tmpstr);
            //        End If
        }
示例#7
0
 internal Pointer(string s)
 {
     ptp = PointerType.of(s);
 }
示例#8
0
		/// <summary>
		/// Trace meronyms.
		/// </summary>
		/// <param name="pbase"></param>
		/// <param name="fpos"></param>
		/// <param name="depth"></param>
		void traceInherit(PointerType pbase, PartOfSpeech fpos, int depth)
		{
			for (int i = 0; i < ptrs.Length; i++)
			{
				Pointer pt = ptrs[i];
				if (pt.ptp.ident == HYPERPTR && (pt.sce == 0 || pt.sce == whichword))
				{
					spaces("TRACEI", depth);
					SynSet cursyn = new SynSet(pt.off, pt.pos, this);
					search.wordsFrom(cursyn);
					cursyn.str("=> ", "\n", 1, 0, 0, 1);
					// TDMS 6 Oct 2005 - build hierarchical results
					// TODO: verify this
					if (this.senses == null)
						this.senses = new SynSetList();
					cursyn.thisptr = pt;  // TDMS 17 Nov 2005 - add this pointer type
					// TODO: This is adding senses incorrectly
					this.senses.Add(cursyn);

					cursyn.tracePtrs(pbase, PartOfSpeech.of("noun"), depth);
					cursyn.tracePtrs(pbase + 1, PartOfSpeech.of("noun"), depth);
					cursyn.tracePtrs(pbase + 2, PartOfSpeech.of("noun"), depth);
					if (depth > 0)
					{
						depth = depthcheck(depth);
						cursyn.traceInherit(pbase, cursyn.pos, depth + 1);
					}
				}
			}
			search.trunc();
		}
示例#9
0
 //public static SortedList searchtypes = new SortedList(); // SearchType -> SearchType
 public SearchType(bool r, string t)
     : this(r, PointerType.of(t))
 {
 }
示例#10
0
 public SearchType(bool r, PointerType p)
 {
     ptp = p;
     rec = r;
 }
示例#11
0
 public static bool operator <=(PointerType a, string s)
 {
     return(a.ident <= PointerType.of(s).ident);
 }
示例#12
0
        // TDMS 16 July 2006 - removed this method.
        // Method removed because if called externally
        // WNDBPart was not correctly constructed.
        // Calling is_defined(string searchstr,PartOfSpeech fpos)
        // correctly constructs WNDBPart.

        /*
         *              private static SearchSet is_defined(string word,string p)
         *              {
         *                      Console.WriteLine("is_defined string, string");
         *                      return is_defined(word,PartOfSpeech.of(p));
         *              }
         */

        /// <summary>
        /// Determines if a word is defined in the WordNet database and returns
        /// all possible searches of the word.
        /// </summary>
        /// <example> This sample displays a message stating whether the
        /// word "car" exists as the part of speech "noun".
        /// <code>
        /// Wnlib.WNCommon.path = "C:\Program Files\WordNet\2.1\dict\"
        /// Dim wrd As String = "car"
        /// Dim POS As String = "noun"
        /// Dim b As Boolean = Wnlib.WNDB.is_defined(wrd, Wnlib.PartOfSpeech.of(POS)).NonEmpty.ToString
        ///
        /// If b Then
        ///     MessageBox.Show("The word " &amp; wrd &amp; " exists as a " &amp; POS &amp; ".")
        /// Else
        ///     MessageBox.Show("The word " &amp; wrd &amp; " does not exist as a " &amp; POS &amp; ".")
        /// End If
        /// </code>
        /// </example>
        /// <param name="searchstr">The word to search for</param>
        /// <param name="fpos">Part of Speech (noun, verb, adjective, adverb)</param>
        /// <returns>A SearchSet or null if the word does not exist in the dictionary</returns>
        public static SearchSet is_defined(string searchstr, PartOfSpeech fpos)
        {
            Indexes ixs = new Indexes(searchstr, fpos);
            Index   index;
            int     i;
            int     CLASS    = 22;      /* - */
            int     LASTTYPE = CLASS;

            Search    s      = new Search(searchstr, fpos, new SearchType(false, "FREQ"), 0);
            SearchSet retval = new SearchSet();

            while ((index = ixs.next()) != null)
            {
                retval = retval + "SIMPTR" + "FREQ" + "SYNS" + "WNGREP" + "OVERVIEW";                 // added WNGREP - TDMS
                for (i = 0; i < index.ptruse.Length; i++)
                {
                    PointerType pt = index.ptruse[i];
                    //					retval=retval+pt;

                    // WN2.1 - TDMS
                    if (pt.ident <= LASTTYPE)
                    {
                        retval = retval + pt;
                    }
                    else if (pt.mnemonic == "INSTANCE")
                    {
                        retval = retval + "HYPERPTR";
                    }
                    else if (pt.mnemonic == "INSTANCES")
                    {
                        retval = retval + "HYPOPTR";
                    }

                    // WN2.1 - TDMS
                    if (pt.mnemonic == "SIMPTR")
                    {
                        retval = retval + "ANTPTR";
                    }

                    if (fpos.name == "noun")
                    {
                        /* set generic HOLONYM and/or MERONYM bit if necessary */
                        if (pt >= "ISMEMBERPTR" && pt <= "ISPARTPTR")
                        {
                            retval = retval + "HOLONYM";
                        }
                        else if (pt >= "HASMEMBERPTR" && pt <= "HASPARTPTR")
                        {
                            retval = retval + "MERONYM";
                        }
                    }
                    // WN2.1 - TDMS					else if (fpos.name=="adj" && pt.mnemonic=="SIMPTR")
                    //						retval=retval+"ANTPTR";
                }
                if (fpos.name == "noun")
                {
                    retval = retval + "RELATIVES";
                    if (index.HasHoloMero("HMERONYM", s))
                    {
                        retval = retval + "HMERONYM";
                    }
                    if (index.HasHoloMero("HHOLONYM", s))
                    {
                        retval = retval + "HHOLONYM";
                    }
                    if (retval["HYPERPTR"])
                    {
                        retval = retval + "COORDS";
                    }
                }
                else if (fpos.name == "verb")
                {
                    retval = retval + "RELATIVES" + "FRAMES";                     // added frames - TDMS
                }
            }
            return(retval);
        }
示例#13
0
 public bool this[string s] {
     get { return(b[PointerType.of(s).ident]); }
 }
示例#14
0
		/// <summary>
		/// Trace classification.
		/// </summary>
		/// <param name="ptp"></param>
		/// <param name="stp"></param>
		internal void traceclassif(PointerType ptp, SearchType stp) //,PartOfSpeech fpos)
		{
			int j;
			int idx = 0;
			//int svwnsnsflag;
			string head = "";
			int LASTTYPE = PointerType.of("CLASS").ident;
			int OVERVIEW = (LASTTYPE + 9);
			int MAXSEARCH = OVERVIEW;
			int CLASSIF_START = (MAXSEARCH + 1);
			int CLASSIF_CATEGORY = (CLASSIF_START);        /* ;c */
			int CLASSIF_USAGE = (CLASSIF_START + 1);    /* ;u */
			int CLASSIF_REGIONAL = (CLASSIF_START + 2);    /* ;r */
			int CLASSIF_END = CLASSIF_REGIONAL;
			int CLASS_START = (CLASSIF_END + 1);
			int CLASS_CATEGORY = (CLASS_START);          /* -c */
			int CLASS_USAGE = (CLASS_START + 1);      /* -u */
			int CLASS_REGIONAL = (CLASS_START + 2);      /* -r */
			int CLASS_END = CLASS_REGIONAL;
			//long prlist[1024];
			ArrayList prlist = new ArrayList();

			for (int i = 0; i < ptrs.Length; i++)
			{
				Pointer pt = ptrs[i];
				if (((pt.ptp.ident >= CLASSIF_START) &&
					(pt.ptp.ident <= CLASSIF_END) && stp.ptp.ident == PointerType.of("CLASSIFICATION").ident) ||

					((pt.ptp.ident >= CLASS_START) &&
					(pt.ptp.ident <= CLASS_END) && stp.ptp.ident == PointerType.of("CLASS").ident))
				{
					if (!search.prflag)
					{
						strsns(sense + 1);
						search.prflag = true;
					}

					SynSet cursyn = new SynSet(pt.off, pt.pos, this);
					// TDMS 6 Oct 2005 - build hierarchical results
					// TODO: verify this
					if (this.senses == null)
						this.senses = new SynSetList();
					cursyn.thisptr = pt;  // TDMS 17 Nov 2005 - add this pointer type
					this.senses.Add(cursyn);

					for (j = 0; j < idx; j++)
					{
						if (pt.off == Convert.ToInt16(prlist[j]))
						{
							break;
						}
					}

					if (j == idx)
					{
						prlist.Add(pt.off);
						spaces("TRACEP", 0);

						if (pt.ptp.ident == CLASSIF_CATEGORY)
							head = "TOPIC->("; // WN2.1 - TDMS
						//							head = "CATEGORY->(";
						else if (pt.ptp.ident == CLASSIF_USAGE)
							head = "USAGE->(";
						else if (pt.ptp.ident == CLASSIF_REGIONAL)
							head = "REGION->(";
						else if (pt.ptp.ident == CLASS_CATEGORY)
							head = "TOPIC_TERM->("; // WN2.1 - TDMS
						//							head = "CATEGORY_TERM->(";
						else if (pt.ptp.ident == CLASS_USAGE)
							head = "USAGE_TERM->(";
						else if (pt.ptp.ident == CLASS_REGIONAL)
							head = "REGION_TERM->(";

						head += pt.pos.name;
						head += ") ";

						//svwnsnsflag = wnsnsflag;
						//wnsnsflag = 1;

						//						printsynset(head, cursyn, "\n", DEFOFF, ALLWORDS,
						//							SKIP_ANTS, SKIP_MARKER);
						cursyn.str(head, "\n", 0, 0, 0, 0);

						//wnsnsflag = svwnsnsflag;
					}
				}
			}
		}
示例#15
0
文件: Index.cs 项目: hajarSA/d
 public bool HasHoloMero(string s, Search search)
 {
     return(HasHoloMero(PointerType.of(s), search));
 }
示例#16
0
		/// <summary>
		/// Trace nominalizations.
		/// </summary>
		/// <param name="ptp"></param>
		internal void tracenomins(PointerType ptp) //,PartOfSpeech fpos)
		{
			/*
						int j;
						int idx = 0;
						ArrayList prlist = new ArrayList();
			*/
			for (int i = 0; i < ptrs.Length; i++)
			{
				Pointer pt = ptrs[i];
				// TDMS 26/8/05 changed DERIVATION to NOMINALIZATIONS - verify this
				if (pt.ptp.ident == NOMINALIZATIONS && (pt.sce == 0 || pt.sce == whichword))
				{
					if (!search.prflag)
					{
						strsns(sense + 1);
						search.prflag = true;
					}
					spaces("TRACEP", 0);
					SynSet cursyn = new SynSet(pt.off, pt.pos, this);
					search.wordsFrom(cursyn);
					cursyn.str("RELATED TO-> ", "\n", 0, 0, 0, 0);
					// TDMS 6 Oct 2005 - build hierarchical results
					// TODO: verify this
					if (this.senses == null)
						this.senses = new SynSetList();
					cursyn.thisptr = pt;  // TDMS 17 Nov 2005 - add this pointer type
					this.senses.Add(cursyn);

					cursyn.tracePtrs(ptp, cursyn.pos, 0);
					/*
										for (j = 0; j < idx; j++) 
										{
											//#ifdef FOOP
											//						if (synptr->ptroff[i] == prlist[j]) 
											//						{
											//							break;
											//						}
											//#endif
										}

										if (j == idx) 
										{
											prlist.Add(pt.off);
											spaces("TRACEP",2);
											cursyn.str("=> ","\n",1,0,0,1);
										}
					*/
				}
			}
		}
示例#17
0
 internal void tracePtrs(PointerType ptp, PartOfSpeech p, int depth)
 {
     tracePtrs(new SearchType(false, ptp), p, depth);
 }
示例#18
0
		internal void partsAll(PointerType ptp)
		{
			int hasptr = 0;
			PointerType ptrbase = PointerType.of((ptp.ident == HMERONYM) ? "HASMEMBERPTR" : "ISMEMBERPTR");
			/* First, print out the MEMBER, STUFF, PART info for this synset */
			for (int i = 0; i < 3; i++)
				if (has(ptrbase + i))
				{
					tracePtrs(ptrbase + i, PartOfSpeech.of("noun"), i);
					hasptr++;
				}
			/* Print out MEMBER, STUFF, PART info for hypernyms on
	   HMERONYM search only */
			if (hasptr > 0 && ptp.ident == HMERONYM)
			{
				search.mark();

				traceInherit(ptrbase, PartOfSpeech.of("noun"), 1);
			}
		}
示例#19
0
        /// <summary>
        /// Traces pointer hierarchy.
        /// </summary>
        /// <param name="stp"></param>
        /// <param name="fpos"></param>
        /// <param name="depth"></param>
        internal void tracePtrs(SearchType stp, PartOfSpeech fpos, int depth)
        {
            int         i;
            SynSet      cursyn;
            PointerType ptp = stp.ptp;
            string      prefix;
            int         realptr;     // WN2.1

            for (i = 0; i < ptrs.Length; i++)
            {
                Pointer pt = ptrs[i];
                // following if statement is WN2.1 - TDMS
                if ((ptp.ident == HYPERPTR && (pt.ptp.ident == HYPERPTR ||
                                               pt.ptp.ident == INSTANCE)) ||
                    (ptp.ident == HYPOPTR && (pt.ptp.ident == HYPOPTR ||
                                              pt.ptp.ident == INSTANCES)) ||
                    ((pt.ptp == ptp) &&
                     ((pt.sce == 0) ||
                      (pt.sce == whichword))))
                {
                    realptr = pt.ptp.ident;                 /* WN2.1 deal with INSTANCE */
                    if (!search.prflag)                     // print sense number and synset
                    {
                        strsns(sense + 1);
                    }
                    search.prflag = true;
                    spaces("TRACEP", depth + (stp.rec ? 2 : 0));
                    //					switch (ptp.mnemonic)
                    // TDMS 11 JUL 2006 - changed switch to ident	switch (pt.ptp.mnemonic) // TDMS - WN2.1 MOD
                    switch (pt.ptp.ident)                     // TDMS 11 JUL 2006 - changed switch to ident
                    {
                    case PERTPTR:
                        if (fpos.name == "adv")                                 // TDMS "adverb")
                        {
                            prefix = "Derived from " + pt.pos.name + " ";
                        }
                        else
                        {
                            prefix = "Pertains to " + pt.pos.name + " ";
                        }
                        break;

                    case ANTPTR:                             // TDMS 26/8/05
                        if (fpos.name == "adj")              //TODO: which adjective will fall into the below?
                        {
                            prefix = "Antonym of ";
                        }
                        else
                        {
                            prefix = "";
                        }
                        break;

                    case PPLPTR:
                        prefix = "Participle of verb";
                        break;

                    case INSTANCE:
                        prefix = "INSTANCE OF=> ";
                        break;

                    case INSTANCES:
                        prefix = "HAS INSTANCE=> ";
                        break;

                    case HASMEMBERPTR:
                        prefix = "   HAS MEMBER: ";
                        break;

                    case HASSTUFFPTR:
                        prefix = "   HAS SUBSTANCE: ";
                        break;

                    case HASPARTPTR:
                        prefix = "   HAS PART:  ";
                        break;

                    case ISMEMBERPTR:
                        prefix = "   MEMBER OF:  ";
                        break;

                    case ISSTUFFPTR:                             // TDMS 26/8/05
                        prefix = "   SUBSTANCE OF: ";
                        break;

                    case ISPARTPTR:                             // TDMS 26/8/05
                        prefix = "   PART OF: ";
                        break;

                    default:
                        prefix = "=> ";
                        break;
                    }

                    /* Read synset pointed to */
                    cursyn = new SynSet(pt.off, pt.pos, this);
                    search.wordsFrom(cursyn);

                    // TDMS 6 Oct 2005 - build hierarchical results

                    if (this.senses == null)
                    {
                        this.senses = new SynSetList();
                    }
                    cursyn.thisptr = pt;                      // TDMS 17 Nov 2005 - add this pointer type
                    this.senses.Add(cursyn);

                    /* For Pertainyms and Participles pointing to a specific
                     * sense, indicate the sense then retrieve the synset
                     * pointed to and other info as determined by type.
                     * Otherwise, just print the synset pointed to. */
                    if ((ptp.ident == PERTPTR || ptp.ident == PPLPTR) &&
                        pt.dst != 0)
                    {
                        string tbuf = " (Sense " + cursyn.getsearchsense(pt.dst) + ")";
                        cursyn.str(prefix, tbuf, 0, pt.dst, 0, 1);
                        if (ptp.ident == PPLPTR)                         // adj pointing to verb
                        {
                            cursyn.str("     =>", "\n", 1, 0, 1, 1);
                            cursyn.tracePtrs(PointerType.of("HYPERPTR"), cursyn.pos, 0);
                        }
                        else if (fpos.name == "adv")                         // adverb pointing to adjective
                        {
                            cursyn.str("     =>", "\n", 0, 0, (pos.clss == "SATELLITE") ? 0 : 1, 1);
                            // cursyn.traceptrs(HYPERPTR,pos,0);
                        }
                        else                          // adjective pointing to noun
                        {
                            cursyn.str("     =>", "\n", 1, 0, 1, 1);
                            cursyn.tracePtrs(PointerType.of("HYPERPTR"), pos, 0);
                        }
                    }
                    else
                    {
                        cursyn.str(prefix, "\n", 1, 0, 1, 1);
                    }

                    /* For HOLONYMS and MERONYMS, keep track of last one
                     * printed in buffer so results can be truncated later. */
                    if (ptp.ident >= PointerType.of("ISMEMBERPTR").ident&&
                        ptp.ident <= PointerType.of("HASPARTPTR").ident)
                    {
                        search.mark();
                    }
                    if (depth > 0)
                    {
                        depth = cursyn.depthcheck(depth);
                        cursyn.tracePtrs(ptp, cursyn.pos, depth + 1);
                    }
                }
            }
        }
示例#20
0
文件: util.cs 项目: cuiwanyun/KBQA
 public SearchType(bool r,PointerType p)
 {
     ptp = p;
     rec = r;
 }
示例#21
0
        /// <summary>
        /// Trace classification.
        /// </summary>
        /// <param name="ptp"></param>
        /// <param name="stp"></param>
        internal void traceclassif(PointerType ptp, SearchType stp)         //,PartOfSpeech fpos)
        {
            int j;
            int idx = 0;
            //int svwnsnsflag;
            string head             = "";
            int    LASTTYPE         = PointerType.of("CLASS").ident;
            int    OVERVIEW         = (LASTTYPE + 9);
            int    MAXSEARCH        = OVERVIEW;
            int    CLASSIF_START    = (MAXSEARCH + 1);
            int    CLASSIF_CATEGORY = (CLASSIF_START);              /* ;c */
            int    CLASSIF_USAGE    = (CLASSIF_START + 1);          /* ;u */
            int    CLASSIF_REGIONAL = (CLASSIF_START + 2);          /* ;r */
            int    CLASSIF_END      = CLASSIF_REGIONAL;
            int    CLASS_START      = (CLASSIF_END + 1);
            int    CLASS_CATEGORY   = (CLASS_START);              /* -c */
            int    CLASS_USAGE      = (CLASS_START + 1);          /* -u */
            int    CLASS_REGIONAL   = (CLASS_START + 2);          /* -r */
            int    CLASS_END        = CLASS_REGIONAL;
            //long prlist[1024];
            ArrayList prlist = new ArrayList();

            for (int i = 0; i < ptrs.Length; i++)
            {
                Pointer pt = ptrs[i];
                if (((pt.ptp.ident >= CLASSIF_START) &&
                     (pt.ptp.ident <= CLASSIF_END) && stp.ptp.ident == PointerType.of("CLASSIFICATION").ident) ||

                    ((pt.ptp.ident >= CLASS_START) &&
                     (pt.ptp.ident <= CLASS_END) && stp.ptp.ident == PointerType.of("CLASS").ident))
                {
                    if (!search.prflag)
                    {
                        strsns(sense + 1);
                        search.prflag = true;
                    }

                    SynSet cursyn = new SynSet(pt.off, pt.pos, this);
                    // TDMS 6 Oct 2005 - build hierarchical results
                    // TODO: verify this
                    if (this.senses == null)
                    {
                        this.senses = new SynSetList();
                    }
                    cursyn.thisptr = pt;                      // TDMS 17 Nov 2005 - add this pointer type
                    this.senses.Add(cursyn);

                    for (j = 0; j < idx; j++)
                    {
                        if (pt.off == Convert.ToInt16(prlist[j]))
                        {
                            break;
                        }
                    }

                    if (j == idx)
                    {
                        prlist.Add(pt.off);
                        spaces("TRACEP", 0);

                        if (pt.ptp.ident == CLASSIF_CATEGORY)
                        {
                            head = "TOPIC->(";                             // WN2.1 - TDMS
                        }
                        //							head = "CATEGORY->(";
                        else if (pt.ptp.ident == CLASSIF_USAGE)
                        {
                            head = "USAGE->(";
                        }
                        else if (pt.ptp.ident == CLASSIF_REGIONAL)
                        {
                            head = "REGION->(";
                        }
                        else if (pt.ptp.ident == CLASS_CATEGORY)
                        {
                            head = "TOPIC_TERM->(";                             // WN2.1 - TDMS
                        }
                        //							head = "CATEGORY_TERM->(";
                        else if (pt.ptp.ident == CLASS_USAGE)
                        {
                            head = "USAGE_TERM->(";
                        }
                        else if (pt.ptp.ident == CLASS_REGIONAL)
                        {
                            head = "REGION_TERM->(";
                        }

                        head += pt.pos.name;
                        head += ") ";

                        //svwnsnsflag = wnsnsflag;
                        //wnsnsflag = 1;

                        //						printsynset(head, cursyn, "\n", DEFOFF, ALLWORDS,
                        //							SKIP_ANTS, SKIP_MARKER);
                        cursyn.str(head, "\n", 0, 0, 0, 0);

                        //wnsnsflag = svwnsnsflag;
                    }
                }
            }
        }
示例#22
0
		public bool HasHoloMero(PointerType p, Search search)
		{
			PointerType pbase;
			if (p.Mnemonic == "HMERONYM")
				pbase = PointerType.of("HASMEMBERPTR");
			else
				pbase = PointerType.of("ISMEMBERPTR");
			for (int i = 0; i < SynsetOffsets.Length; i++)
			{
				SynSet s = new SynSet(SynsetOffsets[i], PartOfSpeech.of("noun"), "", search, 0);
				if (s.has(pbase) || s.has(pbase + 1) || s.has(pbase + 2))
					return true;
			}
			return false;
		}
示例#23
0
        // From the WordNet Manual (http://wordnet.princeton.edu/man/wnsearch.3WN.html)
        // findtheinfo() is the primary search algorithm for use with database interface
        // applications. Search results are automatically formatted, and a pointer to the
        // text buffer is returned. All searches listed in WNHOME/include/wnconsts.h can be
        // done by findtheinfo().
        void findtheinfo()
        {
            SynSet  cursyn = null;
            Indexes ixs    = new Indexes(word, pos);
            Index   idx    = null;
            int     depth  = sch.rec ? 1 : 0;

            senses = new SynSetList();
            switch (sch.ptp.mnemonic)
            {
            case "OVERVIEW":
                WNOverview();
                break;

            case "FREQ":
                if (countSenses == null)
                {
                    countSenses = new ArrayList();
                }
                while ((idx = ixs.next()) != null)
                {
                    countSenses.Add(idx.offs.Length);
                    buf += "Sense " + countSenses.Count + ": " +
                           idx.offs.Length;
                }
                break;

            case "WNGREP":
                strings = WNDB.wngrep(word, pos);
                for (int wi = 0; wi < strings.Count; wi++)
                {
                    buf += (string)strings[wi] + "\n";
                }
                break;

            case "VERBGROUP":
                goto case "RELATIVES";

            case "RELATIVES":
                while ((idx = ixs.next()) != null)
                {
                    relatives(idx);
                }
                break;

            default:
                /* look at all spellings of word */
                while ((idx = ixs.next()) != null)
                {
                    /* Print extra sense msgs if looking at all senses */
                    if (whichsense == ALLSENSES)
                    {
                        buf += "\n";
                    }

                    /* Go through all of the searchword's senses in the
                     * database and perform the search requested. */
                    for (int sense = 0; sense < idx.offs.Length; sense++)
                    {
                        if (whichsense == ALLSENSES || whichsense == sense + 1)
                        {
                            prflag = false;

                            /* Determine if this synset has already been done
                             * with a different spelling. If so, skip it. */
                            for (int j = 0; j < senses.Count; j++)
                            {
                                SynSet ss = (SynSet)senses[j];
                                if (ss.hereiam == idx.offs[sense])
                                {
                                    goto skipit;
                                }
                            }
                            cursyn = new SynSet(idx, sense, this);

                            //TODO: moved senses.add(cursyn) from here to each case and handled it differently according to search - this handling needs to be verified to ensure the filter is not to limiting
                            switch (sch.ptp.mnemonic)
                            {
                            case "ANTPTR":
                                if (pos.name == "adj")
                                {
                                    cursyn.traceAdjAnt();
                                }
                                else
                                {
                                    cursyn.tracePtrs(sch.ptp, pos, depth);
                                }

                                if (cursyn.isDirty)
                                {                                                 // TDMS 25 Oct 2005 - restrict to relevant values
                                    cursyn.frames.Clear();                        // TDMS 03 Jul 2006 - frames get added in wordnet.cs after filtering
                                    senses.Add(cursyn);
                                }

                                /*
                                 *                                                                              if (cursyn.senses != null )
                                 *                                                                                      if (cursyn.senses.isDirty)
                                 *                                                                                      { // TDMS 25 Oct 2005 - restrict to relevant values
                                 *                                                                                              cursyn.frames.Clear(); // TDMS 03 Jul 2006 - frames get added in wordnet.cs after filtering
                                 *                                                                                              senses.Add(cursyn);
                                 *                                                                                      }
                                 */
                                // perform the senses restrictions based upon pos

                                /*
                                 *                                                                                      switch(pos.name) {
                                 *                                                                                              case "verb":
                                 *                                                                                                      if (cursyn.senses != null) // TDMS 25 Oct 2005 - restrict to relevant values
                                 *                                                                                                              senses.Add(cursyn);
                                 *                                                                                                      break;
                                 *
                                 *                                                                                              default:
                                 *                                                                                                      if (cursyn.senses != null && cursyn.sense != 0) // TDMS 25 Oct 2005 - restrict to relevant values
                                 *                                                                                                              senses.Add(cursyn);
                                 *                                                                                                      break;
                                 *                                                                                      }
                                 */
                                break;

                            case "COORDS":
                                //eg. search for 'car', select Noun -> 'Coordinate Terms'
                                cursyn.traceCoords(PointerType.of("HYPOPTR"), pos, depth);

                                if (cursyn.isDirty)                                                 // TDMS 25 Oct 2005 - restrict to relevant values
                                {
                                    senses.Add(cursyn);
                                }

                                /*
                                 *      if (cursyn.senses != null )
                                 *              if (cursyn.senses.isDirty) // TDMS 25 Oct 2005 - restrict to relevant values
                                 *                      senses.Add(cursyn);
                                 */
                                break;

                            case "FRAMES":
                                //eg. search for 'right', select Verb -> 'Sample Sentences'
                                cursyn.strFrame(true);
                                // TDMS 03 JUL 2006 fixed relevancy check										if (cursyn.sense != 0) // TDMS 25 Oct 2005 - restrict to relevant values
                                if (cursyn.isDirty)
                                {
                                    senses.Add(cursyn);
                                }

                                /*
                                 *      if (cursyn.frames.Count != 0) // TDMS 03 Jul 2006 - only add frame if there are any retrieved
                                 *              senses.Add(cursyn);
                                 */
                                break;

                            case "MERONYM":
                                //eg. search for 'car', select Noun -> 'Meronym'
                                senses.isDirty = false;
                                cursyn.tracePtrs(PointerType.of("HASMEMBERPTR"), pos, depth);
                                cursyn.tracePtrs(PointerType.of("HASSTUFFPTR"), pos, depth);
                                cursyn.tracePtrs(PointerType.of("HASPARTPTR"), pos, depth);

                                if (cursyn.isDirty)                                                 // TDMS 25 Oct 2005 - restrict to relevant values
                                {
                                    senses.Add(cursyn);
                                }

                                /*
                                 *      if (cursyn.senses != null )
                                 *              if (cursyn.senses.isDirty) // TDMS 25 Oct 2005 - restrict to relevant values
                                 *                      senses.Add(cursyn);
                                 */
                                break;

                            case "HOLONYM":
                                //eg. search for 'car', select Noun -> 'Holonyms'
                                cursyn.tracePtrs(PointerType.of("ISMEMBERPTR"), pos, depth);
                                cursyn.tracePtrs(PointerType.of("ISSTUFFPTR"), pos, depth);
                                cursyn.tracePtrs(PointerType.of("ISPARTPTR"), pos, depth);
                                //											if (cursyn.senses != null && cursyn.sense != 0) // TDMS 25 Oct 2005 - restrict to relevant values
                                //												senses.Add(cursyn);
                                if (cursyn.isDirty)                                                 // TDMS 25 Oct 2005 - restrict to relevant values
                                {
                                    senses.Add(cursyn);
                                }

                                /*
                                 *                                                                              if (cursyn.senses != null )
                                 *                                                                                      if (cursyn.senses.isDirty) // TDMS 25 Oct 2005 - restrict to relevant values
                                 *                                                                                              senses.Add(cursyn);
                                 */
                                break;

                            case "HMERONYM":
                                //eg. search for 'car', select Noun -> 'Meronyms Tree'
                                cursyn.partsAll(sch.ptp);
                                if (cursyn.isDirty)                                                 // TDMS 25 Oct 2005 - restrict to relevant values
                                {
                                    senses.Add(cursyn);
                                }
                                //                                            senses.Add(SearchTrack.ssParent);

                                /*
                                 * if (cursyn.senses != null )
                                 *      if (cursyn.senses.isDirty) // TDMS 25 Oct 2005 - restrict to relevant values
                                 *              senses.Add(cursyn);
                                 */
                                //											if (cursyn.sense != 0) // TDMS 25 Oct 2005 - restrict to relevant values
                                //												senses.Add(cursyn);
                                break;

                            case "HHOLONYM":
                                cursyn.partsAll(sch.ptp);
                                if (cursyn.isDirty)                                                 // TDMS 25 Oct 2005 - restrict to relevant values
                                {
                                    senses.Add(cursyn);
                                }

                                /*
                                 * if (cursyn.senses != null) // && cursyn.sense != 0) // TDMS 25 Oct 2005 - restrict to relevant values
                                 *      senses.Add(cursyn);
                                 */
                                break;

                            case "SEEALSOPTR":
                                cursyn.seealso();
                                if (cursyn.isDirty)                                                 // TDMS 25 Oct 2005 - restrict to relevant values
                                {
                                    senses.Add(cursyn);
                                }

                                /*
                                 * if (cursyn.sense != 0) // TDMS 25 Oct 2005 - restrict to relevant values
                                 *      senses.Add(cursyn);
                                 */
                                break;

                            case "SIMPTR":
                                goto case "HYPERPTR";

                            case "SYNS":
                                goto case "HYPERPTR";

                            case "HYPERPTR":
                                //eg. search for 'car', select Noun -> 'Synonyms/Hypernyms, ordered by estimated frequency'
                                wordsFrom(cursyn);
                                cursyn.strsns(sense + 1);
                                prflag = true;
                                cursyn.tracePtrs(sch.ptp, pos, depth);
                                if (pos.name == "adj")
                                {
                                    cursyn.tracePtrs(PointerType.of("PERTPTR"), pos, depth);
                                    cursyn.tracePtrs(PointerType.of("PPLPTR"), pos, depth);
                                }
                                else if (pos.name == "adv")
                                {
                                    cursyn.tracePtrs(PointerType.of("PERTPTR"), pos, depth);
                                }
                                if (pos.name == "verb")
                                {
                                    cursyn.strFrame(false);
                                }

                                if (cursyn.isDirty)                                                 // TDMS 25 Oct 2005 - restrict to relevant values
                                {
                                    senses.Add(cursyn);
                                }
                                //												senses.Add(cursyn);
                                break;

                            case "NOMINALIZATIONS":                                             // 26/8/05 - changed "DERIVATION" to "NOMINALIZATIONS" - this needs to be verified
                                // derivation - TDMS
                                cursyn.tracenomins(sch.ptp);
                                if (cursyn.isDirty)                                                 // TDMS 25 Oct 2005 - restrict to relevant values
                                {
                                    senses.Add(cursyn);
                                }

                                /*
                                 *                                                                              if (cursyn.sense != 0) // TDMS 25 Oct 2005 - restrict to relevant values
                                 *                                                                                      senses.Add(cursyn);
                                 */
                                break;

                            //WN3.0
                            case "PERTPTR":
                                cursyn.strsns(sense + 1);
                                prflag = true;
                                cursyn.tracePtrs(PointerType.of("PERTPTR"), pos, depth);
                                break;

                            case "CLASSIFICATION":
                                goto case "CLASS";

                            case "CLASS":
                                //eg. search for 'car', select Noun -> 'Domain Terms'
                                cursyn.traceclassif(sch.ptp, new SearchType(false, sch.ptp));
                                if (cursyn.isDirty)                                                 // TDMS 25 Oct 2005 - restrict to relevant values
                                {
                                    senses.Add(cursyn);
                                }

                                /*
                                 * if (cursyn.senses != null )
                                 *      if (cursyn.senses.isDirty) // TDMS 25 Oct 2005 - restrict to relevant values
                                 *              senses.Add(cursyn);
                                 */
                                break;

                            case "HYPOPTR":
                                //eg. search for 'car', select Noun -> 'Hyponyms'
                                cursyn.tracePtrs(sch.ptp, pos, depth);
                                if (cursyn.isDirty)                                                 // TDMS 25 Oct 2005 - restrict to relevant values
                                {
                                    senses.Add(cursyn);
                                }

                                /*
                                 *                                                                              if (cursyn.senses != null )
                                 *                                                                                      if (cursyn.senses.isDirty)
                                 *                                                                                      { // TDMS 25 Oct 2005 - restrict to relevant values
                                 *                                                                                              cursyn.frames.Clear(); // TDMS 03 Jul 2006 - frames get added in wordnet.cs after filtering
                                 *                                                                                              senses.Add(cursyn);
                                 *                                                                                      }
                                 */
                                break;

                            default:
                                cursyn.tracePtrs(sch.ptp, pos, depth);
                                if (cursyn.isDirty)                                                 // TDMS 25 Oct 2005 - restrict to relevant values
                                {
                                    senses.Add(cursyn);
                                }

                                /*
                                 *                                                                              if (cursyn.senses != null )
                                 *                                                                                      if (cursyn.senses.isDirty) // TDMS 25 Oct 2005 - restrict to relevant values
                                 *                                                                                              senses.Add(cursyn);
                                 */
                                break;
                            }
skipit:
                            ;
                        }
                    }
                }
                break;
            }
        }