示例#1
0
        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());
        }
示例#2
0
        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();
        }
示例#3
0
        /// <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);
            }
        }
示例#4
0
 /// <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);
         }
     }
 }
示例#5
0
        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.");
        }
示例#6
0
        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);
        }
示例#7
0
        // 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);
            }
        }
示例#8
0
        }                                   // Defines clue retrieving and adding
        #endregion

        #region Clue Management Interface
        // Record a clue
        public void AddDocumentToClues(Clue clue, Document doc)
        {
            Clues.AddDocument(clue, doc);
        }
示例#9
0
        public void RemoveDocument(Clue clue, Document doc)
        {

        }
示例#10
0
 public List<Document> GetDocuments(Clue clue)
 {
     foreach (string fragment in clue.Fragments)
     {
         if (Nodes.ContainsKey(fragment)) return Nodes[fragment].
示例#11
0
 public List <Document> GetDocumentsFilterByType(Clue clue, List <DocumentType> types)
 {
     return(GetDocuments(clue).Where(a => types.Any(type => type == a.Type)).ToList());
 }
示例#12
0
        /// <summary>
        /// Get all document under that clue
        /// </summary>
        /// <param name="clue"></param>
        /// <returns></returns>
        public List<Document> GetDocuments(Clue clue)
        {

        }
示例#13
0
 /// <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());
 }
示例#14
0
        /// <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)
        {

        }
示例#15
0
 public void ChangeClue(Clue oldClue, Clue newClue, Document doc)
 {
     RemoveClue(oldClue, doc);
     AddClue(newClue, doc);
 }
示例#16
0
 public void RemoveDocumentFromClues(Clue clue, Document doc)
 {
     Clues.RemoveDocument(clue, doc);
 }
示例#17
0
        /// <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)
        {

        }