예제 #1
0
 internal void LinkAsNext(VectorNode tcpVNode)
 {
     tcpVNode.next      = this.next;
     this.next          = tcpVNode;
     tcpVNode.prev      = this;
     tcpVNode.next.prev = tcpVNode;
 }
예제 #2
0
        public void Run(IDictionary <string, string> args, ILogger logger)
        {
            var dataDirectory = args["dataDirectory"];
            var collection    = args["collection"];
            var documentId    = long.Parse(args["documentId"]);
            var select        = new HashSet <string>(args["select"].Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries));
            var collectionId  = collection.ToHash();
            var model         = new BagOfCharsModel();

            using (var sessionFactory = new SessionFactory(dataDirectory, logger))
                using (var documents = new DocumentStreamSession(sessionFactory))
                    using (var documentReader = new DocumentReader(collectionId, sessionFactory))
                    {
                        var doc = documents.ReadDocument((collectionId, documentId), select, documentReader);

                        foreach (var field in doc.Fields)
                        {
                            var tokens = model.Tokenize(field.Value.ToString());
                            var tree   = new VectorNode();

                            foreach (var token in tokens)
                            {
                                tree.MergeOrAdd(new VectorNode(token), model);
                            }

                            Console.WriteLine(field.Name);
                            Console.WriteLine(PathFinder.Visualize(tree));
                            Console.WriteLine(string.Join('\n', tokens));
                        }
                    }
        }
예제 #3
0
/*
 *          internal void LinkAsNext(Bytes data, uint length) {
 *              VectorNode next = new VectorNode(data, length);
 *              next.next = this.next;
 *              this.next = next;
 *              next.prev = this;
 *              next.next.prev = next;
 *          }
 */

            internal void LinkAsPrev(VectorNode tcpVNode)
            {
                tcpVNode.prev      = this.prev;
                this.prev          = tcpVNode;
                tcpVNode.next      = this;
                tcpVNode.prev.next = tcpVNode;
            }
예제 #4
0
파일: App.cs 프로젝트: kreeben/u-sir
        private int AddDocument(string documentId, string[] input, VectorTree tree)
        {
            var docId = Hash(documentId);
            var dic   = new SortedList <double, string>();
            var count = tree.Count;

            foreach (var word in input)
            {
                if (string.IsNullOrWhiteSpace(word))
                {
                    continue;
                }

                tree.GetNode(0, 0).Add(word, docId);

                var wordvec = new VectorNode(word).TermVector;

                if (wordvec.CosAngle(tree.Find(0, 0, word).TermVector) < VectorNode.IdenticalAngle)
                {
                    throw new Exception("error");
                }

                //Console.Write("{0} [", word);
                //foreach (var c in word.Components())
                //{
                //    Console.Write("{0}:{1}, ", c.Key, c.Value);
                //}
                //Console.WriteLine("]");
            }

            return(tree.Count - count);
        }
예제 #5
0
        private static void Print(VectorNode tree)
        {
            var diagram = PathFinder.Visualize(tree);

            File.WriteAllText(@"c:\temp\imagemodeltesttree.txt", diagram);
            Debug.WriteLine(diagram);
        }
예제 #6
0
파일: Program.cs 프로젝트: crazyants/resin
        static void Main(string[] args)
        {
            var doc1  = new VectorNode(args[0]);
            var doc2  = new VectorNode(args[1]);
            var angle = doc1.Vector.CosAngle(doc2.Vector);

            Console.WriteLine($"similarity: {angle}");
        }
예제 #7
0
 internal VectorNode BoxedUnlink()
 {
     this.prev.next = this.next;
     this.next.prev = this.prev;
     this.next      = this;
     this.prev      = this;
     return(this);
 }
예제 #8
0
/*
 *          internal VectorNode(Bytes arg, uint length) {
 *              this.next = this;
 *              this.prev = this;
 *              this.data = arg;
 *              this.startOffset = 0;
 *              this.length = length;
 *          }
 */

            internal Bytes Unlink()
            {
                this.prev.next = this.next;
                this.next.prev = this.prev;
                this.next      = this;
                this.prev      = this;
                return(this.data);
            }
예제 #9
0
        public override INode <AstNode> VisitVector(NotQuiteLisp.Parser.NQLParser.VectorContext context)
        {
            var children = GetChildAstNodes(context);

            var vectorNode = new VectorNode(children);

            return(vectorNode);
        }
예제 #10
0
        private static void CompareBaseless(string first, string second, IStringModel model)
        {
            var doc1 = new VectorNode(model.Tokenize(first.ToCharArray()).First());
            var doc2 = new VectorNode(model.Tokenize(second.ToCharArray()).First());

            var angle = model.CosAngle(doc1.Vector, doc2.Vector);

            Console.WriteLine($"similarity (baseless): {angle}");
        }
예제 #11
0
        public void Put(VectorNode tree)
        {
            var column = _index.GetOrAdd(tree.KeyId.Value, key => new VectorNode());

            foreach (var node in PathFinder.All(tree))
            {
                _indexingStrategy.ExecutePut <T>(column, new VectorNode(node.Vector, docIds: node.DocIds));
            }
        }
예제 #12
0
        private static void Compare(string first, string second, IStringModel model)
        {
            var baseVectorComponents = new List <float>(model.VectorWidth);
            var baseVectors          = new List <IVector>();

            for (int i = 0; i < model.VectorWidth; i++)
            {
                baseVectorComponents.Add(i == 0 ? 1 : Convert.ToSingle(Math.Log10(i)));

                var bvecs = new List <float>(model.VectorWidth);

                for (int y = 0; y < model.VectorWidth; y++)
                {
                    float value;

                    if (y == i)
                    {
                        value = 1;
                    }
                    else
                    {
                        value = 0;
                    }

                    bvecs.Add(value);
                }

                baseVectors.Add(new IndexedVector(bvecs, model.VectorWidth));
            }

            var bvector = new IndexedVector(baseVectorComponents, model.VectorWidth);

            var doc1    = new VectorNode(model.Tokenize(first.ToCharArray()).First());
            var doc2    = new VectorNode(model.Tokenize(second.ToCharArray()).First());
            var angles1 = new List <float>();
            var angles2 = new List <float>();

            foreach (var bvec in baseVectors)
            {
                angles1.Add(Convert.ToSingle(model.CosAngle(doc1.Vector, bvec)));
                angles2.Add(Convert.ToSingle(model.CosAngle(doc2.Vector, bvec)));
            }

            var docVector1 = new IndexedVector(angles1, model.VectorWidth);
            var docVector2 = new IndexedVector(angles2, model.VectorWidth);

            var angle  = model.CosAngle(docVector1, docVector2);
            var angle1 = model.CosAngle(docVector1, bvector);
            var angle2 = model.CosAngle(docVector2, bvector);

            Console.WriteLine($"similarity: {angle}");
            Console.WriteLine($"bvector similarity 1: {angle1}");
            Console.WriteLine($"bvector similarity 2: {angle2}");
            Console.WriteLine($"base vector similarity: {Math.Min(angle1, angle2) / Math.Max(angle1, angle2)}");
        }
예제 #13
0
        public VectorQueueByte()
        {
            size  = 0;
            count = 0;
            VectorNode node = this.listHead = new VectorNode();

            this.listTail         = node;
            currentTxBuff         = null;
            currentTxBufferOffset = 0;
            currentTxTotalOffset  = 0;
        }
예제 #14
0
        public void Analyze <T>(IModel <T> model)
        {
            var tokens = model.Tokenize((T)Value);

            Tree = new VectorNode();

            foreach (var token in tokens)
            {
                model.ExecutePut <string>(Tree, new VectorNode(token, keyId: KeyId));
            }

            _tokens = GetTokens();
        }
예제 #15
0
        public Bytes ExtractHead()
        {
            if (this.Empty)
            {
                return(null);
            }

            VectorNode candidate = this.listHead.next;

            //VTable.Assert(candidate.length != 0);
            size -= (uint)candidate.data.Length;
            count--;
            return(candidate.BoxedUnlink().data);
        }
예제 #16
0
        static void Main(string[] args)
        {
            var model = new BocModel();

            if (args[0] == "-b")
            {
                var root = new VectorNode();

                while (true)
                {
                    Console.WriteLine("enter word:");

                    var command = Console.ReadLine();

                    if (string.IsNullOrWhiteSpace(command))
                    {
                        break;
                    }

                    GraphBuilder.Add(root, new VectorNode(model.Tokenize(command).Embeddings[0]), model);
                }

                Console.WriteLine(root.Visualize());

                while (true)
                {
                    Console.WriteLine("enter query:");

                    var command = Console.ReadLine();

                    if (string.IsNullOrWhiteSpace(command))
                    {
                        break;
                    }

                    var hit = PathFinder.ClosestMatch(root, model.Tokenize(command).Embeddings[0], model);

                    Console.WriteLine($"{hit.Score} {hit.Node}");
                }
            }
            else
            {
                var doc1 = new VectorNode(model.Tokenize(args[0]).Embeddings[0]);

                var doc2  = new VectorNode(model.Tokenize(args[1]).Embeddings[0]);
                var angle = model.CosAngle(doc1.Vector, doc2.Vector);
                Console.WriteLine($"similarity: {angle}");
            }
        }
예제 #17
0
//        public void Release() {}
//        public void Acquire() {}
        public void Dispose()
        {
            VectorNode current = this.listHead.next;

            while (current != this.listHead)
            {
                // temporary hack until we fix the upcast in receiver context
                Bytes data = current.data;
                if (data != null)
                {
                    //delete data;
                }
                current = current.next;
            }
            this.listTail = this.listHead = new VectorNode();
        }
예제 #18
0
        static void Main(string[] args)
        {
            var document1 = args[0];
            var document2 = args[1];

            var docNode1 = new VectorNode(document1);
            var docNode2 = new VectorNode(document2);
            var docAngle = docNode1.Vector.CosAngle(docNode2.Vector);

            if (docAngle >= VectorNode.TermIdenticalAngle)
            {
                Console.Write("{0} is very similar to {1}", document1, document2);
            }
            else
            {
                var tokenizer = new LatinTokenizer();
                var index1    = new VectorNode();
                var tokens    = tokenizer.Tokenize(document1);

                foreach (var token in tokens.Tokens)
                {
                    var termVector = tokens.ToCharVector(token.offset, token.length);
                    index1.Add(new VectorNode(termVector), VectorNode.TermIdenticalAngle, VectorNode.TermFoldAngle, new MemoryStream());
                }

                float score   = 0;
                var   count   = 0;
                var   tokens2 = tokenizer.Tokenize(document2);
                foreach (var token in tokens2.Tokens)
                {
                    var termVector = tokens.ToCharVector(token.offset, token.length);
                    var node       = index1.ClosestMatch(new VectorNode(termVector), VectorNode.TermFoldAngle);

                    score += node.Score;
                    count++;
                }

                var similarity = (score / count) * 100;

                Console.WriteLine("{0} is {1}% similar to {2}", document1, similarity, document2);
                Console.Read();
            }
        }
예제 #19
0
파일: Program.cs 프로젝트: jobs-git/resin
        static void Main(string[] args)
        {
            var document1 = args[0];
            var document2 = args[1];

            var docNode1 = new VectorNode(document1);
            var docNode2 = new VectorNode(document2);
            var docAngle = docNode1.TermVector.CosAngle(docNode2.TermVector);

            if (docAngle >= VectorNode.IdenticalAngle)
            {
                Console.Write("{0} is very similar to {1}", document1, document2);
            }
            else
            {
                var tokenizer = new LatinTokenizer();
                var index1    = new VectorNode();

                foreach (var token in tokenizer.Tokenize(document1))
                {
                    index1.Add(new VectorNode(token), new MemoryStream());
                }

                float score = 0;
                var   count = 0;

                foreach (var token in tokenizer.Tokenize(document2))
                {
                    var node = index1.ClosestMatch(new VectorNode(token), skipDirtyNodes: false);

                    score += node.Score;
                    count++;
                }

                var similarity = (score / count) * 100;

                Console.WriteLine("{0} is {1}% similar to {2}", document1, similarity, document2);
                Console.Read();
            }
        }
예제 #20
0
        private static void RunInteractiveGraphBuilder(IStringModel model)
        {
            var root = new VectorNode();

            while (true)
            {
                Console.WriteLine("enter text:");

                var command = Console.ReadLine();

                if (string.IsNullOrWhiteSpace(command))
                {
                    break;
                }

                var node = new VectorNode(model.Tokenize(command.ToCharArray()).First());

                GraphBuilder.MergeOrAdd(root, node, model, model.FoldAngle, model.IdenticalAngle);
            }

            Console.WriteLine(root.Visualize());

            while (true)
            {
                Console.WriteLine("enter query:");

                var command = Console.ReadLine();

                if (string.IsNullOrWhiteSpace(command))
                {
                    break;
                }

                var hit = PathFinder.ClosestMatch(root, model.Tokenize(command.ToCharArray()).First(), model);

                Console.WriteLine($"{hit.Score} {hit.Node}");
            }
        }
예제 #21
0
파일: Term.cs 프로젝트: crazyants/resin
 public Term(long keyId, VectorNode node)
 {
     KeyId = keyId;
     Node  = node;
 }
예제 #22
0
 public void ExecutePut <T>(VectorNode column, VectorNode node)
 {
     column.MergeOrAddConcurrent(node, this);
 }
예제 #23
0
 public static void DeserializeUnorderedFile(
     Stream indexStream,
     Stream vectorStream,
     VectorNode root,
     (float identicalAngle, float foldAngle) similarity)
예제 #24
0
 public void ExecutePut <T>(VectorNode column, VectorNode node)
 {
     column.Build(node, this);
 }
예제 #25
0
        private static void Print(VectorNode tree)
        {
            var diagram = PathFinder.Visualize(tree);

            File.WriteAllText(@"c:\temp\mnisttree.txt", diagram);
        }
예제 #26
0
        static void Main(string[] args)
        {
            var angle = new VectorNode(args[0]).TermVector.CosAngle(new VectorNode(args[1]).TermVector);

            Console.WriteLine(angle);
        }
예제 #27
0
 private static void Print(VectorNode tree)
 {
     File.WriteAllText(@"c:\temp\mnisttree.txt", PathFinder.Visualize(tree));
 }
예제 #28
0
파일: Term.cs 프로젝트: crazyants/resin
 public Term(object key, VectorNode node)
 {
     Key     = key;
     KeyHash = key.ToHash();
     Node    = node;
 }
        public WebresourceNode AddSingleNode(Webresource resource, string[] nameParts, FolderNode folder = null)
        {
            var             fileName = nameParts.Last();
            WebresourceType type     = WebresourceType.Auto;

            if (resource.Type != 0)
            {
                type = (WebresourceType)resource.Type;
            }

            if (type == WebresourceType.Auto)
            {
                if (fileName.IndexOf(".", StringComparison.Ordinal) < 0)
                {
                    if (resource.Type == 0)
                    {
                        return(null);
                    }

                    type = (WebresourceType)resource.Type;
                }
                else
                {
                    type = Webresource.GetTypeFromExtension(fileName
                                                            .Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries).Last());
                }
            }

            WebresourceNode node = null;

            switch (type)
            {
            case WebresourceType.WebPage:
                node = new WebpageNode(resource, Settings);
                break;

            case WebresourceType.Css:
                node = new CssNode(resource, Settings);
                break;

            case WebresourceType.Data:
                node = new DataNode(resource, Settings);
                break;

            case WebresourceType.Gif:
                node = new GifNode(resource, Settings);
                break;

            case WebresourceType.Ico:
                node = new IcoNode(resource, Settings);
                break;

            case WebresourceType.Jpg:
                node = new JpgNode(resource, Settings);
                break;

            case WebresourceType.Png:
                node = new PngNode(resource, Settings);
                break;

            case WebresourceType.Resx:
                node = new ResxNode(resource, Settings);
                break;

            case WebresourceType.Script:
                node = new JavaScriptNode(resource, Settings);
                break;

            case WebresourceType.Silverlight:
                node = new SilverlightNode(resource, Settings);
                break;

            case WebresourceType.Vector:
                node = new VectorNode(resource, Settings);
                break;

            case WebresourceType.Xsl:
                node = new XslNode(resource, Settings);
                break;
            }

            resource.Node = node;

            if (folder != null && node != null)
            {
                node.ForeColor = resource.State == WebresourceState.Saved ? Color.Blue :
                                 resource.State == WebresourceState.Draft ? Color.Red : Color.Black;

                folder.Nodes.Add(node);

                (node.Parent as FolderNode)?.SetFolderColor();
            }

            return(node);
        }
예제 #30
0
 public GraphInfo(long keyId, VectorNode graph)
 {
     _keyId = keyId;
     _graph = graph;
 }