internal List <ClueFragment> GetBranches(Clue clue) { string[] fragments = clue.Fragments; if (ClueTree.ContainsKey(fragments[0]) == false) { throw new IndexOutOfRangeException("The partial clue doesn't exit."); } // Retrieve ClueTreeNode note = GetTreeNode(clue); return(note.GetClueFraments()); }
internal void GetBranches(Clue clue, out List <ClueFragment> nextFragments, out List <Document> foundDocuments) { string[] fragments = clue.Fragments; if (ClueTree.ContainsKey(fragments[0]) == false) { throw new IndexOutOfRangeException("The partial clue doesn't exit."); } // Retrieve foundDocuments = ClueTree[fragments[0]].GetDocuments(fragments, 0); ClueTreeNode note = GetTreeNode(clue); nextFragments = note.GetClueFraments(); }
/// <summary> /// Given a bunch of keyphrases, suggest found documents and next steps /// </summary> /// <param name="keyPhrases"></param> /// <param name="nextFragments"></param> /// <param name="foundDocuments"></param> public void SearchForClueFragments(Clue clue, out List <ClueFragment> nextFragments, out List <Document> foundDocuments) { // If we have an exact match, then foundDocuments are results of that match, and nextFragments are sibglings of that match ClueTreeNode node = GetTreeNode(clue); if (node != null) { foundDocuments = node.Documents; nextFragments = node.GetClueFraments(); } // If we don't have an exact match, then foundDocuments are none, and nextFragmetns are possible fragments to use else { foundDocuments = null; // Or empty nextFragments = GetPossibleClueFragments(clue); } }
/// <summary> /// Exclusive /// </summary> /// <param name="clue"></param> /// <returns></returns> public List <string> GetPossibleFragments(Clue clue) { string[] fragments = clue.Fragments; if (fragments.Length == 1) { return(ClueTree.Keys.Where(item => item.Contains(fragments[0]) && item != fragments[0]).ToList()); } else { if (ClueTree.ContainsKey(fragments[0])) { return(ClueTree[fragments[0]].GetPossibleFragments(fragments, 0)); } else { return(null); } } }
public void Remove(Clue clue) { int toRemove = -1; for (int i = 0; i < Keys.Count; i++) { if (Keys[i] == clue) { toRemove = i; } } if (toRemove != -1) { Keys.RemoveAt(toRemove); Values.RemoveAt(toRemove); } // Throw an exception if not found is better throw new ArgumentOutOfRangeException("Key not found."); }
public List <string> GetAllClues() { List <string> clues = new List <string>(); if (this.Branches.Count == 0) { clues.Add(this.Name); } else { foreach (ClueTreeNode node in Branches.Values) { clues.AddRange(node.GetAllClues()); } for (int i = 0; i < clues.Count; i++) { clues[i] = Clue.Concatenate(this.Name, clues[i]); } } return(clues); }
// Provding some suggestions on possible clues to use // Condition: (input.Contains('-') == false && input.Contains(' ') == false, i.e. beginning entry of a word // Rule: treat as a part of a clue, then treat as a name or meta public void GetInitialSuggestion(string beginningText, out List <ClueFragment> nextFragments, out List <Document> foundDocuments) { Clue clue = new Clue(beginningText); foundDocuments = null; if (ClueTree.ContainsKey(beginningText)) { foundDocuments = GetDocuments(clue); } if (foundDocuments == null || foundDocuments.Count == 0) { AmbiguousSearch(new string[] { beginningText }, out foundDocuments); } if (ClueTree.ContainsKey(beginningText)) { nextFragments = GetBranches(clue); } else { nextFragments = GetPossibleClueFragments(clue); } }
} // Defines clue retrieving and adding #endregion #region Clue Management Interface // Record a clue public void AddDocumentToClues(Clue clue, Document doc) { Clues.AddDocument(clue, doc); }
public void RemoveDocument(Clue clue, Document doc) { }
public List<Document> GetDocuments(Clue clue) { foreach (string fragment in clue.Fragments) { if (Nodes.ContainsKey(fragment)) return Nodes[fragment].
public List <Document> GetDocumentsFilterByType(Clue clue, List <DocumentType> types) { return(GetDocuments(clue).Where(a => types.Any(type => type == a.Type)).ToList()); }
/// <summary> /// Get all document under that clue /// </summary> /// <param name="clue"></param> /// <returns></returns> public List<Document> GetDocuments(Clue clue) { }
/// <summary> /// Get all document with specific type under that clue /// </summary> /// <param name="clue"></param> /// <param name="type"></param> /// <returns></returns> public List <Document> GetDocumentsFilterByType(Clue clue, DocumentType type) { return(GetDocuments(clue).Where(a => a.Type == type).ToList()); }
/// <summary> /// Get all document with specific type under that clue /// </summary> /// <param name="clue"></param> /// <param name="type"></param> /// <returns></returns> public List<Document> GetDocumentsFilterByType(Clue clue, DocumentType type) { }
public void ChangeClue(Clue oldClue, Clue newClue, Document doc) { RemoveClue(oldClue, doc); AddClue(newClue, doc); }
public void RemoveDocumentFromClues(Clue clue, Document doc) { Clues.RemoveDocument(clue, doc); }
/// <summary> /// Get clues that contains current clue, excluding current clue /// Notice a clue might not exist in order of a tree sturcture /// </summary> /// <param name="clue"></param> /// <returns></returns> public List<Clue> GetLargerClues(Clue clue) { }