public void AddNode(string Word) { NodePointer = RootNode; int EditDistance = SpellChecker.FindMinEditDistance(NodePointer.Word, Word); while (NodePointer.ContainsDistance(EditDistance)) { NodePointer = NodePointer.Children[EditDistance]; EditDistance = SpellChecker.FindMinEditDistance(NodePointer.Word, Word); } NodePointer.AddChildNode(EditDistance, Word); }
private void Perform(BKTreeNode NodePointer) { if (NodePointer.Children == null) { return; } foreach (var child in NodePointer.Children) { //Console.WriteLine($"{NodePointer.Word} {NodePointer.ChildrenAmount}"); Console.WriteLine($"{NodePointer.Word}->{child.Value.Word} LD: {child.Key}"); } foreach (var child in NodePointer.Children) { Perform(child.Value); } }
private void Search(BKTreeNode NodePointer, Dictionary <string, int> Matches, string Word, int accuracy) { int EditDistance = SpellChecker.FindMinEditDistance(NodePointer.Word, Word); int leftBorder = EditDistance - accuracy; int rightBorder = EditDistance + accuracy; if (EditDistance <= accuracy) { Matches.Add(NodePointer.Word, EditDistance); } if (NodePointer.Children != null) { foreach (var Child in NodePointer.Children) { if (Child.Key >= leftBorder && Child.Key <= rightBorder) { Search(Child.Value, Matches, Word, accuracy); } } } }
public BK_Tree(string RootWord) { RootNode = new BKTreeNode(RootWord); NodePointer = RootNode; }