|
@@ -15,7 +15,7 @@ using TEAMModelOS.SDK.Helper.Common.FileHelper;
|
|
|
using TEAMModelOS.SDK.Helper.Common.StringHelper;
|
|
|
using TEAMModelOS.SDK.Helper.Security.ShaHash;
|
|
|
using TEAMModelOS.Service.Models.Core;
|
|
|
-using TEAMModelOS.Service.Models.Evaluation.Dtos.Own;
|
|
|
+using TEAMModelOS.Service.Models.Evaluation.Models;
|
|
|
using TEAMModelOS.Service.Services.Evaluation.Interfaces;
|
|
|
namespace TEAMModelOS.Service.Services.Evaluation.Implements
|
|
|
{
|
|
@@ -35,7 +35,7 @@ namespace TEAMModelOS.Service.Services.Evaluation.Implements
|
|
|
{ "Single", "【单选题】|【结束】" }, { "Multiple", "【多选题】|【结束】" },
|
|
|
{ "Judge", "【判断题】|【结束】" }, { "Complete", "【填空题】|【结束】" },
|
|
|
{ "Subjective", "【问答题】|【结束】" } , { "Compose", "【综合题】|【完结】" }};
|
|
|
- public List<ExerciseDto> AnalyzeWordAsync(string html, string Lang)
|
|
|
+ public List<ItemInfo> AnalyzeWordAsync(string html, string Lang)
|
|
|
{
|
|
|
//去除class 以及span标签"
|
|
|
string classpattern = "class=\"([^\"]*)\"";
|
|
@@ -44,34 +44,34 @@ namespace TEAMModelOS.Service.Services.Evaluation.Implements
|
|
|
html = Regex.Replace(html, pattern, "");
|
|
|
html = html.Replace("\t", " ").Replace("<span>", "").Replace("</span>", "").Replace("dir=\"ltr\"", "");
|
|
|
Dictionary<string, List<string>> TestInType = ConvertTest(html);
|
|
|
- List<ExerciseDto> tests = new List<ExerciseDto>();
|
|
|
+ List<ItemInfo> tests = new List<ItemInfo>();
|
|
|
foreach (string key in TestInType.Keys)
|
|
|
{
|
|
|
switch (key)
|
|
|
{
|
|
|
case "Single":
|
|
|
- List<ExerciseDto> exercisesSingle = SingleConvert(key, TestInType[key]);
|
|
|
- exercisesSingle.ForEach(x => { x.PShaCode = x.ShaCode; });
|
|
|
+ List<ItemInfo> exercisesSingle = SingleConvert(key, TestInType[key]);
|
|
|
+ exercisesSingle.ForEach(x => { x.pShaCode = x.shaCode; });
|
|
|
tests.AddRange(exercisesSingle); break;
|
|
|
case "Multiple":
|
|
|
- List<ExerciseDto> exercisesMultiple = MultipleConvert(key, TestInType[key]);
|
|
|
- exercisesMultiple.ForEach(x => { x.PShaCode = x.ShaCode; });
|
|
|
+ List<ItemInfo> exercisesMultiple = MultipleConvert(key, TestInType[key]);
|
|
|
+ exercisesMultiple.ForEach(x => { x.pShaCode = x.shaCode; });
|
|
|
tests.AddRange(exercisesMultiple); break;
|
|
|
case "Judge":
|
|
|
- List<ExerciseDto> exercisesJudge = JudgeConvert(key, TestInType[key]);
|
|
|
- exercisesJudge.ForEach(x => { x.PShaCode = x.ShaCode; });
|
|
|
+ List<ItemInfo> exercisesJudge = JudgeConvert(key, TestInType[key]);
|
|
|
+ exercisesJudge.ForEach(x => { x.pShaCode = x.shaCode; });
|
|
|
tests.AddRange(exercisesJudge); break;
|
|
|
case "Complete":
|
|
|
- List<ExerciseDto> exercisesComplete = CompleteConvert(key, TestInType[key]);
|
|
|
- exercisesComplete.ForEach(x => { x.PShaCode = x.ShaCode; });
|
|
|
+ List<ItemInfo> exercisesComplete = CompleteConvert(key, TestInType[key]);
|
|
|
+ exercisesComplete.ForEach(x => { x.pShaCode = x.shaCode; });
|
|
|
tests.AddRange(exercisesComplete); break;
|
|
|
case "Subjective":
|
|
|
- List<ExerciseDto> exercisesSubjective = SubjectiveConvert(key, TestInType[key]);
|
|
|
- exercisesSubjective.ForEach(x => { x.PShaCode = x.ShaCode; });
|
|
|
+ List<ItemInfo> exercisesSubjective = SubjectiveConvert(key, TestInType[key]);
|
|
|
+ exercisesSubjective.ForEach(x => { x.pShaCode = x.shaCode; });
|
|
|
tests.AddRange(exercisesSubjective); break;
|
|
|
case "Compose":
|
|
|
- List<ExerciseDto> exercisesCompose = ComposeConvert(key, TestInType[key], Lang);
|
|
|
- exercisesCompose.ForEach(x => { x.PShaCode = x.ShaCode; });
|
|
|
+ List<ItemInfo> exercisesCompose = ComposeConvert(key, TestInType[key], Lang);
|
|
|
+ exercisesCompose.ForEach(x => { x.pShaCode = x.shaCode; });
|
|
|
tests.AddRange(exercisesCompose);
|
|
|
break;
|
|
|
default: break;
|
|
@@ -80,42 +80,42 @@ namespace TEAMModelOS.Service.Services.Evaluation.Implements
|
|
|
return tests;
|
|
|
}
|
|
|
|
|
|
- private List<ExerciseDto> SingleConvert(string TypeKey, List<string> list)
|
|
|
+ private List<ItemInfo> SingleConvert(string TypeKey, List<string> list)
|
|
|
{
|
|
|
- List<ExerciseDto> testInfos = OptionProcess(TypeKey, list);
|
|
|
+ List<ItemInfo> testInfos = OptionProcess(TypeKey, list);
|
|
|
return testInfos;
|
|
|
}
|
|
|
|
|
|
- private List<ExerciseDto> MultipleConvert(string TypeKey, List<string> list)
|
|
|
+ private List<ItemInfo> MultipleConvert(string TypeKey, List<string> list)
|
|
|
{
|
|
|
- List<ExerciseDto> testInfos = OptionProcess(TypeKey, list);
|
|
|
+ List<ItemInfo> testInfos = OptionProcess(TypeKey, list);
|
|
|
return testInfos;
|
|
|
}
|
|
|
|
|
|
- private List<ExerciseDto> JudgeConvert(string TypeKey, List<string> list)
|
|
|
+ private List<ItemInfo> JudgeConvert(string TypeKey, List<string> list)
|
|
|
{
|
|
|
- List<ExerciseDto> testInfos = OptionProcess(TypeKey, list);
|
|
|
+ List<ItemInfo> testInfos = OptionProcess(TypeKey, list);
|
|
|
return testInfos;
|
|
|
}
|
|
|
|
|
|
|
|
|
- private List<ExerciseDto> CompleteConvert(string TypeKey, List<string> list)
|
|
|
+ private List<ItemInfo> CompleteConvert(string TypeKey, List<string> list)
|
|
|
{
|
|
|
- List<ExerciseDto> testInfos = CompleteProcess(TypeKey, list);
|
|
|
+ List<ItemInfo> testInfos = CompleteProcess(TypeKey, list);
|
|
|
return testInfos;
|
|
|
}
|
|
|
- private List<ExerciseDto> CompleteProcess(string TypeKey, List<string> tests)
|
|
|
+ private List<ItemInfo> CompleteProcess(string TypeKey, List<string> tests)
|
|
|
{
|
|
|
//List<string> tests = ConvertTest(testHtml);
|
|
|
- List<ExerciseDto> testInfos = ConvertTestInfo(tests, TypeKey);
|
|
|
+ List<ItemInfo> testInfos = ConvertTestInfo(tests, TypeKey);
|
|
|
HtmlDocument doc = new HtmlDocument();
|
|
|
- foreach (ExerciseDto testInfo in testInfos)
|
|
|
+ foreach (ItemInfo testInfo in testInfos)
|
|
|
{
|
|
|
List<string> ans = new List<string>();
|
|
|
- testInfo.Question = testInfo.Question.Replace(AnalysisTag, "").Replace(SummaryTag, "").Replace(AnswerTag, "");
|
|
|
+ testInfo.question = testInfo.question.Replace(AnalysisTag, "").Replace(SummaryTag, "").Replace(AnswerTag, "");
|
|
|
string regRex = CompleteStart + "([\\s\\S]*?)" + CompleteEnd;
|
|
|
List<ReplaceDto> replaces = new List<ReplaceDto>();
|
|
|
- var m = Regex.Match(testInfo.Question, regRex);
|
|
|
+ var m = Regex.Match(testInfo.question, regRex);
|
|
|
int index = 1;
|
|
|
while (m.Success)
|
|
|
{
|
|
@@ -134,35 +134,35 @@ namespace TEAMModelOS.Service.Services.Evaluation.Implements
|
|
|
m = m.NextMatch();
|
|
|
index++;
|
|
|
}
|
|
|
- string textImg = testInfo.Question;
|
|
|
+ string textImg = testInfo.question;
|
|
|
//消除答案
|
|
|
foreach (ReplaceDto replace in replaces)
|
|
|
{
|
|
|
- testInfo.Question = testInfo.Question.Replace(replace.oldstr, replace.newstr);
|
|
|
- testInfo.Question = HtmlHelper.DoUselessTag(testInfo.Question);
|
|
|
+ testInfo.question = testInfo.question.Replace(replace.oldstr, replace.newstr);
|
|
|
+ testInfo.question = HtmlHelper.DoUselessTag(testInfo.question);
|
|
|
//只要题干文字和图片
|
|
|
//不加underline标记
|
|
|
- textImg = testInfo.Question.Replace(replace.oldstr, "");
|
|
|
+ textImg = testInfo.question.Replace(replace.oldstr, "");
|
|
|
|
|
|
}
|
|
|
textImg = HtmlHelper.DoTextImg(textImg);
|
|
|
- testInfo.ShaCode = ShaHashHelper.GetSHA1(textImg);
|
|
|
+ testInfo.shaCode = ShaHashHelper.GetSHA1(textImg);
|
|
|
//处理解析
|
|
|
- testInfo.Explain = testInfo.Explain.Replace(AnalysisTag, "").Replace(EndedTag, "");
|
|
|
- testInfo.Explain = HtmlHelper.DoUselessTag(testInfo.Explain);
|
|
|
- testInfo.Answer.AddRange(ans);
|
|
|
+ testInfo.explain = testInfo.explain.Replace(AnalysisTag, "").Replace(EndedTag, "");
|
|
|
+ testInfo.explain = HtmlHelper.DoUselessTag(testInfo.explain);
|
|
|
+ testInfo.answer.AddRange(ans);
|
|
|
}
|
|
|
return testInfos;
|
|
|
}
|
|
|
|
|
|
- private List<ExerciseDto> OptionProcess(string typeKey, List<string> list)
|
|
|
+ private List<ItemInfo> OptionProcess(string typeKey, List<string> list)
|
|
|
{
|
|
|
string[] optionsKeys = Options.Select(s => s.ToString()).ToArray();
|
|
|
- List<ExerciseDto> testInfos = ConvertTestInfo(list, typeKey);
|
|
|
- foreach (ExerciseDto testInfo in testInfos)
|
|
|
+ List<ItemInfo> testInfos = ConvertTestInfo(list, typeKey);
|
|
|
+ foreach (ItemInfo testInfo in testInfos)
|
|
|
{
|
|
|
string optsRgex = optionsKeys[0] + "(\\.|\\.|\\、|\\:|\\:)([\\s\\S]*?)" + AnswerTag;
|
|
|
- string optsHtml = Regex.Match(testInfo.Question, optsRgex).Value;
|
|
|
+ string optsHtml = Regex.Match(testInfo.question, optsRgex).Value;
|
|
|
//HtmlDocument doc = new HtmlDocument();
|
|
|
//doc.LoadHtml(optsHtml);
|
|
|
//optsHtml = doc.DocumentNode.InnerText;
|
|
@@ -177,9 +177,9 @@ namespace TEAMModelOS.Service.Services.Evaluation.Implements
|
|
|
optHtml = optHtml.Substring(2, optHtml.Length - 4);
|
|
|
optHtml = HtmlHelper.DoUselessTag(optHtml);
|
|
|
textImg.Append(HtmlHelper.DoTextImg(optHtml));
|
|
|
- testInfo.Option.Add(new CodeValue { Code = optionsKeys[i], Value = optHtml });
|
|
|
- //testInfo.Option.Add(new Dictionary<string, string> { { "code", optionsKeys[i] },{ "value", optHtml } });
|
|
|
- //testInfo.Option.TryAdd(optionsKeys[i], optHtml);
|
|
|
+ testInfo.option.Add(new CodeValue { Code = optionsKeys[i], Value = optHtml });
|
|
|
+ //testInfo.option.Add(new Dictionary<string, string> { { "code", optionsKeys[i] },{ "value", optHtml } });
|
|
|
+ //testInfo.option.TryAdd(optionsKeys[i], optHtml);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -190,18 +190,18 @@ namespace TEAMModelOS.Service.Services.Evaluation.Implements
|
|
|
optHtml = optHtml.Substring(2, optHtml.Length - 6);
|
|
|
optHtml = HtmlHelper.DoUselessTag(optHtml);
|
|
|
textImg.Append(HtmlHelper.DoTextImg(optHtml));
|
|
|
- testInfo.Option.Add(new CodeValue { Code = optionsKeys[i], Value = optHtml });
|
|
|
- //testInfo.Option.Add(new Dictionary<string, string> { { "code", optionsKeys[i] }, { "value", optHtml } });
|
|
|
- //testInfo.Option.TryAdd(optionsKeys[i], optHtml);
|
|
|
+ testInfo.option.Add(new CodeValue { Code = optionsKeys[i], Value = optHtml });
|
|
|
+ //testInfo.option.Add(new Dictionary<string, string> { { "code", optionsKeys[i] }, { "value", optHtml } });
|
|
|
+ //testInfo.option.TryAdd(optionsKeys[i], optHtml);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//处理题干
|
|
|
- testInfo.Question = testInfo.Question.Replace(optsHtml, "").Replace(SummaryTag, "").Replace(AnswerTag, "");
|
|
|
- testInfo.Question = HtmlHelper.DoUselessTag(testInfo.Question);
|
|
|
- textImg.Append(HtmlHelper.DoTextImg(testInfo.Question));
|
|
|
- testInfo.ShaCode = ShaHashHelper.GetSHA1(textImg.ToString());
|
|
|
- List<string> answers = testInfo.Answer;
|
|
|
+ testInfo.question = testInfo.question.Replace(optsHtml, "").Replace(SummaryTag, "").Replace(AnswerTag, "");
|
|
|
+ testInfo.question = HtmlHelper.DoUselessTag(testInfo.question);
|
|
|
+ textImg.Append(HtmlHelper.DoTextImg(testInfo.question));
|
|
|
+ testInfo.shaCode = ShaHashHelper.GetSHA1(textImg.ToString());
|
|
|
+ List<string> answers = testInfo.answer;
|
|
|
HashSet<string> ans = new HashSet<string>();
|
|
|
//处理答案
|
|
|
for (int i = 0; i < answers.Count; i++)
|
|
@@ -212,71 +212,71 @@ namespace TEAMModelOS.Service.Services.Evaluation.Implements
|
|
|
ans.Add(x);
|
|
|
});
|
|
|
}
|
|
|
- testInfo.Answer = ans.ToList();
|
|
|
+ testInfo.answer = ans.ToList();
|
|
|
//处理解析
|
|
|
- testInfo.Explain = testInfo.Explain.Replace(AnalysisTag, "").Replace(EndedTag, "");
|
|
|
- testInfo.Explain = HtmlHelper.DoUselessTag(testInfo.Explain);
|
|
|
+ testInfo.explain = testInfo.explain.Replace(AnalysisTag, "").Replace(EndedTag, "");
|
|
|
+ testInfo.explain = HtmlHelper.DoUselessTag(testInfo.explain);
|
|
|
}
|
|
|
return testInfos;
|
|
|
}
|
|
|
|
|
|
|
|
|
- private List<ExerciseDto> SubjectiveConvert(string TypeKey, List<string> tests)
|
|
|
+ private List<ItemInfo> SubjectiveConvert(string TypeKey, List<string> tests)
|
|
|
{
|
|
|
// List<string> tests = ConvertTest(testHtml);
|
|
|
- List<ExerciseDto> testInfos = ConvertTestInfo(tests, TypeKey);
|
|
|
+ List<ItemInfo> testInfos = ConvertTestInfo(tests, TypeKey);
|
|
|
|
|
|
- foreach (ExerciseDto testInfo in testInfos)
|
|
|
+ foreach (ItemInfo testInfo in testInfos)
|
|
|
{
|
|
|
- testInfo.Question = testInfo.Question.Replace(AnalysisTag, "").Replace(SummaryTag, "").Replace(AnswerTag, "");
|
|
|
- testInfo.Question = HtmlHelper.DoUselessTag(testInfo.Question);
|
|
|
- StringBuilder textImg = new StringBuilder(HtmlHelper.DoTextImg(testInfo.Question));
|
|
|
- testInfo.ShaCode = ShaHashHelper.GetSHA1(textImg.ToString());
|
|
|
- for (int i = 0; i < testInfo.Answer.Count; i++)
|
|
|
+ testInfo.question = testInfo.question.Replace(AnalysisTag, "").Replace(SummaryTag, "").Replace(AnswerTag, "");
|
|
|
+ testInfo.question = HtmlHelper.DoUselessTag(testInfo.question);
|
|
|
+ StringBuilder textImg = new StringBuilder(HtmlHelper.DoTextImg(testInfo.question));
|
|
|
+ testInfo.shaCode = ShaHashHelper.GetSHA1(textImg.ToString());
|
|
|
+ for (int i = 0; i < testInfo.answer.Count; i++)
|
|
|
{
|
|
|
- testInfo.Answer[i] = testInfo.Answer[i].Replace(AnswerTag, "").Replace(AnalysisTag, "");
|
|
|
- testInfo.Answer[i] = HtmlHelper.DoUselessTag(testInfo.Answer[i]);
|
|
|
+ testInfo.answer[i] = testInfo.answer[i].Replace(AnswerTag, "").Replace(AnalysisTag, "");
|
|
|
+ testInfo.answer[i] = HtmlHelper.DoUselessTag(testInfo.answer[i]);
|
|
|
}
|
|
|
- testInfo.Explain = testInfo.Explain.Replace(AnalysisTag, "").Replace(EndedTag, "");
|
|
|
- testInfo.Explain = HtmlHelper.DoUselessTag(testInfo.Explain);
|
|
|
+ testInfo.explain = testInfo.explain.Replace(AnalysisTag, "").Replace(EndedTag, "");
|
|
|
+ testInfo.explain = HtmlHelper.DoUselessTag(testInfo.explain);
|
|
|
}
|
|
|
return testInfos;
|
|
|
}
|
|
|
|
|
|
- private List<ExerciseDto> ComposeConvert(string TypeKey, List<string> list, string Lang)
|
|
|
+ private List<ItemInfo> ComposeConvert(string TypeKey, List<string> list, string Lang)
|
|
|
{
|
|
|
- List<ExerciseDto> exerciseDtos = new List<ExerciseDto>();
|
|
|
+ List<ItemInfo> exerciseDtos = new List<ItemInfo>();
|
|
|
foreach (string html in list)
|
|
|
{
|
|
|
- ExerciseDto exercise = new ExerciseDto() { Type = TypeKey };
|
|
|
+ ItemInfo exercise = new ItemInfo() { type = TypeKey };
|
|
|
string RegexStr = ComposeStart + "([\\s\\S]*?)" + ComposeEnd;
|
|
|
Match mt = Regex.Match(html, RegexStr);
|
|
|
- exercise.Question = HtmlHelper.DoUselessTag(mt.Value.Replace(ComposeStart, "").Replace(ComposeEnd, ""));
|
|
|
+ exercise.question = HtmlHelper.DoUselessTag(mt.Value.Replace(ComposeStart, "").Replace(ComposeEnd, ""));
|
|
|
string testinfo = Regex.Replace(html, RegexStr, "").Replace(ComposeTag, CompleteStart);
|
|
|
//获取综合题的材料加每个小题的sha1Code
|
|
|
- string testQs = HtmlHelper.DoTextImg(exercise.Question);
|
|
|
- List<ExerciseDto> dtos = AnalyzeWordAsync(testinfo, Lang);
|
|
|
+ string testQs = HtmlHelper.DoTextImg(exercise.question);
|
|
|
+ List<ItemInfo> dtos = AnalyzeWordAsync(testinfo, Lang);
|
|
|
if (dtos.IsNotEmpty())
|
|
|
{
|
|
|
- dtos.ForEach(x => { testQs = testQs + x.ShaCode; });
|
|
|
- exercise.ShaCode = ShaHashHelper.GetSHA1(testQs);
|
|
|
- dtos.ForEach(x => { x.PShaCode = exercise.ShaCode; });
|
|
|
- exercise.Children.AddRange(dtos);
|
|
|
+ dtos.ForEach(x => { testQs = testQs + x.shaCode; });
|
|
|
+ exercise.shaCode = ShaHashHelper.GetSHA1(testQs);
|
|
|
+ dtos.ForEach(x => { x.pShaCode = exercise.shaCode; });
|
|
|
+ exercise.children.AddRange(dtos);
|
|
|
}
|
|
|
exerciseDtos.Add(exercise);
|
|
|
}
|
|
|
return exerciseDtos;
|
|
|
}
|
|
|
- public static List<ExerciseDto> ConvertTestInfo(List<string> tests, string TypeKey)
|
|
|
+ public static List<ItemInfo> ConvertTestInfo(List<string> tests, string TypeKey)
|
|
|
{
|
|
|
- List<ExerciseDto> testInfos = new List<ExerciseDto>();
|
|
|
+ List<ItemInfo> testInfos = new List<ItemInfo>();
|
|
|
foreach (string html in tests)
|
|
|
{
|
|
|
Dictionary<string, string> regex = new Dictionary<string, string>();
|
|
|
Dictionary<string, string> question = new Dictionary<string, string> { { "Summary", TestType[TypeKey].Split("|")[0] + "|" + AnswerTag }, { "Answer", AnswerTag + "|" + AnalysisTag }, { "Analysis", AnalysisTag + "|" + EndedTag } };
|
|
|
Dictionary<string, string> compquestion = new Dictionary<string, string> { { "Summary", TestType[TypeKey].Split("|")[0] + "|" + AnalysisTag }, { "Analysis", AnalysisTag + "|" + EndedTag } };
|
|
|
- ExerciseDto test = new ExerciseDto();
|
|
|
- test.Type = TypeKey;
|
|
|
+ ItemInfo test = new ItemInfo();
|
|
|
+ test.type = TypeKey;
|
|
|
List<string> keys = new List<string>();
|
|
|
if (TypeKey.Equals("Complete"))
|
|
|
{
|
|
@@ -296,7 +296,7 @@ namespace TEAMModelOS.Service.Services.Evaluation.Implements
|
|
|
switch (key)
|
|
|
{
|
|
|
case "Summary":
|
|
|
- test.Question = mt.Value.Replace(TestType[TypeKey].Split("|")[0], ""); break;
|
|
|
+ test.question = mt.Value.Replace(TestType[TypeKey].Split("|")[0], ""); break;
|
|
|
case "Answer":
|
|
|
string Answer = mt.Value;
|
|
|
///单选或多选,判断答案 脱html标签
|
|
@@ -306,9 +306,9 @@ namespace TEAMModelOS.Service.Services.Evaluation.Implements
|
|
|
doc.LoadHtml(mt.Value);
|
|
|
Answer = doc.DocumentNode.InnerText;
|
|
|
}
|
|
|
- test.Answer = new List<string>() { Answer }; break;
|
|
|
+ test.answer = new List<string>() { Answer }; break;
|
|
|
case "Analysis":
|
|
|
- test.Explain = mt.Value; break;
|
|
|
+ test.explain = mt.Value; break;
|
|
|
default: break;
|
|
|
}
|
|
|
}
|