/// <summary> /// Makes a subset of input dataset, containing only documents matching assigned IDS /// </summary> /// <param name="input">The input.</param> /// <param name="assignedIDs">The assigned i ds.</param> /// <param name="inverse">if set to <c>true</c> if will keep only given assigned IDS</param> public void FilterSpaceModel(List <String> assignedIDs, ILogBuilder log, Boolean applyToUnknownCategory = false) { foreach (KeyValuePair <string, List <string> > pair in LabelToDocumentLinks.GetAllRelationShipByName()) { List <SpaceDocumentModel> toRemoveDocuments = new List <SpaceDocumentModel>(); List <SpaceDocumentModel> toScanDocuments = new List <SpaceDocumentModel>(); Boolean doScan = true; if (pair.Key == SpaceLabel.UNKNOWN) { doScan = applyToUnknownCategory; } if (doScan) { toScanDocuments = LabelToDocumentLinks.GetAllLinkedB(pair.Key); foreach (var vec in toScanDocuments) { if (!assignedIDs.Contains(vec.name)) { toRemoveDocuments.Add(vec); } } foreach (var vec in toRemoveDocuments) { documents.Remove(vec); LabelToDocumentLinks.Remove(vec); } Double removal = toRemoveDocuments.Count.GetRatio(toScanDocuments.Count); log.log("Vector count of [" + pair.Key + "] reduced to [" + removal.ToString("P2") + "] by document selection list"); } } }
public SpaceModel Clone() { SpaceModel output = new SpaceModel(); output.terms = terms.Clone(); output.terms_known_label = terms_known_label.Clone(); output.terms_unknown_label = terms_unknown_label.Clone(); output.documents = documents.Clone <SpaceDocumentModel>(false); output.categories = categories.Clone <SpaceCategoryModel>(false); output.topics = topics.CloneTerm <SpaceTopic>(); output.labels = labels.CloneTerm <SpaceLabel>(); foreach (var label in labels) { var linked = LabelToDocumentLinks.GetAllLinked(label); var label2 = output.labels.First(x => x.name == label.name); foreach (var l in linked) { SpaceDocumentModel doc2 = output.documents.First(x => x.name == l.name); output.LabelToDocumentLinks.Add(label2, doc2, l.weight); } } foreach (var label in labels) { var linked = LabelToCategoryLinks.GetAllLinked(label); var label2 = output.labels.First(x => x.name == label.name); foreach (var l in linked) { SpaceCategoryModel doc2 = output.categories.First(x => x.name == l.name); output.LabelToCategoryLinks.Add(label2, doc2, l.weight); } } return(output); //output.categories }