Пример #1
0
        /// <summary>
        /// 设置试题类型
        /// </summary>
        /// <param name="subject"></param>
        public static void SetSubjectType(Subject subject)
        {
            //是父节点,则为阅读理解题
             if (subject.ListChild.Count > 0)
             {
                 subject.题目类型 = Subject.SubjecttypeEnum.阅读理解题;
                 subject.客观题 = Subject.ObjectiveEnum.否;
                 //subject.选项个数 = 1;
             }
             else
             {
                 //判断题干中有多少个选项,超过2个为选择题
                 //if (Regex.Matches(subject.subjecthtmlcontent, "[A-G][..、][^A-G]").Count > 1)   //mark
                 if (Regex.Matches(subject.subjecthtmlcontent, "[A-G][..、]").Count > 1)
                 {
                     //没有答案,则为单选题
                     if ((subject.answer == null || string.IsNullOrEmpty(subject.answer.subjecttextanswer)))
                     {
                         subject.题目类型 = Subject.SubjecttypeEnum.单选题;
                     }
                     else if ((Regex.IsMatch(subject.subjecthtmlcontent.ToLower(), @"<u[^>]*>\s*?</u[^>]*>", RegexOptions.Singleline)
                            || Regex.IsMatch(subject.subjecthtmlcontent.ToLower(), @"_{3,}", RegexOptions.Singleline))
                            && !Regex.IsMatch(subject.subjecthtmlcontent, @"()|\(\)", RegexOptions.Singleline)
                            && !Regex.IsMatch(subject.answer.subjecttextanswer.Trim().ToUpper(), @"^[A-G]{1,7}$", RegexOptions.Singleline))
                     {
                         subject.题目类型 = Subject.SubjecttypeEnum.填空题;
                     }
                     else if (Regex.IsMatch(subject.answer.subjecttextanswer.Trim().ToUpper(), @"^正确{1}$|^错误{1}$|^对{1}$|^错{1}$|^YES{1}$|^NO{1}$", RegexOptions.Singleline))
                     {
                         subject.题目类型 = Subject.SubjecttypeEnum.判断题;
                     }
                     else if (Regex.IsMatch(subject.answer.subjecttextanswer.Trim().ToUpper(), "^[A-G]{2,26}$") || subject.subjecthtmlcontent.IndexOf("多选") != -1)
                     {
                         //如果有多个答案,则为多选题
                         subject.题目类型 = Subject.SubjecttypeEnum.多选题;
                     }
                     else if (Regex.IsMatch(subject.answer.subjecttextanswer.Trim().ToUpper(), "^[A-G]{1}$"))
                     {
                         subject.题目类型 = Subject.SubjecttypeEnum.单选题;
                     }
                     else
                     {
                         //如果题干不存在多选字符,则为单选,否则为多选
                         subject.题目类型 = Subject.SubjecttypeEnum.简答题;
                         subject.客观题 = Subject.ObjectiveEnum.否;
                         return;
                     }

                     subject.客观题 = Subject.ObjectiveEnum.是;
                }
                else if (Regex.IsMatch(subject.subjecthtmlcontent.ToLower(), @"<u[^>]*>\s*?</u[^>]*>", RegexOptions.Singleline) || Regex.IsMatch(subject.subjecthtmlcontent.ToLower(), @"_{3,}", RegexOptions.Singleline))
                {
                    var iTCount = Regex.Matches(subject.subjecthtmlcontent, "<u[^>]*>((&nbsp;)|[\\s]){3,}</u[ ]*>|(_{3,})", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline).Count;
                    subject.题目类型 = Subject.SubjecttypeEnum.填空题;
                    subject.客观题 = Subject.ObjectiveEnum.是;
                }
                //else if ((subject.answer.subjecttextanswer.IndexOf("正确") != -1 || subject.answer.subjecttextanswer.IndexOf("对") != -1 || subject.answer.subjecttextanswer.IndexOf("错误") != -1 || subject.answer.subjecttextanswer.IndexOf("错") != -1) && subject.answer.subjecttextanswer.Length < 10)
                else if (Regex.IsMatch(subject.answer.subjecttextanswer.Trim().ToUpper(), @"^正确{1}$|^错误{1}$|^对{1}$|^错{1}$|^YES{1}$|^NO{1}$", RegexOptions.Singleline))
                {
                    subject.题目类型 = Subject.SubjecttypeEnum.判断题;
                    subject.客观题 = Subject.ObjectiveEnum.是;
                }
                else
                {
                    subject.题目类型 = Subject.SubjecttypeEnum.简答题;
                    subject.客观题 = Subject.ObjectiveEnum.否;
                }
             }
        }
Пример #2
0
        /// <summary>
        /// 试题类型处理
        /// 1.单(多)项选择题拆分选项。
        /// 2.填空题添加标识
        /// 3.判断题转换数据
        /// </summary>
        /// <param name="subjectitem">题目内容</param>
        /// <param name="subjecttype">题目类型</param>
        /// <returns></returns>
        public static void SubjectTypeMarkAndCreateOption(Subject subjectitem)
        {
            int subjecttype =(int)subjectitem.题目类型;
             //html = HtmlUtil.htmlreplace(html);
             if (subjecttype == Subject.SubjecttypeEnum.单选题.GetHashCode() || subjecttype == Subject.SubjecttypeEnum.多选题.GetHashCode())
             {
                // var strs = subjectitem.
                string tempsubjecthtmlcontent = HtmlUtil.selectSubjectOptionMarkUpload(subjectitem.subjecthtmlcontent);
                subjectitem.subjecthtmlcontent = HtmlUtil.selectSubjectOptionMarkUpload(subjectitem.subjecthtmlcontent, "<check>$0</check>");
                // subjectitem.subjecthtmlcontent = Regex.Replace(subjectitem.subjecthtmlcontent, " ((&nbsp;)|[\\s])*([ABCDEFG]{1})[\\s]*[^.]", "<nocheck>$0</nocheck>", RegexOptions.Multiline | RegexOptions.Singleline);

                 bool isanswer = false;
                 string[] htmls = Regex.Split(tempsubjecthtmlcontent, MatchArray.Select_Option, RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline);

                 for (int i = 0; i < htmls.Length; i++)
                 {
                     if (i > 0)
                     {
                         isanswer = false;
                         //判断答案是否正确
                         isanswer = SelectAnswerPair(subjectitem, i, isanswer);
                         string answercontent = ReplaceHTML(htmls[i]).Replace("</img>", "");
                         Answer answer = new Answer(answercontent, isanswer, i);
                         subjectitem.answers.Add(answer);
                     }
                     subjectitem.subjecthtmlcontent = subjectitem.subjecthtmlcontent.Replace(htmls[i], new Regex("[A-G]").Replace(new Regex("<.+?>", RegexOptions.Singleline).Replace(htmls[i], (x) => { return x.Groups[0].Value.ToLower(); }), "<nocheck>$0</nocheck>"));
                 }
                 return;
             }
             else if (subjecttype == Subject.SubjecttypeEnum.填空题.GetHashCode())
             {
                 string tempsubjecthtmlcontent = HtmlUtil.spacePlaceMarkUpLoad(subjectitem.subjecthtmlcontent);
                 Regex regex = new Regex("[^\\<check\\>]<u>.+?</u>",RegexOptions.IgnoreCase|RegexOptions.Singleline);
                 subjectitem.subjecthtmlcontent = HtmlUtil.spacePlaceMarkUpLoad(subjectitem.subjecthtmlcontent, "<check>$0</check>");
                 subjectitem.subjecthtmlcontent = regex.Replace(subjectitem.subjecthtmlcontent, "<nocheck>$0</nocheck>");
                 Regex regspacenum = new Regex(MatchArray.Space_Num);
                 int i = 0;

                 // 取得匹配项列表
                 while (regspacenum.IsMatch(tempsubjecthtmlcontent))
                 {
                     tempsubjecthtmlcontent = regspacenum.Replace(tempsubjecthtmlcontent, string.Format(MatchArray.Space_Num_Replace, i + 1), 1);
                     i++;
                 }

                 int sort = 0;//答案顺序
                 string[] answerarr = subjectitem.answer.subjecthtmlanswer.Split('|');

                 foreach (string content in answerarr)
                 {
                     string html = ReplaceHTML(content).Replace("</img>","");
                     //如果答案的长度比填空空格多,则去掉为空的答案
                     if (string.IsNullOrEmpty(html))
                     {
                         if (answerarr.Length <= i)
                         {
                             sort++;
                             Answer answer = new Answer(html, true, sort);
                             subjectitem.answers.Add(answer);
                         }
                     }
                     else
                     {
                         sort++;
                         Answer answer = new Answer(html, true, sort);
                         subjectitem.answers.Add(answer);
                     }
                 }
                 while (sort < i)
                 {
                     sort++;
                     Answer answer = new Answer("", true, sort);
                     subjectitem.answers.Add(answer);
                 }
                 return;
             }
             else if (subjecttype == Subject.SubjecttypeEnum.判断题.GetHashCode())
             {
                 string answerstr = "0";
                 if (subjectitem.answer.subjecttextanswer.IndexOf("正确") >= 0 || subjectitem.answer.subjecttextanswer.IndexOf("对") >= 0)
                     answerstr = "1";
                 Answer answer = new Answer(answerstr, true, 1);
                 subjectitem.answers.Add(answer);
                 return;
             }
             Answer answerother = new Answer(subjectitem.answer.subjecttextanswer, true, 1);
             subjectitem.answers.Add(answerother);
        }
Пример #3
0
        /// <summary>
        /// 检测试题类型是否正确
        /// </summary>
        /// <param name="subject"></param>
        /// <returns></returns>
        public static Tuple<bool, string, int> CheckSubjectType(Subject subject, List<Subject> listSubject)
        {
            string strMsg = string.Empty;
             string tempStrMsg = string.Empty;

             if (!string.IsNullOrEmpty(subject.ParentId))
             {
                 var strsParentId = subject.ParentId.Split('.');
                 var parentSubject = listSubject.Find(x => x.Id == strsParentId[0]);
                 string context = parentSubject.subjecttextcontent;
                 if (context.Length > 10)
                 {
                     context = context.Substring(0, 10) + "...";
                 }
                 strMsg = context + "下";
                 if (strsParentId.Length==2)
                 {
                     parentSubject = parentSubject.ListChild.Find(x => x.Id == subject.ParentId);
                     strMsg = strMsg+"第"+ (parentSubject.套卷序号)+"题中";
                 }
             }
             if (strMsg == "")
             {
                 strMsg = subject.subjecttextcontent.ToString() + "题";
             }
             else
             {
                 strMsg = strMsg +"第"+ subject.套卷序号.ToString() + "小题";
             }

             tempStrMsg = strMsg;

             //检查选择题答案中的非法字符
             if (!string.IsNullOrEmpty(subject.answer.subjecttextanswer))
             {
                 Regex regex = new Regex(@"^[A-G]{1,26}$", RegexOptions.Singleline);

                 if (!regex.IsMatch(subject.answer.subjecttextanswer.Trim()))
                 {
                     if (subject.题目类型 == Subject.SubjecttypeEnum.单选题)
                     {
                         strMsg += "单选题答案内容不正确,请修改为纯字母(A-G)";
                         return new Tuple<bool, string, int>(false, strMsg, 0);
                     }
                     else if (subject.题目类型 == Subject.SubjecttypeEnum.多选题)
                     {
                         strMsg += "多选题答案内容不正确,请修改为纯字母(A-G)";
                         return new Tuple<bool, string, int>(false, strMsg, 0);
                     }
                 }
             }

             //没有答案
             if ((subject.answer == null || (string.IsNullOrEmpty(subject.answer.subjecttextanswer) && string.IsNullOrEmpty(NoHTML(subject.answer.subjecthtmlanswer)))) && subject.answer.subjecthtmlanswer.IndexOf("img") == -1 && subject.answer.subjecthtmlanswer.IndexOf("object") == -1 && subject.题目类型 != Subject.SubjecttypeEnum.阅读理解题)
             {
                 //客观题,一定要添加答案
                 if (subject.客观题 == Subject.ObjectiveEnum.是)
                 {
                     //单选题,多选题,判断题 必须要添加答案
                     if (subject.题目类型 == Subject.SubjecttypeEnum.单选题 || subject.题目类型 == Subject.SubjecttypeEnum.多选题 || subject.题目类型 == Subject.SubjecttypeEnum.判断题)
                     {
                         strMsg += "为客观题 ,必须要添加答案";
                         return new Tuple<bool, string, int>(false, strMsg, 0);
                     }
                     else
                     {
                         strMsg += "为客观题 ,建议添加答案或者修改为主观题";
                         return new Tuple<bool, string, int>(true, strMsg, 0);
                     }

                 }
                 else
                 {
                     strMsg += "没有答案,建议添加题目答案";
                     return new Tuple<bool, string,int>(false, strMsg,1);
                 }
             }
             else
             {
                 //判断题干中有多少个选项,超过2个为选择题
                 //if (Regex.Matches(subject.subjecthtmlcontent, "[A-G][..、][^A-G]").Count > 1)       //mark
                 if (Regex.Matches(subject.subjecthtmlcontent, "[A-G][..、]").Count > 1)
                 {
                     if (subject.题目类型 == Subject.SubjecttypeEnum.阅读理解题)
                     {
                         if (subject.ListChild.Count == 0)
                         {
                             strMsg += "没有子题,题目类型不能设定为阅读理解题";
                             return new Tuple<bool, string, int>(false, strMsg, 0);
                         }
                     }
                     //else if ((subject.subjecthtmlcontent.ToLower().IndexOf("</u>") != -1 || subject.subjecthtmlcontent.IndexOf("__") != -1) && subject.题目类型 == Subject.SubjecttypeEnum.填空题)
                     else if ((Regex.IsMatch(subject.subjecthtmlcontent.ToLower(), @"<u[^>]*>\s*?</u[^>]*>", RegexOptions.Singleline) || Regex.IsMatch(subject.subjecthtmlcontent.ToLower(), @"_{3,}", RegexOptions.Singleline)) && subject.题目类型 == Subject.SubjecttypeEnum.填空题)
                     {
                         int iCount = 0;
                         if (subject.answers != null && subject.answers.Count > 0)
                         {
                             iCount = subject.answers.Count;
                             //存在题目未填写答案
                             if (subject.answers.Where(x => string.IsNullOrEmpty(x.content)).Count() != 0)
                             {
                                 if (subject.客观题 == Subject.ObjectiveEnum.是)
                                 {
                                     strMsg += "部分填空空格未填写答案,请补全答案";
                                     return new Tuple<bool, string, int>(false, strMsg, 0);
                                 }
                                 else
                                 {
                                     strMsg += "部分填空空格未填写答案,建议补全答案";
                                     return new Tuple<bool, string, int>(false, strMsg, 1);
                                 }
                             }
                         }
                         else
                         {
                             //答案
                             iCount = subject.answer.subjecttextanswer.Split('|').Length;   //填空题答案分割方法..
                         }

                         //题干
                         int iTCount = Regex.Matches(subject.subjecthtmlcontent, "<u[^>]*>((&nbsp;)|[\\s]){3,}</u[ ]*>|(_{3,})", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline).Count;

                         //题干 和答案不一样,则不能自动修复
                         if (iTCount != iCount)
                         {
                             strMsg += "题干填空空格数目和答案数目不一致";
                             return new Tuple<bool, string, int>(false, strMsg, 0);
                         }
                     }
                     else
                     {
                         //没有答案,则为单选题
                         if (subject.answer != null && !string.IsNullOrEmpty(subject.answer.subjecttextanswer))
                         {
                             if ((Regex.IsMatch(subject.subjecthtmlcontent.ToLower(), @"<u[^>]*>\s*?</u[^>]*>", RegexOptions.Singleline)
                                || Regex.IsMatch(subject.subjecthtmlcontent.ToLower(), @"_{3,}", RegexOptions.Singleline))
                                && !Regex.IsMatch(subject.subjecthtmlcontent, @"()|\(\)", RegexOptions.Singleline)
                                && !Regex.IsMatch(subject.answer.subjecttextanswer.Trim().ToUpper(), @"^[A-G]{1,7}$", RegexOptions.Singleline))
                             {
                                 if(subject.题目类型 != Subject.SubjecttypeEnum.填空题)
                                 {
                                     strMsg += "具有填空题特征 ,建议题目类型修改为填空题";
                                 }
                             }
                             else if (Regex.IsMatch(subject.answer.subjecttextanswer.Trim().ToUpper(), @"^正确{1}$|^错误{1}$|^对{1}$|^错{1}$|^YES{1}$|^NO{1}$", RegexOptions.Singleline))
                             {
                                 if (subject.题目类型 != Subject.SubjecttypeEnum.判断题)
                                 {
                                     strMsg += "答案为 " + subject.answer.subjecttextanswer + " ,建议题目类型修改为判断题";
                                 }
                             }
                             //如果有多个答案,则为多选题
                             else if (Regex.IsMatch(subject.answer.subjecttextanswer.Trim().ToUpper(), "^[A-G]{2,26}$") || subject.subjecthtmlcontent.IndexOf("多选") != -1)
                             {
                                 if (subject.题目类型 != Subject.SubjecttypeEnum.多选题)
                                 {
                                     strMsg += "答案为 " + subject.answer.subjecttextanswer + " ,建议题目类型修改为多选题";
                                 }
                             }
                             else if(Regex.IsMatch(subject.answer.subjecttextanswer.Trim().ToUpper(), "^[A-G]{1}$"))
                             {
                                if (subject.题目类型 != Subject.SubjecttypeEnum.单选题)
                                {
                                    strMsg += "答案为 " + subject.answer.subjecttextanswer + " ,建议题目类型修改为单选题";
                                }
                             }
                             else
                             {
                                if (subject.题目类型 != Subject.SubjecttypeEnum.简答题)
                                {
                                    strMsg += "答案为 " + subject.answer.subjecttextanswer + " ,建议题目类型修改为单选题";
                                }
                             }
                         }
                         else
                         {
                             if (subject.题目类型 != Subject.SubjecttypeEnum.单选题)
                             {
                                 strMsg += "题干中存在多个选项 ,建议题目类型修改为单选题";
                             }
                         }
                     }
                 }
                 //else if (subject.subjecthtmlcontent.ToLower().IndexOf("</u>") != -1 || subject.subjecthtmlcontent.IndexOf("__") != -1)
                 else if (Regex.IsMatch(subject.subjecthtmlcontent.ToLower(), @"<u[^>]*>\s*?</u[^>]*>", RegexOptions.Singleline) || Regex.IsMatch(subject.subjecthtmlcontent.ToLower(), @"_{3,}", RegexOptions.Singleline))
                 {
                     if (subject.题目类型 == Subject.SubjecttypeEnum.填空题)
                     {
                         int iCount = 0;
                         if (subject.answers != null && subject.answers.Count > 0)
                         {
                             iCount = subject.answers.Count;
                             //存在题目未填写答案
                             if (subject.answers.Where(x => string.IsNullOrEmpty(x.content)).Count() != 0)
                             {
                                 if (subject.客观题 == Subject.ObjectiveEnum.是)
                                 {
                                     strMsg += "部分填空空格未填写答案,请补全答案";
                                     return new Tuple<bool, string, int>(false, strMsg, 0);
                                 }
                                 else
                                 {
                                     strMsg += "部分填空空格未填写答案,建议补全答案";
                                     return new Tuple<bool, string, int>(false, strMsg, 1);
                                 }
                             }
                         }
                         else
                         {
                             //答案
                             iCount = subject.answer.subjecttextanswer.Split('|').Length;
                         }
                         //题干
                         var iTCount = Regex.Matches(subject.subjecthtmlcontent, "<u[^>]*>((&nbsp;)|[\\s]){3,}</u[ ]*>|(_{3,})", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline).Count;
                         //题干 和答案不一样,则不能自动修复
                         if (iTCount != iCount)
                         {
                             strMsg += "题干填空空格数目和答案数目不一致";
                             return new Tuple<bool, string, int>(false, strMsg, 0);
                         }
                     }
                     else
                     {
                         if (subject.题目类型 == Subject.SubjecttypeEnum.阅读理解题 && subject.ListChild.Count > 0)
                         {
                         }
                         else
                         {
                             strMsg += "题干中存在填空空格,建议题目类型修改为填空题";
                         }
                     }
                 }
                 //else if ((subject.answer.subjecttextanswer.IndexOf("正确") != -1 || subject.answer.subjecttextanswer.IndexOf("对") != -1 || subject.answer.subjecttextanswer.IndexOf("错误") != -1 || subject.answer.subjecttextanswer.IndexOf("错") != -1) && subject.answer.subjecttextanswer.Length < 10)
                 else if (Regex.IsMatch(subject.answer.subjecttextanswer.Trim().ToUpper(), @"^正确{1}$|^错误{1}$|^对{1}$|^错{1}$|^YES{1}$|^NO{1}$", RegexOptions.Singleline))
                 {
                     if (subject.题目类型 != Subject.SubjecttypeEnum.判断题)
                     {
                         strMsg += "答案为 " + subject.answer.subjecttextanswer + " ,建议题目类型修改为判断题";
                     }
                 }
                 else if (subject.题目类型 == Subject.SubjecttypeEnum.填空题)
                 {
                     //if (subject.subjecthtmlcontent.ToLower().IndexOf("</u>") == -1 || subject.subjecthtmlcontent.IndexOf("__") == -1)
                     if (Regex.IsMatch(subject.subjecthtmlcontent.ToLower(), @"<u[^>]*>\s*?</u[^>]*>", RegexOptions.Singleline) || Regex.IsMatch(subject.subjecthtmlcontent.ToLower(), @"_{3,}", RegexOptions.Singleline))
                     {
                         strMsg += "没有填空空格,题目类型不能设定为填空题";
                         return new Tuple<bool, string, int>(false, strMsg, 0);
                     }
                 }
                 else if (subject.题目类型 == Subject.SubjecttypeEnum.判断题)
                 {
                     //if ((subject.answer.subjecttextanswer.IndexOf("正确") != -1 || subject.answer.subjecttextanswer.IndexOf("对") != -1 || subject.answer.subjecttextanswer.IndexOf("错误") != -1 || subject.answer.subjecttextanswer.IndexOf("错") != -1) && subject.answer.subjecttextanswer.Length < 10)
                     if (!Regex.IsMatch(subject.answer.subjecttextanswer.Trim().ToUpper(), @"^正确{1}$|^错误{1}$|^对{1}$|^错{1}$|^YES{1}$|^NO{1}$", RegexOptions.Singleline))
                     {
                         strMsg += "答案不符合判断题目规则,题目类型不能设定为判断题";
                         return new Tuple<bool, string, int>(false, strMsg, 0);
                     }
                 }
                 else if (subject.题目类型 == Subject.SubjecttypeEnum.阅读理解题)
                 {
                     if (subject.ListChild.Count == 0)
                     {
                         strMsg += "没有子题,题目类型不能设定为阅读理解题";
                         return new Tuple<bool, string, int>(false, strMsg, 0);
                     }
                 }
                 else if (subject.题目类型 == Subject.SubjecttypeEnum.单选题)
                 {
                     if (Regex.Matches(subject.subjecthtmlcontent, "[A-G][..、]").Count < 2)
                     {
                         strMsg += "题干选项不够,题目类型不能设定为单选题";
                         return new Tuple<bool, string, int>(false, strMsg, 0);
                     }
                 }
                 else if (subject.题目类型 == Subject.SubjecttypeEnum.多选题)
                 {
                     if (Regex.Matches(subject.subjecthtmlcontent, "[A-G][..、]").Count < 2)
                     {
                         strMsg += "题干选项不够,题目类型不能设定为多选题";
                         return new Tuple<bool, string, int>(false, strMsg, 0);
                     }
                 }
                 //正常的数据
                 if (tempStrMsg == strMsg)
                 {
                     return new Tuple<bool, string,int>(false, "",-1);
                 }
                 else
                 {
                     return new Tuple<bool, string,int>(true, strMsg,0);
                 }
             }
        }
Пример #4
0
        /// <summary>
        /// 获取答案
        /// </summary>
        /// <param name="treenodecurrectsubject"></param>
        public static void GetAnswer(Subject treenodecurrectsubject)
        {
            //a bug is here
             int endIndex = GetStrIndex(treenodecurrectsubject.subjecthtmlcontent, "(<p\\s*>)*答案[::].+?(</p>)*", false);
             int jtslIndex = GetStrIndex(treenodecurrectsubject.subjecthtmlcontent, "(<p\\s*>)*解题思路[::].+?(</p>)*", false);

             //有答案
             if (endIndex != 0)
             {
                 string tempText = treenodecurrectsubject.subjecthtmlcontent.Substring(endIndex);
                 string text = "";

                 //有解题思路
                 if (jtslIndex != 0)
                 {
                     jtslIndex = jtslIndex - endIndex;
                     text = tempText.Substring(0, jtslIndex).Replace("答案:", "").Replace("答案:", "");
                     treenodecurrectsubject.questionthinking = tempText.Substring(jtslIndex).Replace("解题思路:", "").Replace("解题思路:", "");
                 }
                 else
                 {
                     jtslIndex = GetStrIndex(treenodecurrectsubject.subjecthtmlcontent, "(<p\\s*>)*解析[::].+?(</p>)*", false);

                     if (jtslIndex != 0)
                     {
                         jtslIndex = jtslIndex - endIndex;
                         text = tempText.Substring(0, jtslIndex).Replace("答案:", "").Replace("答案:", "");
                         treenodecurrectsubject.questionthinking = tempText.Substring(jtslIndex).Replace("解析:", "").Replace("解析:", "");
                     }
                     else
                     {
                         treenodecurrectsubject.questionthinking = "";
                         text = tempText.Replace("答案:", "").Replace("答案:", "");
                     }
                 }

                 treenodecurrectsubject.answer.subjecthtmlanswer = text;
                 treenodecurrectsubject.answer.subjecttextanswer = NoHTML(text);
                 treenodecurrectsubject.subjecthtmlcontent = treenodecurrectsubject.subjecthtmlcontent.Substring(0, endIndex);
             }
        }
Пример #5
0
        private static void GetAnswer2(Subject item, Subject treenodecurrect,string[] regexs)
        {
            var htmlAnswer = item.subjecthtmlcontent;
             foreach (var sb in regexs)
             {
                 string tempsb = sb;
                 if (tempsb.IndexOf("^") == 0)
                 {
                     tempsb = tempsb.Substring(1);
                 }
                 var match = Regex.Match(htmlAnswer, tempsb);
                 if (match.Success)
                 {
                     int endIndex = GetStrIndex(htmlAnswer, match.Groups["pre"].Value, true);
                     htmlAnswer = htmlAnswer.Substring(0, endIndex) + htmlAnswer.Substring(endIndex + match.Groups["pre"].Value.Length);
                 }
             }

             int jtslIndex = GetStrIndex(htmlAnswer, "(<p\\s*>)*解题思路[::].+?(</p>)*", false);

             if (jtslIndex != 0)
             {
                 treenodecurrect.questionthinking = htmlAnswer.Substring(jtslIndex).Replace("解题思路:", "").Replace("解题思路:", "");
                 htmlAnswer = htmlAnswer.Substring(0, jtslIndex);
             }
             else
             {
                 jtslIndex = GetStrIndex(htmlAnswer, "(<p\\s*>)*解析[::].+?(</p>)*", false);

                 if (jtslIndex != 0)
                 {
                     treenodecurrect.questionthinking = htmlAnswer.Substring(jtslIndex).Replace("解析:", "").Replace("解析:", "");
                     htmlAnswer = htmlAnswer.Substring(0, jtslIndex);
                 }
             }

             treenodecurrect.answer.subjecthtmlanswer = htmlAnswer;
             treenodecurrect.answer.subjecttextanswer = NoHTML(htmlAnswer).Trim();
        }
Пример #6
0
 private static bool SelectAnswerPair(Subject subjectitem, int i, bool isanswer)
 {
     if (subjectitem.answer.subjecttextanswer != null)
      {
          switch (i)
          {
              case 1:
                  if (subjectitem.answer.subjecttextanswer.Contains("A") || subjectitem.answer.subjecttextanswer.Contains("a"))
                      isanswer = true;
                  break;
              case 2:
                  if (subjectitem.answer.subjecttextanswer.Contains("B") || subjectitem.answer.subjecttextanswer.Contains("b"))
                      isanswer = true;
                  break;
              case 3:
                  if (subjectitem.answer.subjecttextanswer.Contains("C") || subjectitem.answer.subjecttextanswer.Contains("c"))
                      isanswer = true;
                  break;
              case 4:
                  if (subjectitem.answer.subjecttextanswer.Contains("D") || subjectitem.answer.subjecttextanswer.Contains("d"))
                      isanswer = true;
                  break;
              case 5:
                  if (subjectitem.answer.subjecttextanswer.Contains("E") || subjectitem.answer.subjecttextanswer.Contains("e"))
                      isanswer = true;
                  break;
              case 6:
                  if (subjectitem.answer.subjecttextanswer.Contains("F") || subjectitem.answer.subjecttextanswer.Contains("f"))
                      isanswer = true;
                  break;
              case 7:
                  if (subjectitem.answer.subjecttextanswer.Contains("G") || subjectitem.answer.subjecttextanswer.Contains("g"))
                      isanswer = true;
                  break;
              case 8:
                  if (subjectitem.answer.subjecttextanswer.Contains("H") || subjectitem.answer.subjecttextanswer.Contains("h"))
                      isanswer = true;
                  break;
              case 9:
                  if (subjectitem.answer.subjecttextanswer.Contains("I") || subjectitem.answer.subjecttextanswer.Contains("i"))
                      isanswer = true;
                  break;
          }
      }
      return isanswer;
 }
Пример #7
0
        /// <summary>
        /// 上传前整理treeview中节点内容,并生成最终上传内容
        /// </summary>
        /// <param name="treenode"></param>
        /// <param name="subjectkind"></param>
        /// <param name="subjectItem"></param>
        private void createSubjectItem(Subject subjectParent, ref SubjectItem subjectItem)
        {
            foreach (var subject in subjectParent.ListChild)
            {
                subject.subjecthtmlcontent = subject.subjecthtmlcontent.Replace("<check>", "").Replace("</check>", "").Replace("<nocheck>", "").Replace("</nocheck>", "");
                SubjectItem subjectItemtemp = new SubjectItem();
                //插入节信息
                subjectItemtemp.subjectkinds = subject.subjecttextcontent;
                string html = ReplaceImgNbsp(subject.subjecthtmlcontent);
                html = Regex.Replace(html, @"^<pre[^>]*>([\s\S]+?)</pre>(.*)", "$1$2", RegexOptions.IgnoreCase);
                subjectItemtemp.subjecthtmlcontent = html;

                //替换答案中图片中的\r\n
                subject.answer.subjecthtmlanswer = ReplaceImgNbsp(subject.answer.subjecthtmlanswer);

                //匹配图片中的img src内容返回src地址
                //string timedir = "/files/tsubjectfile/" + DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day + "/" + "image/";
                List<string> img = new List<string>();
                img.AddRange(HtmlUtil.imgSrcForName(ref subjectItemtemp.subjecthtmlcontent, uploadimgsdic));//防火html中img图片地址列表,并修改地址为网络地址

                subjectItemtemp.subjecttextcontent = subject.subjecttextcontent;
                subjectItemtemp.questionthinking = SubjectTool.ReplaceHTML(subject.questionthinking,false);
                subjectItemtemp.score = subject.分值;
                subjectItemtemp.sequence = subject.套卷序号;
                //subjectItemtemp.selectItemCount = subject.选项个数;
                subjectItemtemp.isobjective = subject.客观题.GetHashCode();
                subjectItemtemp.subjecttype = subject.题目类型.GetHashCode().ToString();

                //过滤html中vml内容,存入过滤后的字段
                //subjectItemtemp.subjectfilterhtmlcontent = SubjectTypeMark(subjectItemtemp.subjecthtmlcontent, subject.题目类型.GetHashCode());

                if (subject.answer != null && subject.answer.subjecthtmlanswer != null)//处理答案相关数据
                {
                    //subjectItemtemp.answerbinarycontent = subject.answer.subjectbinaryanswer;
                    string htmla = subject.answer.subjecthtmlanswer;
                    subjectItemtemp.answerhtmlcontent = htmla;
                    img.AddRange(HtmlUtil.imgSrcForName(ref subjectItemtemp.answerhtmlcontent, uploadimgsdic));
                    subjectItemtemp.answertextcontent = subject.answer.subjecttextanswer;

                    //过滤html中vml内容,单选题、多选题、对错题才用存文本形式
                    if (subjectItemtemp.subjecttype.Equals(Subject.SubjecttypeEnum.单选题) || subjectItemtemp.subjecttype.Equals(Subject.SubjecttypeEnum.多选题) || subjectItemtemp.subjecttype.Equals(Subject.SubjecttypeEnum.判断题))
                    {
                        subjectItemtemp.answerhtmlcontent = subject.answer.subjecttextanswer.Trim();
                    }
                }

                //替换解题思路中的图片
                if (!string.IsNullOrEmpty(subject.questionthinking))
                {
                    subjectItemtemp.questionthinking = ReplaceImgNbsp(subject.questionthinking);
                    img.AddRange(HtmlUtil.imgSrcForName(ref subjectItemtemp.questionthinking, uploadimgsdic));
                }

                //替换音频
                img.AddRange(HtmlUtil.Mp3SrcForName(ref subjectItemtemp.subjecthtmlcontent, uploadimgsdic));

                subjectItemtemp.img = img.ToArray();
                SubjectTypeMarkAndCreateOption(ref subjectItemtemp, subject.题目类型.GetHashCode());//选项标识并列出选项

                subjectItem.subSubjectItemList.Add(subjectItemtemp);

                if(subject.ListChild.Count>0)
                {
                    createSubjectItem(subject, ref subjectItemtemp);
                }
            }
        }
Пример #8
0
        private void btnOneIdentify_Click(object sender, EventArgs e)
        {
            if (!ChkDocExist())
            {
                return;
            }

               int start = mainContent.WordBrowers.document.Application.Selection.Range.Start;
               int end =  mainContent.WordBrowers.document.Application.Selection.Range.End;
               var currentItem = allListSubject.Find(x => x.rangestart == start);

               if (currentItem == null)
               {
               MessageBox.Show("系统未匹配到题目,请您选择时,从题号开始");
               }
               else
               {
               Subject newSubject = new Subject();
               mainContent.WordBrowers.document.Application.Selection.Range.Copy();//不包括题目前ID号内容的范围
               string html = ClipboardHelper.getClipboardHtml();
               HtmlUtil.HtmlPictureMove(ref html);
               html = GetReplaceHTML(html).Replace("<u></u>", "");

               if (html == "")
               {
                   return;
               }

               //是否处理,序列已经处理,则不用再处理
               bool isHandle = false;
               var strsPre = MatchArray.BigSubjectPre;

               foreach (var sb in strsPre)
               {
                   string tempsb = sb;

                   if (tempsb.IndexOf("^") == 0)
                   {
                       tempsb = tempsb.Substring(1);
                   }
                   var match = Regex.Match(html, tempsb);
                   if (match.Success)
                   {
                       html = html.Substring(0, html.IndexOf(match.Groups["pre"].Value)) + html.Substring(html.IndexOf(match.Groups["pre"].Value) + match.Groups["pre"].Value.Length);
                       isHandle = true;
                       break;
                   }
               }

               if (!isHandle)
               {
                   strsPre = MatchArray.SubjectPreStructure.subjectPre;
                   //第一层需要去掉第二层的内容
                   foreach (var sb in strsPre)
                   {
                       string tempsb = sb;
                       if (tempsb.IndexOf("^") == 0)
                       {
                           tempsb = tempsb.Substring(1);
                       }
                       var match = Regex.Match(html, tempsb);
                       if (match.Success)
                       {
                           html = html.Substring(0, html.IndexOf(match.Groups["pre"].Value)) + html.Substring(html.IndexOf(match.Groups["pre"].Value) + match.Groups["pre"].Value.Length);
                           isHandle = true;
                           break;
                       }
                   }
               }

               if (!isHandle)
               {
                   strsPre = MatchArray.SubjectPreStructure.childsubjectStructure.subjectPre;
                   foreach (var sb in strsPre)
                   {
                       string tempsb = sb;
                       if (tempsb.IndexOf("^") == 0)
                       {
                           tempsb = tempsb.Substring(1);
                       }
                       var match = Regex.Match(html, tempsb);
                       if (match.Success)
                       {
                           html = html.Substring(0, html.IndexOf(match.Groups["pre"].Value)) + html.Substring(html.IndexOf(match.Groups["pre"].Value) + match.Groups["pre"].Value.Length);
                           break;
                       }
                   }
               }

               //--
               newSubject.answer = new AnswerContent();
               newSubject.answer.selectType = currentItem.answer.selectType;
               newSubject.subjecthtmlcontent = html;

               //没有答案,则全部为题干
               if (html.IndexOf("答案:") == -1 && html.IndexOf("答案:") == -1)
               {
                   newSubject.answer.subjecthtmlanswer = currentItem.answer.subjecthtmlanswer;
                   newSubject.answer.subjecttextanswer = currentItem.answer.subjecttextanswer;
               }
               else
               {
                   //有答案,则要进行分割
                   SubjectTool.GetAnswer(newSubject);
               }

               newSubject.subjecttextcontent = SubjectTool.NoHTML(newSubject.subjecthtmlcontent);
               newSubject.分值 = currentItem.分值;
               newSubject.Index = currentItem.Index;
               newSubject.套卷序号 = currentItem.套卷序号;
               newSubject.Id = currentItem.Id;
               newSubject.ListChild = currentItem.ListChild;
               SubjectTool.SetSubjectType(newSubject);
               SetSubject(currentItem, newSubject);
               var nextItem = allListSubject.Find(x => x.rangestart > currentItem.rangestart);

               //不是最后一个
               if (nextItem != null)
               {
                   //得到差值
                   var num = end - nextItem.rangestart;
                   allListSubject.Where(x => x.rangestart > currentItem.rangestart).ToList().ForEach(x => {
                       x.rangestart += num;
                   });
               }

               ReloadSubject(true);
               //--

               MessageBox.Show("识别成功", "提示");
               }
        }
Пример #9
0
 void SetSubject(Subject oldSubject, Subject newSubject)
 {
     var html = newSubject.subjecthtmlcontent.Replace("<check>", "").Replace("</check>", "").Replace("<nocheck>", "").Replace("</nocheck>", "");
     Regex regex = new Regex("<object.*data=\"(.+?)\".*FlashVars=\"(.+?)\".*>(.+?)</object>",RegexOptions.IgnoreCase|RegexOptions.Singleline);
     foreach (Match match in regex.Matches(html))
     {
         if (match.Success)
         {
             //需要替换
             if (match.Groups[3].Value.Trim() == "")
             {
                 html = html.Replace("</object>", "<param name=\"movie\" value=\""+match.Groups[1].Value+"\"><param name=\"FlashVars\" value=\""+match.Groups[2].Value+"\"><param name=\"quality\" value=\"high\"><param name=\"menu\" value=\"false\"><param name=\"wmode\" value=\"transparent\"></object>");
             }
         }
     }
     oldSubject.answer.selectType = newSubject.answer.selectType;
     oldSubject.answer.subjecthtmlanswer = newSubject.answer.subjecthtmlanswer;
     oldSubject.answer.subjecttextanswer = newSubject.answer.subjecttextanswer;
     oldSubject.subjecthtmlcontent = html.Replace("<u></u>", "");
     oldSubject.subjecttextcontent = newSubject.subjecttextcontent;
     oldSubject.答案 = newSubject.答案;
     oldSubject.分值 = newSubject.分值;
     oldSubject.客观题 = newSubject.客观题;
     oldSubject.Index = newSubject.Index;
     oldSubject.套卷序号 = newSubject.套卷序号;
     oldSubject.题目类型 = newSubject.题目类型;
     oldSubject.Id = newSubject.Id;
     oldSubject.questionthinking = newSubject.questionthinking;
     //oldSubject.选项个数 = newSubject.选项个数;
     oldSubject.answers.Clear();
     SubjectTool.SubjectTypeMarkAndCreateOption(oldSubject);
 }
Пример #10
0
        private void SetNode(Subject subject)
        {
            //没有答案
            if ((subject.answer == null || string.IsNullOrEmpty(subject.answer.subjecttextanswer)) && subject.题目类型 != Subject.SubjecttypeEnum.阅读理解题)
            {
                //客观题,一定要添加答案
                if (subject.客观题 == Subject.ObjectiveEnum.是)
                {
                    subject.客观题 = Subject.ObjectiveEnum.否;
                }

            }
            else
            {
                //if (Regex.Matches(subject.subjecthtmlcontent, "[A-G][..、][^A-G]").Count > 1)        //mark
                if (Regex.Matches(subject.subjecthtmlcontent, "[A-G][..、]").Count > 1)
                {
                    //没有答案,则为单选题
                    if ((subject.answer != null && !string.IsNullOrEmpty(subject.answer.subjecttextanswer)))
                    {
                        if ((Regex.IsMatch(subject.subjecthtmlcontent.ToLower(), @"<u[^>]*>\s*?</u[^>]*>", RegexOptions.Singleline)
                            || Regex.IsMatch(subject.subjecthtmlcontent.ToLower(), @"_{3,}", RegexOptions.Singleline))
                            && !Regex.IsMatch(subject.subjecthtmlcontent, @"()|\(\)", RegexOptions.Singleline)
                            && !Regex.IsMatch(subject.answer.subjecttextanswer.Trim().ToUpper(), @"^[A-G]{1,7}$", RegexOptions.Singleline))
                        {
                            subject.题目类型 = Subject.SubjecttypeEnum.填空题;
                        }
                        else if (Regex.IsMatch(subject.answer.subjecttextanswer.Trim().ToUpper(), @"^正确{1}$|^错误{1}$|^对{1}$|^错{1}$|^YES{1}$|^NO{1}$", RegexOptions.Singleline))
                        {
                            if (subject.题目类型 != Subject.SubjecttypeEnum.判断题)
                            {
                                subject.题目类型 = Subject.SubjecttypeEnum.判断题;
                                subject.客观题 = Subject.ObjectiveEnum.是;
                            }
                        }
                        //如果有多个答案,则为多选题
                        else if (Regex.IsMatch(subject.answer.subjecttextanswer.Trim().ToUpper(), "^[A-G]{2,26}$") || subject.subjecthtmlcontent.IndexOf("多选") != -1)
                        {
                            if (subject.题目类型 != Subject.SubjecttypeEnum.多选题)
                            {
                                subject.题目类型 = Subject.SubjecttypeEnum.多选题;
                                subject.客观题 = Subject.ObjectiveEnum.是;
                            }
                        }
                        else if(Regex.IsMatch(subject.answer.subjecttextanswer.Trim().ToUpper(), "^[A-G]{1}$"))
                        {
                            if (subject.题目类型 != Subject.SubjecttypeEnum.单选题)
                            {
                                subject.题目类型 = Subject.SubjecttypeEnum.单选题;
                                subject.客观题 = Subject.ObjectiveEnum.是;
                            }
                        }
                        else
                        {
                            if (subject.题目类型 != Subject.SubjecttypeEnum.简答题)
                            {
                                subject.题目类型 = Subject.SubjecttypeEnum.简答题;
                                subject.客观题 = Subject.ObjectiveEnum.否;
                            }
                        }
                    }
                    else
                    {
                        if (subject.题目类型 != Subject.SubjecttypeEnum.单选题)
                        {
                            subject.题目类型 = Subject.SubjecttypeEnum.单选题;
                            subject.客观题 = Subject.ObjectiveEnum.是;
                        }
                    }

                }
                //else if (subject.subjecthtmlcontent.ToLower().IndexOf("</u>") != -1 || subject.subjecthtmlcontent.IndexOf("__") != -1)
                else if (Regex.IsMatch(subject.subjecthtmlcontent.ToLower(), @"<u[^>]*>\s*?</u[^>]*>", RegexOptions.Singleline) || Regex.IsMatch(subject.subjecthtmlcontent.ToLower(), @"_{3,}", RegexOptions.Singleline))
                {
                    if (subject.题目类型 != Subject.SubjecttypeEnum.填空题)
                    {
                        if (!(subject.题目类型 == Subject.SubjecttypeEnum.阅读理解题 && subject.ListChild.Count > 0))
                        {
                            subject.题目类型 = Subject.SubjecttypeEnum.填空题;
                            subject.客观题 = Subject.ObjectiveEnum.是;
                        }
                    }
                }
                //else if ((subject.answer.subjecttextanswer.IndexOf("正确") != -1 || subject.answer.subjecttextanswer.IndexOf("对") != -1 || subject.answer.subjecttextanswer.IndexOf("错误") != -1 || subject.answer.subjecttextanswer.IndexOf("错") != -1) && subject.answer.subjecttextanswer.Length < 10)
                else if (Regex.IsMatch(subject.answer.subjecttextanswer.Trim().ToUpper(), @"^正确{1}$|^错误{1}$|^对{1}$|^错{1}$|^YES{1}$|^NO{1}$", RegexOptions.Singleline))
                {
                    if (subject.题目类型 != Subject.SubjecttypeEnum.判断题)
                    {
                        subject.题目类型 = Subject.SubjecttypeEnum.判断题;
                        subject.客观题 = Subject.ObjectiveEnum.是;
                    }
                }
                else
                {
                    subject.题目类型 = Subject.SubjecttypeEnum.简答题;
                    subject.客观题 = Subject.ObjectiveEnum.否;
                }
            }
        }
Пример #11
0
        private int LoadMsg(int height, Subject item, List<Subject> listSubject)
        {
            var rtMsg = SubjectTool.CheckSubjectType(item,listSubject);
            if (!rtMsg.Item1 && rtMsg.Item2 == "")
            {

            }else if(item.Level ==1)
            {
                listError.Add(new Tuple<bool, string, int, Subject>(rtMsg.Item1, rtMsg.Item2, rtMsg.Item3, item));
            }
            else
            {
                listError.Add(new Tuple<bool, string, int, Subject>(rtMsg.Item1,rtMsg.Item2,rtMsg.Item3,item));
                //添加复选框
                panel4.Controls.Add(new CheckBox()
                {
                    Top = height,
                    Width = 18,
                    Enabled = rtMsg.Item1,
                    Checked = rtMsg.Item1,
                    Tag = item,
                    Name = item.Id
                });
                panel4.ForeColor = Color.Red;
                //添加提示文本
                Label lb1 = new Label()
                {
                    Top = height + 7,
                    Left = 18,
                    Height = 22,
                    Text = rtMsg.Item2,
                    Width = 640,
                    ForeColor = rtMsg.Item1 ? Color.Red : (rtMsg.Item3 == 0 ? Color.Blue : Color.Blue)
                };
                panel4.Controls.Add(lb1);
                string text = "修复此项[必须]";
                if(!rtMsg.Item1)
                {
                    if(rtMsg.Item3==1)
                    {
                        text = "手动修复[建议]";
                    }else if(rtMsg.Item3==0)
                    {
                         text = "手动修复[必须]";
                    }
                }
                //添加修复按钮
                var linklable = new LinkLabel()
                {
                    Top = height + 7,
                    Left = 668,
                    Height = 22,
                    Text = text,
                    Width = 90,
                    Tag = item,
                    Name = "linklable_" + item.Id,
                    Enabled = rtMsg.Item1
                };
                linklable.LinkClicked += linklable_LinkClicked;
                panel4.Controls.Add(linklable);
                height += 22;
            }
            return height;
        }