public void addSynonymsAndConceptLinks(termExploreModel termModel, bool saveModel = false) { // <----------- ADDING SYNONYMS ----------- > var lemmas = manager.getLemma(termModel.lemmaForm); var lemmasyns = manager.getLemmas(termModel.synonyms); builderForLog linkLog = new builderForLog(); linkLog.open("Creating synonym-2-lemma links"); termModel.links_synonym = 0; foreach (ITermLemma lemma in lemmas) { foreach (ITermLemma lemsyn in lemmasyns) { bool added = false; if (!lemma.relatedTo.Contains(lemsyn)) { if (!lemma.relatedFrom.Contains(lemsyn)) { lemma.relatedTo.Add(lemsyn); added = true; } } if (added) { termModel.links_synonym++; linkLog.AppendLine("[" + termModel.links_synonym.ToString("D5") + "] " + lemma.name + " -> " + lemsyn.name); } else { linkLog.AppendLine("[Link exists] " + lemma.name + " -> " + lemsyn.name); } } } linkLog.close(); linkLog.open("Creating concept 2 lemma links"); // <----------- ADDING SYNSETS List <Concept> concepts = new List <Concept>(); Concept conHead = null; termModel.links_lemmaConcept = 0; foreach (string code in termModel.wordnetPrimarySymsets) { if (code.isCleanWord()) { aceLog.log("wrong symset code -- [" + code + "] -- ignored!"); continue; } Concept con = manager.getConcept(code, true, "WordNet Code"); bool added = false; foreach (TermLemma lemma in lemmas) { if (!con.lemmas.Contains(lemma)) { con.lemmas.Add(lemma); added = true; } if (added) { termModel.links_lemmaConcept++; linkLog.AppendLine("[" + termModel.links_lemmaConcept.ToString("D5") + "] " + con.name + " -> " + lemma.name); } else { linkLog.AppendLine("[Link exists] " + con.name + " -> " + lemma.name); } } concepts.Add(con); conHead = con; } linkLog.close(); linkLog.open("Creating concept 2 concept links"); // <--------------------------- linking SYNSET concepts termModel.links_conceptConcept = 0; foreach (Concept con in concepts) { foreach (Concept con2 in concepts) { bool added = false; if (!con2.relatedTo.Contains(con)) { if (!con2.relatedFrom.Contains(con)) { var sharedLemmas = con2.lemmas.Where(x => con.lemmas.Contains(x)); if (sharedLemmas.Count() > 0) { con2.relatedTo.Add(con); added = true; } } } if (added) { termModel.links_conceptConcept++; linkLog.AppendLine("[" + termModel.links_conceptConcept.ToString("D5") + "] " + con2.name + " -> " + con.name); } else { linkLog.AppendLine("[Link exists] " + con2.name + " -> " + con.name); } } } linkLog.close(); manager.lexiconContext.SaveChanges(); string pth = projectFolderStructure[lexiconConstructorProjectFolder.links].pathFor(termModel.filename(".txt")); linkLog.ToString().saveStringToFile(pth, getWritableFileMode.overwrite); if (saveModel) { saveTermModel(termModel); } }
/// <summary> /// The stage two exploration /// </summary> /// <param name="lemma">The lemma.</param> /// <param name="response">The response.</param> /// <param name="savemodel">if set to <c>true</c> [savemodel].</param> /// <param name="debug">if set to <c>true</c> [debug].</param> /// <param name="verbose">if set to <c>true</c> [verbose].</param> /// <returns></returns> public static termExploreModelSet exploreStageTwo(string lemma, ILogBuilder response, bool savemodel, bool debug, bool verbose, lexiconTaskBase task = null) { lexiconConstructor constructor = semanticLexiconManager.manager.constructor; termExploreModelSet outset = semanticLexiconManager.manager.constructor.loadTermModels(lemma, true); if (!Enumerable.Any(outset)) { outset.missingLemmas.Add(lemma); return(outset); } foreach (termExploreModel mod in outset) { builderForLog logout = new builderForLog(); if (verbose) { aceLog.consoleControl.setAsOutput(logout, "stage2"); } termExploreModel model = getSynonymsWithApertium(mod, logout); string pt = model.lemma.gramSet.getPosType().ToString(); if (savemodel) { // model.graph.saveDescription(constructor.projectFolderStructure[lexiconConstructorProjectFolder.logs].path, pt + "_related"); } model = getSynonymsWithWordnetViaApertium(model, logout, true, false); if (savemodel) { model.graph.saveDescription(constructor.projectFolderStructure[lexiconConstructorProjectFolder.logs].path, pt + "_concepts"); // model.graph.savePaths(constructor.projectFolderStructure[lexiconConstructorProjectFolder.logs].path, pt + "_concepts"); } model.PostProcess(); if (debug) { model.ToString(logout, true, true); string fn = model.lemma.inputForm + "_" + pt + "_log.md"; logout.ToString(false).saveStringToFile(constructor.projectFolderStructure[lexiconConstructorProjectFolder.logs].pathFor(fn), getWritableFileMode.overwrite); } if (verbose) { aceLog.consoleControl.removeFromOutput(logout); } if (savemodel) { if (task != null) { model.lastModifiedByStage = task.taskTitle; } else { model.lastModifiedByStage = "stageTwo-exploreProcedure"; } if (!model.wasExploreFailed) { constructor.saveTermModel(model); } else { outset.failedModels.Add(model); } } } return(outset); }