예제 #1
0
파일: Search.cs 프로젝트: envis10n/Warrens
        private RelationalList FindVerbGroups(Index idx, RelationalList rellist)
        {
            int i, j, k;

            /* Read all senses */
            for (i = 0; i < idx.offs.Length; i++)
            {
                SynonymSet synset = new SynonymSet(idx.offs[i], pos, idx.wd, this, i, netData);

                /* Look for VERBGROUP ptr(s) for this sense.  If found,
                 *                 create group for senses, or add to existing group. */
                for (j = 0; j < synset.ptrs.Length; j++)
                {
                    Pointer p = synset.ptrs[j];
                    if (p.ptp.Mnemonic == "VERBGROUP")
                    {
                        /* Need to find sense number for ptr offset */
                        for (k = 0; k < idx.offs.Length; k++)
                        {
                            if (p.off == idx.offs[k])
                            {
                                rellist = AddRelatives(idx, i, k, rellist);
                                break;
                            }
                        }
                    }
                }
            }
            return(rellist);
        }
예제 #2
0
파일: Search.cs 프로젝트: envis10n/Warrens
 public void WordsFrom(SynonymSet s)
 {
     for (int j = 0; j < s.words.Length; j++)
     {
         Lexeme lx = s.words[j];
         lexemes[lx] = true;
     }
 }
예제 #3
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";
                }
            }
        }
예제 #4
0
    private static string BuildTermList(SynonymSet set, int maxTerms)
    {
        StringBuilder titleBuilder = new StringBuilder();
            for (int i = 0; i < set.Terms.Count && i < maxTerms; i++)
            {
                if (i != 0)
                {
                    titleBuilder.Append("; ");
                }

                titleBuilder.Append(set.Terms[i].Term);
            }

            if (set.Terms.Count > maxTerms)
            {
                titleBuilder.Append("...");
            }

            return titleBuilder.ToString();
    }
예제 #5
0
파일: Search.cs 프로젝트: envis10n/Warrens
        private void WNOverview()
        {
            Index idx;

            senses = new List <SynonymSet>();
            Indexes ixs = new Indexes(word, pos, netData);

            while ((idx = ixs.Next()) != null)
            {
                if (idx.offs == null)
                {
                    continue;
                }

                buf += "\n";

                /* Print synset for each sense.  If requested, precede
                 *                 synset with synset offset and/or lexical file information.*/
                for (int sens = 0; sens < idx.offs.Length; sens++)
                {
                    bool skipToEnd = false;
                    for (int j = 0; j < senses.Count; j++)
                    {
                        SynonymSet ss = senses[j];
                        if (ss.hereiam == idx.offs[sens])
                        {
                            skipToEnd = true;
                            break;
                        }
                    }
                    if (!skipToEnd)
                    {
                        SynonymSet cursyn = new SynonymSet(idx, sens, this, netData);

                        bool svdflag = WordNetOption.Opt("-g").flag;
                        WordNetOption.Opt("-g").flag = true;
                        bool svaflag = WordNetOption.Opt("-a").flag;
                        WordNetOption.Opt("-a").flag = WordNetOption.Opt("-A").flag;
                        bool svoflag = WordNetOption.Opt("-o").flag;
                        WordNetOption.Opt("-o").flag = WordNetOption.Opt("-O").flag;

                        cursyn.Str("" + (sens + 1) + ". ", "\n", 1, 0, 0, 0);

                        WordNetOption.Opt("-g").flag = svdflag;
                        WordNetOption.Opt("-a").flag = svaflag;
                        WordNetOption.Opt("-o").flag = svoflag;
                        WordsFrom(cursyn);
                        cursyn.frames.Clear(); // TDMS 03 Jul 2006 - frames get added in wordnet.cs after filtering
                        senses.Add(cursyn);
                    }
                }
                /* Print sense summary message */
                if (senses.Count > 0)
                {
                    buf += string.Format("\nThe {0} {1} has {2} sense{3}", pos.Key, idx.wd, senses.Count, senses.Count > 1 ? "s" : "");

                    taggedSenses = 0;
                    if (idx.tagsense_cnt > 0)
                    {
                        taggedSenses = idx.tagsense_cnt;
                        buf         += " (first " + idx.tagsense_cnt + " from tagged texts)\n";
                    }
                    else
                    {
                        buf += " (no senses from tagged texts)\n";
                    }
                }
            }
        }
예제 #6
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;
            }
        }