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); }
public void WordsFrom(SynonymSet s) { for (int j = 0; j < s.words.Length; j++) { Lexeme lx = s.words[j]; lexemes[lx] = true; } }
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"; } } }
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(); }
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"; } } } }
// 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; } }