Beispiel #1
0
        public void finalQuery()
        {
            AAFinalScore  Final           = new AAFinalScore();
            List <String> resultLaTeXList = new List <string>();
            StreamReader  sr     = new StreamReader("C:\\Users\\Administrator\\Desktop\\最终版组合测试添加数据用来修改的\\最终版组合测试添加数据用来修改的\\14最终版组合测试模糊匹配有点毛病啊,已解决14\\第二个实验测试数据\\1.txt", Encoding.Default);
            String        read   = sr.ReadLine();
            FuShu         fushu  = new FuShu();
            DuiShu        duishu = new DuiShu();

            while (true)
            {
                Console.WriteLine("请输入您的查询请求:包含分数为:");
                double baoHan = Convert.ToDouble(Console.ReadLine());
                //    Console.WriteLine("请输入您的查询请求:结构分数为:");
                //double jieGou = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("请输入您想要查的字符串:(#为结束字符)");
                String queryLaTeX = Console.ReadLine();
                //如果是负数的话
                queryLaTeX = fushu.fuShu(queryLaTeX);
                queryLaTeX = duishu.duiShu(queryLaTeX);
                //如果时负数的话
                //下面这个是相当于读取子式的那个
                AARead ar = new AARead();
                resultLaTeXList = ar.Read(queryLaTeX);
                resultLaTeXList = resultLaTeXList.Distinct().ToList();
                System.Diagnostics.Stopwatch stop = new System.Diagnostics.Stopwatch();
                stop.Start();                                       //开始监视代码运行时间
                Final.FinalScore(queryLaTeX, resultLaTeXList, baoHan /*, jieGou*/);
                stop.Stop();                                        //代码结束时间
                TimeSpan timespan     = stop.Elapsed;
                double   milliseconds = timespan.TotalMilliseconds; //总毫秒
                Console.WriteLine("排序时间为:" + milliseconds + "毫秒");
            }
        }
Beispiel #2
0
        public List <FinalNode1> AdjacentNodeList(String LaTeX)
        {
            AdjacentNode      adjacentNodes    = new AdjacentNode();
            List <FinalNode1> AdjacentNodeList = new List <FinalNode1>();//存放邻接节点有序对的集合
            LimAndSum         limandSums       = new LimAndSum();
            DuiJiaoXian       duijiaoxian      = new DuiJiaoXian();
            NciGenHao         nicigenHao       = new NciGenHao();
            DuiShu            duishu           = new DuiShu();
            int    biaozhi;
            String final;
            String cao;

            char[] caos;
            FuShu  fushu = new FuShu();

            biaozhi = 1;                       //每次循环前设置一个标志令标志等于1
            final   = "";                      //每次令final为空字符串,用来接收“特殊lim和sum表达式”还是“一般表达式”
            cao     = LaTeX.ToString().Trim(); //把数据库的数学表达式读出来,要开始判断了啊
            caos    = cao.ToCharArray();
            for (int i = 0; i < caos.Length; i++)
            {
                if (Convert.ToString(caos[i]).Equals("\\") && Convert.ToString(caos[i + 1]).Equals("l") && Convert.ToString(caos[i + 2]).Equals("i") && Convert.ToString(caos[i + 3]).Equals("m"))
                {
                    biaozhi = 0;
                    break;
                }
                else if (Convert.ToString(caos[i]).Equals("\\") && Convert.ToString(caos[i + 1]).Equals("s") && Convert.ToString(caos[i + 2]).Equals("u") && Convert.ToString(caos[i + 3]).Equals("m"))
                {
                    biaozhi = 0;
                    break;
                }
            }
            if (biaozhi == 0)//说明有lim这种的
            {
                final = limandSums.limAndSum(cao);
                final = fushu.fuShu(final);
                final = nicigenHao.NcigenHao(final);
                final = duishu.duiShu(final);
            }
            else
            {
                //下面这个是普通的和负号的
                final = fushu.fuShu(cao);
                final = nicigenHao.NcigenHao(final);
                final = duishu.duiShu(final);
            }
            //================================对于遇到含有lim和sum等特殊表达式的需要一段代码来特殊处理,如果不是这类表达式,那就不用处理,不过还有一些负号这类的===========================================
            AdjacentNodeList = adjacentNodes.AdjacentNodeList(final);

            return(AdjacentNodeList);
        }
Beispiel #3
0
        //这个方法是把数据写入txt文件,到时候写入SQLServer里面,因为我现在没有内存下载数据库了
        public void Write()
        {
            //先测试一下
            //StreamReader sr = new StreamReader("C:\\Users\\Administrator\\Desktop\\最终版组合测试添加数据用来修改的\\最终版组合测试添加数据用来修改的\\测试建索引\\1.txt", Encoding.Default);
            //StreamWriter sw = new StreamWriter("C:\\Users\\Administrator\\Desktop\\最终版组合测试添加数据用来修改的\\最终版组合测试添加数据用来修改的\\测试建索引\\2.txt");

            //第一步:先把txt所有数学公式读入内存
            StreamReader sr = new StreamReader("C:\\Users\\Administrator\\Desktop\\最终版组合测试添加数据用来修改的\\最终版组合测试添加数据用来修改的\\14最终版组合测试模糊匹配有点毛病啊,已解决14\\第二个实验测试数据\\1.txt", Encoding.Default);
            StreamWriter sw = new StreamWriter("C:\\Users\\Administrator\\Desktop\\第二篇论文实验读写数据库\\2.txt");

            List <AAIndex> indexList = new List <AAIndex>();

            DuiShu duishu = new DuiShu();
            FuShu  fuShu  = new FuShu();
            String read   = sr.ReadLine();

            read = duishu.duiShu(read);
            read = fuShu.fuShu(read);

            int a = 0;


            while (read != null)
            {
                //if (a == 100)
                //{
                //    break;

                //}
                //a++;
                //先读每一个数学公式,然后把每一个数学公式的子式、子式结构和该数学公式提取出即可

                //Console.WriteLine(read);
                Dictionary <int, List <FinalNode1> > children = new Dictionary <int, List <FinalNode1> >();
                ChildrenBTree childrenBTree = new ChildrenBTree();
                children = childrenBTree.childrenBTree(read);

                //这个是获取一个LaTeX的每一个子式
                foreach (var it in children)
                {
                    //定义每一个子式
                    String zishi = "";

                    //定义每一个子式结构
                    String zishiStructure = "";

                    foreach (var itt in it.Value)
                    {
                        zishi = zishi + itt.zifu;

                        if (isSpecialYunSuanShu(itt.zifu))
                        {
                        }
                        else
                        {
                            zishiStructure = zishiStructure + itt.zifu;
                        }
                    }
                    //Console.WriteLine("子式:" + zishi);
                    AAIndex index = new AAIndex();
                    index.zishi          = zishi;
                    index.zishiStructure = zishiStructure;
                    index.LaTeX          = read;

                    indexList.Add(index);
                }



                read = sr.ReadLine();
                if (read == null)
                {
                    break;
                }
                read = duishu.duiShu(read);
                read = fuShu.fuShu(read);
            }
            //Console.WriteLine("哪出bug了:===============");
            //开始写了
            foreach (var it in indexList)
            {
                if (it.zishiStructure.Equals(""))
                {
                    sw.WriteLine(it.zishi + "#" + " " + "#" + it.LaTeX + "#" + it.xuhao);
                }
                else
                {
                    sw.WriteLine(it.zishi + "#" + it.zishiStructure + "#" + it.LaTeX + "#" + it.xuhao);
                }
            }
            sw.Flush();
        }
Beispiel #4
0
        public void WriteData()
        {
            //第一步:先把txt所有数学公式读入内存
            StreamReader   sr        = new StreamReader("C:\\Users\\Administrator\\Desktop\\最终版组合测试添加数据用来修改的\\最终版组合测试添加数据用来修改的\\14最终版组合测试模糊匹配有点毛病啊,已解决14\\第二个实验测试数据\\1.txt", Encoding.Default);
            StreamWriter   sw        = new StreamWriter("C:\\Users\\Administrator\\Desktop\\最终版组合测试添加数据用来修改的\\最终版组合测试添加数据用来修改的\\14最终版组合测试模糊匹配有点毛病啊,已解决14\\第二个实验测试数据\\2.txt");
            List <AAIndex> indexList = new List <AAIndex>();
            DuiShu         duishu    = new DuiShu();
            FuShu          fuShu     = new FuShu();
            String         read      = sr.ReadLine();

            read = duishu.duiShu(read);
            read = fuShu.fuShu(read);



            int a = 0;

            while (read != null)
            {
                //if (a == 1)
                //{
                //    break;

                //}
                //a++;

                List <FinalNode1> AdjacentNodeList = new List <FinalNode1>();
                AdjacentNode      ad = new AdjacentNode();
                AdjacentNodeList = ad.AdjacentNodeList(read);
                String str = null;


                //这个是每一个字符串
                //现在这个是中序遍历好的节点
                List <String> ji = new List <string>();
                foreach (var it in AdjacentNodeList)
                {
                    //第一:如果左右节点都为操作数
                    if (isOperator(it.zifu) && it.left != null && it.right != null && !isOperator(it.left.zifu) && !isOperator(it.right.zifu))
                    {
                        List <FinalNode1> nodeList = new List <FinalNode1>();
                        middleBianLi      zhongxu  = new middleBianLi(nodeList, it);
                        String            strr     = null;
                        foreach (var itt in nodeList)
                        {
                            strr = strr + itt.zifu;
                            //Console.WriteLine("链接为:"+itt.zifu);
                        }
                        //foreach (var itt in nodeList)
                        //{
                        //    if (isOperator(itt.zifu))
                        //    {
                        //        strr = strr + itt.BTreeLevel;
                        //    }
                        //}
                        ji.Add(strr);
                    }
                    //第二:如果左节点是操作数,右节点是操作符
                    if (isOperator(it.zifu) && it.left != null && it.right != null && !isOperator(it.left.zifu) && isOperator(it.right.zifu))
                    {
                        ji.Add(it.left.zifu /*+ it.left.BTreeLevel*/);
                        ji.Add(it.zifu /*+it.BTreeLevel*/);
                    }
                    //第三:如果左节点是操作符,右节点是操作数
                    if (isOperator(it.zifu) && it.left != null && it.right != null && isOperator(it.left.zifu) && !isOperator(it.right.zifu))
                    {
                        ji.Add(it.zifu /*+ it.BTreeLevel*/);
                        ji.Add(it.right.zifu /*+ it.right.BTreeLevel*/);
                    }
                    //第四:如果左右节点都是操作符
                    if (isOperator(it.zifu) && it.left != null && it.right != null && isOperator(it.left.zifu) && isOperator(it.right.zifu))
                    {
                        ji.Add(it.zifu /*+ it.BTreeLevel*/);
                    }
                    //第五:类似sina
                    if (isOperator(it.zifu) && it.left != null && it.right == null && !isOperator(it.left.zifu))
                    {
                        ji.Add(it.left.zifu + it.zifu);
                    }
                    //第六:类似sin(a+b)
                    if (isOperator(it.zifu) && it.left != null && it.right == null && isOperator(it.left.zifu))
                    {
                        ji.Add(it.zifu /*+ it.BTreeLevel*/);
                    }

                    //if (isOperator(it.zifu) && it.left!=null && it.right != null && !isOperator(it.left.zifu) && !isOperator(it.right.zifu))
                    //{
                    //    //如果该字符是运算符且左右节点都是运算数,说明它是个子树
                    //    //把中序遍历好的每一个节点存入集合当中
                    //    //Console.WriteLine("哈哈哈:"+it.zifu);
                    //    List<FinalNode1> nodeList = new List<FinalNode1>();
                    //    middleBianLi zhongxu = new middleBianLi(nodeList, it);
                    //    String strr = null;
                    //    foreach (var itt in nodeList)
                    //    {
                    //        strr = strr + itt.zifu;
                    //        //Console.WriteLine("链接为:"+itt.zifu);
                    //    }
                    //    foreach (var itt in nodeList)
                    //    {
                    //        if (isOperator(itt.zifu))
                    //        {
                    //            strr = strr + itt.BTreeLevel;
                    //        }
                    //    }
                    //    ji.Add(strr);
                    //}
                    //else if (it.left != null && it.right != null && isOperator(it.left.zifu) && !isOperator(it.right.zifu))
                    //{
                    //    ji.Add(it.zifu+it.BTreeLevel);
                    //    ji.Add(it.right.zifu+it.right.BTreeLevel);
                    //}
                    //else if (it.left != null && it.right != null && !isOperator(it.left.zifu) && isOperator(it.right.zifu))
                    //{
                    //    ji.Add(it.left.zifu+ it.left.BTreeLevel);
                    //    ji.Add(it.zifu+it.BTreeLevel);
                    //}
                }

                foreach (var itt in ji)
                {
                    str = str + itt + "#";
                }

                str = str + read;
                sw.WriteLine(str);
                //Console.WriteLine("草泥马了:" + str);
                //Console.WriteLine("==============================");



                read = sr.ReadLine();
                if (read == null)
                {
                    break;
                }
                read = duishu.duiShu(read);
                read = fuShu.fuShu(read);
            }
            //Console.WriteLine("哪出bug了:===============");
            //开始写了
            //foreach (var it in indexList)
            //{
            //    if (it.zishiStructure.Equals(""))
            //    {
            //        sw.WriteLine(it.zishi + "#" + " " + "#" + it.LaTeX + "#" + it.xuhao);
            //    }
            //    else
            //        sw.WriteLine(it.zishi + "#" + it.zishiStructure + "#" + it.LaTeX + "#" + it.xuhao);
            //}
            sw.Flush();
        }