public async Task WriteXmlTest() { var root = new XmlChaserNode { Caption = "Root Node", Probability = 1 }; root.Add(new XmlChaserNode { Caption = "Hello", Probability = 0.5 }); root.Add(new XmlChaserNode { Caption = "World", Probability = 0.45 }); var builder = new StringBuilder(); var settings = new XmlWriterSettings { Indent = true }; var writer = XmlWriter.Create(builder, settings); root.WriteXml(writer); writer.Flush(); var xml = builder.ToString(); Debug.WriteLine(xml); var readerSettings = new XmlReaderSettings { }; var stream = new StringReader(xml); var reader = XmlReader.Create(stream, readerSettings); var copyRoot = XmlChaserNode.ReadXml(reader); await CheckSameAsync(root, copyRoot); }
static IEnumerable <XmlChaserNode> CreateChildren(int cursor, int position, int depth, params string[][] phrases) { Debug.Assert(phrases.Length == 1); foreach (var phrase in phrases) { foreach (var word in phrase) { var node = new XmlChaserNode { Caption = word, Probability = cursor < phrase.Length ? (word == phrase[cursor] ? 0.75 : 0.25 / phrase.Length) : 1.0 / phrase.Length }; if (position < depth) { foreach (var child in CreateChildren(Array.IndexOf(phrase, node.Caption) + 1, position + 1, depth, phrases)) { node.Add(child); } } yield return(node); } } }
public static async Task <Api.IChaserQuery <Range1D> > CreateAsync(XmlReader reader, double minProbThreshold = 0.0) { var xmlRoot = await XmlChaserNode.ReadXmlAsync(reader); var sortedRoot = new AlphabeticChaserNode(xmlRoot, minProbThreshold); // ALAN TODO refactor, separate the two concepts here: (1) packing to initial coordinates from probabilities, // (2) movement of coordinates... var engine = new QueryEngine(); var root = new ChaserQueryNode <Range1D>(null, sortedRoot, Renormalize, new Range1D(0.0, 1.0)); engine.SetRoot(root); return(engine); }
static XmlChaserNode CreateTree(int depth, params string[][] phrases) { var root = new XmlChaserNode { Caption = "Root", Probability = 1 }; foreach (var node in CreateChildren(0, 0, depth, phrases)) { root.Add(node); } return(root); }