示例#1
0
        private static void AddToTree(string s)
        {
            var node = new DistanceTree.Node(s, null);

            List <DistanceTree.Node> neighbors;
            var radius      = Levenshtein.MAX_RADIUS;
            var levenshtein = new Fastenshtein.Levenshtein(s);

            do
            {
                neighbors = Levenshtein.tree.Select(n =>
                {
                    n.Cache = levenshtein.Distance(n.Content);
                    return(n.Cache <= radius);
                }).ToList();
                radius++;
            } while (neighbors.Count == 0);

            var edges = neighbors.Select(x => new DistanceTree.Edge(node, x, x.Cache));

            node.Edges = edges.ToList();

            Levenshtein.tree.Add(node);
            Levenshtein.NodeDictionary.Add(s, node);
        }
示例#2
0
        private static void FindSimilar(DistanceTree.Node node, int radius, List <DistanceTree.Node> nodes, int distance, int searchRadius)
        {
            if (radius > searchRadius)
            {
                return;
            }

            node.Cache = distance;
            nodes.Add(node);

            foreach (var edge in node.Edges)
            {
                Levenshtein.FindSimilar(edge.End, radius + 1, nodes, distance + edge.Distance, searchRadius);
            }
        }