예제 #1
0
파일: Search.cs 프로젝트: envis10n/Warrens
        private void DoRelList(Index idx, RelationalList rellist)
        {
            int        i;
            bool       flag;
            SynonymSet synptr;
            BitSet     outsenses = new BitSet(300);

            prflag = true;
            for (RelationalList 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 SynonymSet(idx.offs[i], pos, "", this, i, netData);
                        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 SynonymSet(idx.offs[i], pos, "", this, i, netData);
                    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";
                }
            }
        }
예제 #2
0
파일: Search.cs 프로젝트: envis10n/Warrens
        // 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().
        private void Findtheinfo()
        {
            Indexes ixs   = new Indexes(word, pos, netData);
            int     depth = sch.rec ? 1 : 0;

            senses = new List <SynonymSet>();
            Index idx;

            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":
                if (!(customgrep == null))
                {
                    strings = customgrep.Wngrep(word, pos);
                }
                else
                {
                    strings = netData.Wngrep(word, pos);
                }

                for (int wi = 0; wi < strings.Count; wi++)
                {
                    buf += (string)strings[wi] + "\n";
                }

                break;

            case "VERBGROUP":
            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. */
                            bool skipToEnd = false;
                            for (int j = 0; j < senses.Count; j++)
                            {
                                SynonymSet ss = senses[j];
                                if (ss.hereiam == idx.offs[sense])
                                {
                                    skipToEnd = true;
                                    break;
                                }
                            }

                            if (!skipToEnd)
                            {
                                SynonymSet cursyn = new SynonymSet(idx, sense, this, netData);

                                //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.Key == "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);
                                    }
                                    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);
                                    }
                                    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);
                                    }

                                    break;

                                case "MERONYM":
                                    //eg. search for 'car', select Noun -> 'Meronym'
                                    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);
                                    }

                                    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.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);
                                    }
                                    break;

                                case "HHOLONYM":
                                    cursyn.PartsAll(sch.ptp);
                                    if (cursyn.isDirty)         // 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);
                                    }
                                    break;

                                case "SIMPTR":
                                case "SYNS":
                                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.Key == "adj")
                                    {
                                        cursyn.TracePtrs(PointerType.Of("PERTPTR"), pos, depth);
                                        cursyn.TracePtrs(PointerType.Of("PPLPTR"), pos, depth);
                                    }
                                    else if (pos.Key == "adv")
                                    {
                                        cursyn.TracePtrs(PointerType.Of("PERTPTR"), pos, depth);
                                    }

                                    if (pos.Key == "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);
                                    }
                                    break;

                                //WN3.0
                                case "PERTPTR":
                                    cursyn.Strsns(sense + 1);
                                    prflag = true;
                                    cursyn.TracePtrs(PointerType.Of("PERTPTR"), pos, depth);
                                    break;

                                case "CLASSIFICATION":
                                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);
                                    }
                                    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);
                                    }
                                    break;

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