Ejemplo n.º 1
0
        void doRelList(Index idx, RelList rellist)
        {
            int    i;
            bool   flag;
            SynSet synptr;
            BitSet outsenses = new BitSet(300);

            prflag = true;
            for (RelList rel = rellist; rel != null; rel = rel.next)
            {
                flag = false;
                for (i = 0; i < idx.offs.Length; i++)
                {
                    if (rel.senses[i] && !outsenses[i])
                    {
                        flag   = true;
                        synptr = new SynSet(idx.offs[i], pos, "", this, i);
                        synptr.strsns(i + 1);
                        synptr.tracePtrs(PointerType.of("HYPERPTR"), pos, 0);
                        synptr.frames.Clear(); // TDMS 03 Jul 2006 - frames get added in wordnet.cs after filtering
                        // TDMS 11 Oct 2005 - build hierarchical results
                        senses.Add(synptr);
                        outsenses[i] = true;
                    }
                }
                if (flag)
                {
                    buf += "--------------\n";
                }
            }
            for (i = 0; i < idx.offs.Length; i++)
            {
                if (!outsenses[i])
                {
                    synptr = new SynSet(idx.offs[i], pos, "", this, i);
                    synptr.strsns(i + 1);
                    synptr.tracePtrs(PointerType.of("HYPERPTR"), pos, 0);
                    synptr.frames.Clear(); // TDMS 03 Jul 2006 - frames get added in wordnet.cs after filtering
                    // TDMS 11 Oct 2005 - build hierarchical results
                    senses.Add(synptr);
                    buf += "---------------\n";
                }
            }
        }
Ejemplo n.º 2
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;

                            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;
            }
        }