xjc 4 年之前
當前提交
9cdb19a286
共有 100 個文件被更改,包括 136 次插入0 次删除
  1. 24 0
      demo.py
  2. 112 0
      parsedocx.py
  3. 二進制
      test.docx
  4. 二進制
      test4.docx
  5. 二進制
      test4.files/image001.gif
  6. 二進制
      test4.files/image001.png
  7. 二進制
      test4.files/image002.gif
  8. 二進制
      test4.files/image002.png
  9. 二進制
      test4.files/image003.gif
  10. 二進制
      test4.files/image003.png
  11. 二進制
      test4.files/image004.gif
  12. 二進制
      test4.files/image004.png
  13. 二進制
      test4.files/image005.gif
  14. 二進制
      test4.files/image005.png
  15. 二進制
      test4.files/image006.gif
  16. 二進制
      test4.files/image006.png
  17. 二進制
      test4.files/image007.gif
  18. 二進制
      test4.files/image007.png
  19. 二進制
      test4.files/image008.gif
  20. 二進制
      test4.files/image008.png
  21. 二進制
      test4.files/image009.gif
  22. 二進制
      test4.files/image009.png
  23. 二進制
      test4.files/image010.gif
  24. 二進制
      test4.files/image010.png
  25. 二進制
      test4.files/image011.gif
  26. 二進制
      test4.files/image011.png
  27. 二進制
      test4.files/image012.gif
  28. 二進制
      test4.files/image012.png
  29. 二進制
      test4.files/image013.gif
  30. 二進制
      test4.files/image013.png
  31. 二進制
      test4.files/image014.gif
  32. 二進制
      test4.files/image014.png
  33. 二進制
      test4.files/image015.gif
  34. 二進制
      test4.files/image015.png
  35. 二進制
      test4.files/image016.gif
  36. 二進制
      test4.files/image016.png
  37. 二進制
      test4.files/image017.gif
  38. 二進制
      test4.files/image017.png
  39. 二進制
      test4.files/image018.gif
  40. 二進制
      test4.files/image018.png
  41. 二進制
      test4.files/image019.gif
  42. 二進制
      test4.files/image019.png
  43. 二進制
      test4.files/image020.gif
  44. 二進制
      test4.files/image020.png
  45. 二進制
      test4.files/image021.gif
  46. 二進制
      test4.files/image021.png
  47. 二進制
      test4.files/image022.gif
  48. 二進制
      test4.files/image022.png
  49. 二進制
      test4.files/image023.gif
  50. 二進制
      test4.files/image023.png
  51. 二進制
      test4.files/image024.gif
  52. 二進制
      test4.files/image024.png
  53. 二進制
      test4.files/image025.gif
  54. 二進制
      test4.files/image025.png
  55. 二進制
      test4.files/image026.gif
  56. 二進制
      test4.files/image026.png
  57. 二進制
      test4.files/image027.gif
  58. 二進制
      test4.files/image027.png
  59. 二進制
      test4.files/image028.gif
  60. 二進制
      test4.files/image028.png
  61. 二進制
      test4.files/image029.gif
  62. 二進制
      test4.files/image029.png
  63. 二進制
      test4.files/image030.gif
  64. 二進制
      test4.files/image030.png
  65. 二進制
      test4.files/image031.gif
  66. 二進制
      test4.files/image031.png
  67. 二進制
      test4.files/image032.gif
  68. 二進制
      test4.files/image032.png
  69. 二進制
      test4.files/image033.gif
  70. 二進制
      test4.files/image033.png
  71. 二進制
      test4.files/image034.gif
  72. 二進制
      test4.files/image034.png
  73. 二進制
      test4.files/image035.gif
  74. 二進制
      test4.files/image035.png
  75. 二進制
      test4.files/image036.gif
  76. 二進制
      test4.files/image036.png
  77. 二進制
      test4.files/image037.gif
  78. 二進制
      test4.files/image037.png
  79. 二進制
      test4.files/image038.gif
  80. 二進制
      test4.files/image038.png
  81. 二進制
      test4.files/image039.gif
  82. 二進制
      test4.files/image039.png
  83. 二進制
      test4.files/image040.gif
  84. 二進制
      test4.files/image040.png
  85. 二進制
      test4.files/image041.gif
  86. 二進制
      test4.files/image041.png
  87. 二進制
      test4.files/image042.gif
  88. 二進制
      test4.files/image042.png
  89. 二進制
      test4.files/image043.gif
  90. 二進制
      test4.files/image043.png
  91. 二進制
      test4.files/image044.gif
  92. 二進制
      test4.files/image044.png
  93. 二進制
      test4.files/image045.gif
  94. 二進制
      test4.files/image045.png
  95. 二進制
      test4.files/image046.gif
  96. 二進制
      test4.files/image046.png
  97. 二進制
      test4.files/image047.gif
  98. 二進制
      test4.files/image047.png
  99. 二進制
      test4.files/image048.gif
  100. 0 0
      test4.files/image048.png

+ 24 - 0
demo.py

@@ -0,0 +1,24 @@
+#!-*-coding:utf-8 -*-
+from win32com.client import Dispatch
+
+word = Dispatch('Word.Application')
+word.Visible = 0
+doc = word.Documents.Open("D:\\docxdemo\\test4.docx")
+
+doc.SaveAs("D:\\docxdemo\\test4.html",10)
+doc.Close()
+word.Quit()
+
+
+
+[{
+
+type:"单选",
+ques:[
+    {"name":"","answer":""},
+    {"name":"","answer":""},
+    {"name":"","answer":""},
+    {"name":"","answer":""},
+    {"name":"","answer":""},
+]
+}]

+ 112 - 0
parsedocx.py

@@ -0,0 +1,112 @@
+#-*-coding:utf-8 -*-
+import re,os
+import json,uuid
+from bs4 import BeautifulSoup
+from win32com.client import Dispatch
+
+class DocxConverter(object):
+    """
+    """
+    def __init__(self,docpath=None):
+        """
+        """
+        self.docpath = docpath
+        self.word = Dispatch("Word.Application")
+        self.word.Visible = 0
+        self.doc = word.Documents.Open(self.docpath)
+
+    def docx2html(self):
+        """
+        """
+        html = os.path.join(os.path.dirname(self.docpath),str(uuid.uuid4())+".html")
+        self.doc.SaveAs(html)
+        self.doc.Close()
+        self.word.Quit()
+        return html
+
+class QuestionsParser(object):
+    """试题解析
+    """
+    def __init__(self,name="test4.html"):
+        self.html = open(name,"r").read()
+        self.soup = BeautifulSoup(self.html,"html.parser")
+
+    def get_paragraphs(self):
+        """
+        """
+        wordsection = self.soup.find("div",class_="WordSection1")
+        #print wordsection
+        pars = wordsection.find_all("p")
+        return pars
+
+    def parse_questions(self):
+        """提取试题
+        """
+        que_type_dct = {}
+        paragraphs = self.get_paragraphs()
+        for i,p in enumerate(paragraphs):
+            print p.text
+            if u"【题型】" in p.text:
+                que_type_dct["type"] = p.text.split("、")[-1] 
+
+    def parse_questions(self):
+        """提取试题
+        """
+        data = []
+        tmp_val = {}
+        tx_name = ""
+        key = ""
+        paragraphs = self.get_paragraphs()
+        for i,p in enumerate(paragraphs):
+            if u"【题型】" in p.text:
+                tx_name = p.text 
+            if u"【题干】" in p.text:
+                key = "tg"
+                tmp_val["tx"] = tx_name
+                if tmp_val.get("tg"):
+                    data.append(tmp_val)
+                tmp_val = {"tg":"","tx":"","zsd":"","nd":"","da":"","jx":""}
+            if u"【知识点】" in p.text:
+                key = "zsd"
+            if u"【难度】" in p.text:
+                key = "nd"
+            if u"【答案】" in p.text:
+                key = "da"
+            if u"【解析】" in p.text:
+                key = "jx"
+
+            if key != "":
+                tmp_val[key] += p.__str__()
+
+        data.append(tmp_val)
+
+        return data
+
+    def get_questions(self):
+        """
+        """
+        questions = self.parse_questions()
+        for que in questions:
+            que["tx"] = que["tx"].split(u"、")[-1]
+            #que["tg"] = que["tg"].replace(u"【题干】","")
+            #que["zsd"] = que["zsd"].replace(u"【知识点】","")
+            #que["da"] = que["da"].replace(u"【答案】","")
+            #que["jx"] = que["jx"].replace(u"【解析】","")
+            que["qno"] = self.get_qno(que["tg"])
+        return questions
+
+    def get_qno(self,tg):
+        """提取题号
+        """
+        tgsoup = BeautifulSoup(tg,"html.parser")
+        tgtext = tgsoup.text
+        qno = re.search(r"\d+",tgtext.split(u"、")[0]).group()
+        return qno
+        
+
+questionparser =  QuestionsParser()
+
+if __name__ == "__main__":
+    ques = questionparser.get_questions()
+    with open("t.json","w+") as f:
+        f.write(json.dumps(ques))

二進制
test.docx


二進制
test4.docx


二進制
test4.files/image001.gif


二進制
test4.files/image001.png


二進制
test4.files/image002.gif


二進制
test4.files/image002.png


二進制
test4.files/image003.gif


二進制
test4.files/image003.png


二進制
test4.files/image004.gif


二進制
test4.files/image004.png


二進制
test4.files/image005.gif


二進制
test4.files/image005.png


二進制
test4.files/image006.gif


二進制
test4.files/image006.png


二進制
test4.files/image007.gif


二進制
test4.files/image007.png


二進制
test4.files/image008.gif


二進制
test4.files/image008.png


二進制
test4.files/image009.gif


二進制
test4.files/image009.png


二進制
test4.files/image010.gif


二進制
test4.files/image010.png


二進制
test4.files/image011.gif


二進制
test4.files/image011.png


二進制
test4.files/image012.gif


二進制
test4.files/image012.png


二進制
test4.files/image013.gif


二進制
test4.files/image013.png


二進制
test4.files/image014.gif


二進制
test4.files/image014.png


二進制
test4.files/image015.gif


二進制
test4.files/image015.png


二進制
test4.files/image016.gif


二進制
test4.files/image016.png


二進制
test4.files/image017.gif


二進制
test4.files/image017.png


二進制
test4.files/image018.gif


二進制
test4.files/image018.png


二進制
test4.files/image019.gif


二進制
test4.files/image019.png


二進制
test4.files/image020.gif


二進制
test4.files/image020.png


二進制
test4.files/image021.gif


二進制
test4.files/image021.png


二進制
test4.files/image022.gif


二進制
test4.files/image022.png


二進制
test4.files/image023.gif


二進制
test4.files/image023.png


二進制
test4.files/image024.gif


二進制
test4.files/image024.png


二進制
test4.files/image025.gif


二進制
test4.files/image025.png


二進制
test4.files/image026.gif


二進制
test4.files/image026.png


二進制
test4.files/image027.gif


二進制
test4.files/image027.png


二進制
test4.files/image028.gif


二進制
test4.files/image028.png


二進制
test4.files/image029.gif


二進制
test4.files/image029.png


二進制
test4.files/image030.gif


二進制
test4.files/image030.png


二進制
test4.files/image031.gif


二進制
test4.files/image031.png


二進制
test4.files/image032.gif


二進制
test4.files/image032.png


二進制
test4.files/image033.gif


二進制
test4.files/image033.png


二進制
test4.files/image034.gif


二進制
test4.files/image034.png


二進制
test4.files/image035.gif


二進制
test4.files/image035.png


二進制
test4.files/image036.gif


二進制
test4.files/image036.png


二進制
test4.files/image037.gif


二進制
test4.files/image037.png


二進制
test4.files/image038.gif


二進制
test4.files/image038.png


二進制
test4.files/image039.gif


二進制
test4.files/image039.png


二進制
test4.files/image040.gif


二進制
test4.files/image040.png


二進制
test4.files/image041.gif


二進制
test4.files/image041.png


二進制
test4.files/image042.gif


二進制
test4.files/image042.png


二進制
test4.files/image043.gif


二進制
test4.files/image043.png


二進制
test4.files/image044.gif


二進制
test4.files/image044.png


二進制
test4.files/image045.gif


二進制
test4.files/image045.png


二進制
test4.files/image046.gif


二進制
test4.files/image046.png


二進制
test4.files/image047.gif


二進制
test4.files/image047.png


二進制
test4.files/image048.gif


+ 0 - 0
test4.files/image048.png


Some files were not shown because too many files changed in this diff