public static termExploreModel explore(string word, ILogBuilder response, termExploreMode mode, bool verbose = false) { termExploreModel model = new termExploreModel(word); termExploreModelSet outset = semanticLexiconManager.manager.constructor.loadTermModels(word, true); if (response != null) { response.consoleAltColorToggle(); response.AppendHorizontalLine(); response.AppendLine("Exploring term[" + model.inputForm + "] with [" + mode.ToString() + "]"); response.consoleAltColorToggle(); } if (Enumerable.Any(outset)) { model = Enumerable.First(outset); if (response != null) { response.AppendLine("term[" + model.inputForm + "]->lemma[" + model.lemma.inputForm + "]"); } } else { model.lemmaForm = ""; if (response != null) { response.AppendLine("term[" + word + "]->missingLemma[]"); } } var output = response; if (!verbose) { response = null; } switch (mode) { case termExploreMode.apertium_direct: model = getSynonymsWithApertium(model, response); break; case termExploreMode.apertium_wordnet_eng: model = getSynonymsWithWordnetViaApertium(model, response); break; case termExploreMode.apertium_wordnet_srb: model = getSynonymsWithSerbianWordNetAndApertium(model, response); break; case termExploreMode.corpus: model = getSynonymsByCorpus(model, response); break; case termExploreMode.hunspell_srb: model = getSynonymsWithHunspell(model, response); break; case termExploreMode.none: break; case termExploreMode.wordnet_srb: model = getSynonymsWithSerbianWordNet(model, response); break; case termExploreMode.unitex: model = exploreWithUnitex(word, response); break; } model.PostProcess(); if (output != null) { model.ToString(output, verbose, false); } return(model); }
/// <summary> /// Method: word -- translation --- synset ---- other synsets --- collecting all words --- translation --- word /// </summary> /// <param name="model">The model.</param> /// <param name="response">The response.</param> /// <param name="disableCodePrefixFilter">if set to <c>true</c> [disable code prefix filter].</param> /// <param name="disableCodeBranchFilter">if set to <c>true</c> [disable code branch filter].</param> /// <returns></returns> public static termExploreModel getSynonymsWithWordnetViaApertium(termExploreModel model, ILogBuilder response, bool disableCodePrefixFilter = false, bool disableCodeBranchFilter = false) { tokenGraph result = model.graph; result = languageManagerApertium.manager.queryForGraph(model.lemma.inputForm, apertiumDictQueryScope.exact); model.translations.AddRange(result.getAllLeafs().getNames()); if (response != null) { response.consoleAltColorToggle(); string rst = result.ToStringTreeview(); response.Append(rst); response.consoleAltColorToggle(); } languageManagerWordnet.manager.queryWithGraph(result, response, WordnetSource.english, WordnetQueryType.getSymsetCodesByWord); if (response != null) { response.consoleAltColorToggle(); string st = result.ToStringTreeview(); response.Append(st); response.consoleAltColorToggle(); } model.wordnetSecondarySymsets.AddRange(result.getAllLeafs().getDeepest().getNames()); if (!disableCodePrefixFilter) { string codeStart = model.lemma.gramSet.getPosType().GetWordNetCodeStart().ToString(); Regex codeCriteria = new Regex("^" + codeStart + ""); var badCodes = result.getAllLeafs(codeCriteria, true); if (response != null) { response.AppendHorizontalLine(); response.AppendLine("Reducing to proper codes [" + codeStart + "]->filtered-out[" + badCodes.Count() + "]"); } badCodes.removeFromParent(); if (response != null) { response.consoleAltColorToggle(); string rst = result.ToStringTreeview(); response.Append(rst); response.consoleAltColorToggle(); } } model.wordnetPrimarySymsets.AddRange(result.getAllLeafs().getDeepest().getNames()); languageManagerWordnet.manager.queryWithGraph(result, response, WordnetSource.english, WordnetQueryType.getWordsBySymsetCode); model.translationRelated.AddRange(result.getAllLeafs().getDeepest().getNames()); if (response != null) { response.AppendHorizontalLine(); response.AppendLine("Getting English words by symsetcodes via WordNet"); response.consoleAltColorToggle(); string rst = result.ToStringTreeview(); response.Append(rst); response.consoleAltColorToggle(); } languageManagerApertium.manager.queryByGraphNode(result, apertiumDictQueryScope.exact, apertiumDictNeedleSide.translated); model.wordnetSynonyms.AddRange(result.getAllLeafs().getDeepest().getNames()); if (response != null) { response.AppendHorizontalLine(); response.AppendLine("Translating back to Serbian via Apertium"); response.consoleAltColorToggle(); string rst = result.ToStringTreeview(); response.Append(rst); response.consoleAltColorToggle(); } if (!disableCodeBranchFilter) // <------ removes the symset nodes that contain none of first-level translation words { var codeLevel = result.getAllChildren().getOnLevel(3); List <IObjectWithPathAndChildren> toTakeOut = new List <IObjectWithPathAndChildren>(); foreach (var clb in codeLevel) { foreach (var clb_c in clb) { bool takeOut = true; foreach (var clb_cc in clb_c) { if (clb_cc.name == model.lemma.inputForm) { takeOut = false; break; } } if (takeOut) { if (response != null) { response.AppendLine("-- take out: " + clb.path); } toTakeOut.Add(clb); break; } } } toTakeOut.removeFromParent(); int wps = Enumerable.Count(model.wordnetSecondarySymsets); int tr = Enumerable.Count(model.translationRelated); int ws = Enumerable.Count(model.wordnetSynonyms); if (response != null) { response.AppendLine("----- Branch-node filter ----"); response.AppendLine("Symsets: " + wps); response.AppendLine("Translations: " + tr); response.AppendLine("Terms: " + ws); response.consoleAltColorToggle(); string rst = result.ToStringTreeview(); response.Append(rst); response.consoleAltColorToggle(); } model.wordnetPrimarySymsets = result.getAllChildren().getOnLevel(3).getNames(true); model.translations = result.getAllChildren().getOnLevel(4).getNames(true); model.synonyms = result.getAllChildren().getOnLevel(5).getNames(true); wps = wps - Enumerable.Count(model.wordnetPrimarySymsets); tr = tr - Enumerable.Count(model.translations); ws = ws - Enumerable.Count(model.synonyms); if (response != null) { //response.AppendLine("----- Branch-node filter ----"); response.AppendLine("Reduction of Symsets: " + wps); response.AppendLine("Reduction of Translations: " + tr); response.AppendLine("Reduction of Terms: " + ws); response.consoleAltColorToggle(); string rst = result.ToStringTreeview(); response.Append(rst); response.consoleAltColorToggle(); } } /* * String rgex_pat = "^([\\w]*\\\\[\\w]*\\\\[\\w]*\\\\[\\w]*\\\\{0}$)"; * * Regex rgex = new Regex(String.Format(rgex_pat, model.lemma.inputForm)); * * var onlyWithLemma = result.getAllLeafs().getFilterOut(rgex); */ //languageManagerApertium.manager.queryByGraphNode(result, apertiumDictQueryScope.exact, apertiumDictNeedleSide.english); model.graph = result; return(model); }
/// <summary> /// Describes the sample group to <c>output</c> /// </summary> /// <param name="output">The output object</param> public void describe(ILogBuilder output = null) { if (output == null) { return; } //output.log(); int tl = output.tabLevel; output.rootTabLevel(); // output.AppendHeading("SampleGroup description", 1); output.open("desc", name, ""); // output.AppendHeading(name, 2); // output.AppendHorizontalLine(); int ci = 1; foreach (sampleGroupItem item in this) { item.parent = this; output.open("group", item.groupTitle, item.groupDescription); //output.AppendHeading(, 3); // output.AppendPair("Description", ); output.AppendPair("ID", ci); output.AppendPair("Tag", item.groupTag); if (item.groupSizeLimit == -1) { output.AppendPair("Size (ratio)", item.weight + " / " + totalWeight.ToString()); } else { output.AppendPair("Size (limit)", item.groupSizeLimit); } output.AppendPair("Count", item.count); output.AppendPair("Border", item.groupBorder); if (item.isClosed) { output.AppendLine("The group is closed for new members"); } else { output.AppendLine("The group may receive new members"); } ci++; output.close(); } output.AppendHorizontalLine(); output.open("info", "Info", ""); output.AppendPair("Counted collection", countedCollectionName); output.AppendPair("Items with group tag/s", countHasGroup); output.AppendPair("Items without group tag", countNoGroup); output.close(); output.log("-- end"); output.close(); output.tabLevel = tl; }