pic_pos_judge.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #!/usr/bin/env/python
  2. # -*- coding:utf-8 -*-
  3. import re
  4. def img_regroup(item_list):
  5. """
  6. 判断图片是否存在错位,否则重新划分所属
  7. 排除 某个题的题文都是图片的情况!!!
  8. :param item_list: 第一次进行题目切分的结果
  9. :return:
  10. """
  11. # ------------题目开头图片分错判断---统计信息-----------------
  12. no_pic_id = []
  13. item_pic_end = [] # 收集题目末尾的图片
  14. have_pic_info = [0] * len(item_list)
  15. item_pic_type1_id = []
  16. temp_res = []
  17. bef_con = item_list[0]["content"]
  18. for k, sub_res in enumerate(item_list):
  19. raw_cont = sub_res["content"]
  20. end_pic = []
  21. if re.match(r"\n*\s*(<imgsrc.*?/>[\s\n]*)*?$", sub_res["content"]) is None:
  22. end_pic = re.findall("\n(<imgsrc\d+ w_h=[^A-Z$]*?/>\s*(<imgsrc\d+ w_h=[^A-Z$]*?/>)*?)\n?$", sub_res["content"])
  23. # print(end_pic)
  24. if end_pic:
  25. item_pic_end.append(re.findall("<imgsrc.+?/>", end_pic[0][0]))
  26. temp_res.append(sub_res)
  27. temp_res[-1]["content"] = re.split("\n<imgsrc.+?/>\s*(<imgsrc.+?/>)*?\n?$", sub_res["content"])[0]
  28. else:
  29. item_pic_end.append("")
  30. temp_res.append(sub_res)
  31. if 'susp_pic' in sub_res:
  32. item_pic_type1_id.append(k)
  33. # 统计---本题没有图片,前一题有图片,且本题提示了图片信息---这样的题目id
  34. if re.search("如[上下左右]?图|下[面列]图中", raw_cont):
  35. have_pic_info[k] = 1
  36. if "imgsrc" not in raw_cont:
  37. if k > 0 and "imgsrc" in bef_con and 'susp_pic' not in sub_res:
  38. no_pic_id.append(k)
  39. bef_con = raw_cont # item_list[k-1]["content"]和raw_cont对不上,不知道为啥
  40. print("no_pic_id索引:", no_pic_id)
  41. print("item_pic_type1_id:", item_pic_type1_id)
  42. print("item_pic_end:",item_pic_end,len(item_pic_end))
  43. # pprint(temp_res)
  44. # 开始图片位置纠错--------------------------------------------------
  45. right_after_corret = True
  46. if no_pic_id: # 图片可能是公式图片或公式截图
  47. for nn, i in enumerate(no_pic_id):
  48. st = 0 if nn == 0 else no_pic_id[nn - 1] + 1
  49. if item_pic_end[i - 1]:
  50. temp_res[i]["content"] += "\n" + item_pic_end[i - 1][-1] # 默认取一个
  51. if item_pic_end[i - 1][:-1]:
  52. temp_res[i-1]["content"] += "\n" + "\n".join(item_pic_end[i - 1][:-1])
  53. item_pic_end[i - 1] = "" # 取完后图片要清空
  54. bef_id_list = list(range(st, i))
  55. bef_id_list.reverse()
  56. for j in bef_id_list: # 从当前位置向前继续判断
  57. # print(j,'--------------',item_pic_end[j - 1])
  58. if have_pic_info[j]: # 有图片信息,
  59. if "imgsrc" not in temp_res[j]["content"]: # 没图片
  60. if 'susp_pic' in temp_res[j]:
  61. temp_res[j]["content"] += "\n" + "\n".join(temp_res[j]['susp_pic'])
  62. del temp_res[j]['susp_pic']
  63. elif not item_pic_end[j]: # 本身末尾没图片时
  64. if j > 0 and item_pic_end[j - 1]:
  65. temp_res[j]["content"] += "\n" + item_pic_end[j - 1][-1]
  66. if len(item_pic_end[j - 1]) > 1:
  67. temp_res[j - 1]["content"] += "\n" + "\n".join(item_pic_end[j - 1][:-1])
  68. item_pic_end[j - 1] = ""
  69. else:
  70. temp_res[j]['errmsgs'].append("本题缺图片")
  71. print("第{}题缺图片".format(str(temp_res[j]['item_id']))) # 本身有吗?
  72. right_after_corret = False
  73. else:
  74. temp_res[j]["content"] += "\n" + "\n".join(item_pic_end[j])
  75. item_pic_end[j] = ""
  76. elif item_pic_end[j-1]: # 有图片,(但不一定就是如图的“图”),且前一题末尾有图
  77. print("第{}题可能漏图片".format(str(temp_res[j]['item_id'])))
  78. if not have_pic_info[j - 1] or (j > 1 and item_pic_end[j - 2]): # 前面一题没有图片信息或前前一题末尾有图片时
  79. if not item_pic_end[j]: # 本题末尾没有图片
  80. temp_res[j]["content"] += "\n" + item_pic_end[j - 1][-1]
  81. if len(item_pic_end[j - 1]) > 1:
  82. temp_res[j - 1]["content"] += "\n" + "\n".join(item_pic_end[j - 1][:-1])
  83. item_pic_end[j - 1] = ""
  84. else: # 本身有图片的话,用自己的
  85. temp_res[j]["content"] += "\n" + "\n".join(item_pic_end[j])
  86. item_pic_end[j] = ""
  87. else:
  88. temp_res[j - 1]["content"] += "\n" + "\n".join(item_pic_end[j - 1])
  89. item_pic_end[j - 1] = ""
  90. elif item_pic_end[j]: # 当前题末尾有图
  91. temp_res[j]["content"] += "\n" + "\n".join(item_pic_end[j])
  92. item_pic_end[j] = ""
  93. else: # 其他图片信息关键字没匹配到,可能 会漏掉
  94. if item_pic_end[j]:
  95. temp_res[j]["content"] += "\n" + "\n".join(item_pic_end[j])
  96. item_pic_end[j] = ""
  97. if right_after_corret:
  98. item_list = temp_res
  99. if item_pic_type1_id:
  100. for i in item_pic_type1_id:
  101. if 'susp_pic' in temp_res[i]:
  102. temp_res[i]["content"] += "\n" + "\n".join(temp_res[i]['susp_pic'])
  103. return item_list