예제 #1
0
        public override ResultInterpreterOpt check(ResultInterpreterOpt interpreter, String dbText, String userText)
        {
            int sliceIndex = 0;
            int resultIndexId = 0;
            foreach (String slice in Splitter.SplitByNGram(userText, 1))
            {
                if (slice == "")
                {
                    sliceIndex++;
                    continue;
                }
                //Console.Out.WriteLine(slice);
                String r = findPattern(dbText, " "+slice+" ");
                var indexes = r.Split(';').Where(x => x != "").Select(x => Convert.ToInt32(x)).ToList();
                //Console.Out.WriteLine(indexes.Count)
                foreach (int i in indexes)
                {
                    interpreter.addIndex(resultIndexId, sliceIndex+1, sliceIndex + slice.Length+1, i+1, i+slice.Length+1);
                    resultIndexId++;
                    // Console.Out.WriteLine();
                    //Console.Out.WriteLine(slice);
                }
                sliceIndex = sliceIndex + slice.Length+1;
            }

            interpreter.getNormalizedIndexes();
            return interpreter;
        }
        public override ResultInterpreterOpt check(ResultInterpreterOpt interpreter, String dbText, String userText)
        {
            int sliceIndex = 0;
            int resultIndexId = 0;
            foreach (String slice in Splitter.SplitBySentence(userText))
            {
                //Console.Out.WriteLine(slice);
                if (slice == ""){
                    continue;
                }
                String r = findPattern(dbText, slice+". ");
                var indexes = r.Split(';').Where(x => x != "").Select(x => Convert.ToInt32(x)).ToList();
                foreach (int i in indexes)
                {
                    interpreter.addIndex(resultIndexId, sliceIndex, sliceIndex + slice.Length, i, i + slice.Length);
                    resultIndexId++;
                   // Console.Out.WriteLine();

                }
                sliceIndex = sliceIndex + slice.Length + 2;
            }
            //Console.ReadKey();
            interpreter.getNormalizedIndexes();
            return interpreter;
        }
        public override ResultInterpreterOpt check(ResultInterpreterOpt interpreter, String dbText, String userText)
        {
            int sliceIndex = 0;
            int resultIndexId = 0;
            foreach (String slice in Splitter.SplitByLength(userText, this.width))
            {
                String r = findPattern(dbText, slice);
                var indexes = r.Split(';').Where(x => x != "").Select(x => Convert.ToInt32(x)).ToList();
                foreach (int i in indexes)
                {
                    //Console.Out.WriteLine(dbText.Substring(i, slice.Length));
                    interpreter.addIndex(resultIndexId, sliceIndex * slice.Length, (sliceIndex + 1) * slice.Length, i, i + slice.Length);
                    resultIndexId++;
                }
                sliceIndex++;
            }

            interpreter.getNormalizedIndexes();
            return interpreter;
        }
        public void AddInterpreter(String name, String docId, ResultInterpreterOpt interpreter)
        {
            List<JsonMatchedModel> matched = new List<JsonMatchedModel>();
            foreach (ResultIndex r in interpreter.indexes){
                JsonMatchedModel d = new JsonMatchedModel();
                d.id = docId;
                d.us = r.userStart;
                d.ue = r.userEnd;
                d.ds = r.dbStart;
                d.de = r.dbEnd;
                matched.Add(d);
            }

            lock (addJsonResultLock)
            {
                JsonDataModel m = JsonConvert.DeserializeObject<JsonDataModel>(System.IO.File.ReadAllText(jsonFilePath));
                m.matched.AddRange(matched);
                System.IO.File.WriteAllText(jsonFilePath, JsonConvert.SerializeObject(m));
            }
            interpreter = null;
        }
예제 #5
0
        public override ResultInterpreterOpt check(ResultInterpreterOpt interpreter, String dbText, String userText)
        {
            int n = 3;
            int sliceIndex = 0;
            int resultIndexId = 0;
            Console.Out.WriteLine("before search");
            foreach (String slice in Splitter.SplitByNGram(userText, n))
            {
                if (slice == "")
                {
                    sliceIndex++;
                    continue;
                }
                //Console.Out.WriteLine(slice);
               // Console.Out.WriteLine(dbText.Substring(sliceIndex, 30));
               // Console.Out.WriteLine("|");

                String r = findPattern(dbText, slice);
                //Console.Out.WriteLine(r);
                //Console.ReadLine();
                var indexes = r.Split(';').Where(x => x != "").Select(x => Convert.ToInt32(x)).ToList();
                //Console.Out.WriteLine(indexes.Count)
                int skipValue = slice.Split(' ')[0].Length;

                foreach (int i in indexes)
                {
                    //Console.Out.WriteLine(slice);
                    interpreter.addIndex(resultIndexId, sliceIndex , sliceIndex + slice.Length , i , i + slice.Length );
                    resultIndexId++;
                    // Console.Out.WriteLine();
                    //Console.Out.WriteLine(slice);
                }
                sliceIndex = sliceIndex + skipValue + 1;
            }
            Console.Out.WriteLine("found");
            interpreter.getNormalizedIndexes();
            Console.Out.WriteLine("normalized");
            return interpreter;
        }
 public SingleStatistic(ResultInterpreterOpt interpreter, String userText, String dbText)
 {
     this.dbText = dbText;
     this.userText = userText;
     this.interpreter = interpreter;
 }
예제 #7
0
        static void Main(string[] args)
        {
            String patternAlgName = "KMP";
            String compareAlgName = "SentenceSplit";
            int noThreads = 1;

            DbInterface i = new DbInterface("localhost");
            CompareAlgorithm compareAlgorithm;
            if (args.Length > 0)
            {
                Console.Out.WriteLine(args[0] + " " + args[1]);
                compareAlgName = args[0];
                patternAlgName = args[1];
                noThreads = Int32.Parse(args[2]);
                var assembly = Assembly.GetExecutingAssembly().GetTypes();
                compareAlgorithm = (CompareAlgorithm)Activator.CreateInstance(Type.GetType("TestApp1.Algorithm." + compareAlgName));
                compareAlgorithm.patternAlgorithmName = patternAlgName;

            }
            else
            {
                compareAlgorithm = new SentenceSplit();
            }

            //var userId = "63a169a4-f05b-4072-b747-83651eb0a0fd";

            var path = "";
            if (args.Length >3 )
            {
                path = args[3];
            }
            path = "8c439958-2ad2-4dee-85e9-42df67b1dec1";
            //String userText = Utils.normalizeText(Utils.getDocumentFromFile(path));
            String userText = Utils.normalizeDbText(i.GetDocument(path));
            Console.Out.WriteLine(userText);
            //Console.ReadKey();
            //String userText = i.GetDocument(userId);
            var jsonReport = new JsonReportBuilder(Path.GetFileName(path), userText, compareAlgName, patternAlgName, noThreads);
            ParallelOptions parallelOptions = new ParallelOptions();
            parallelOptions.MaxDegreeOfParallelism = noThreads;
            DateTime startTime = DateTime.Now;
            int progress = 0;
            Object progressLock = new Object();
            Parallel.ForEach (i.GetDocumentIds(), parallelOptions, id  =>{
                if (path == id)
                {
                    return;
                }
                lock (progressLock) { progress++; }
                Console.Out.Write(progress + " ");
                String dbText = Utils.normalizeDbText(i.GetDocument(id));
               // Console.Out.WriteLine(dbText);
                //Console.Out.WriteLine(userText);

                //Console.ReadKey();
                String name = i.GetDocumentName(id);
                ResultInterpreterOpt interpreter = new ResultInterpreterOpt(dbText, userText);
                interpreter.isBenchmark = false;
                Console.Out.WriteLine("Checking");
                interpreter = compareAlgorithm.check(interpreter, dbText, userText);
                Console.Out.WriteLine("Updating report");
                jsonReport.AddInterpreter(name, id, interpreter);
                Console.Out.WriteLine("Report updated");

            });
            foreach (String id in i.GetDocumentIds())
            {
                jsonReport.setIdMapping(id, i.GetDocumentName(id));
            }
            DateTime endTime = DateTime.Now;
            jsonReport.setTime((float)endTime.Subtract(startTime).TotalMilliseconds/1000);
            jsonReport.generate();

            Console.Out.WriteLine("Koniec");
            //Console.ReadKey();
        }