xjc 3 years ago
commit
9cdb19a286
100 changed files with 136 additions and 0 deletions
  1. 24 0
      demo.py
  2. 112 0
      parsedocx.py
  3. BIN
      test.docx
  4. BIN
      test4.docx
  5. BIN
      test4.files/image001.gif
  6. BIN
      test4.files/image001.png
  7. BIN
      test4.files/image002.gif
  8. BIN
      test4.files/image002.png
  9. BIN
      test4.files/image003.gif
  10. BIN
      test4.files/image003.png
  11. BIN
      test4.files/image004.gif
  12. BIN
      test4.files/image004.png
  13. BIN
      test4.files/image005.gif
  14. BIN
      test4.files/image005.png
  15. BIN
      test4.files/image006.gif
  16. BIN
      test4.files/image006.png
  17. BIN
      test4.files/image007.gif
  18. BIN
      test4.files/image007.png
  19. BIN
      test4.files/image008.gif
  20. BIN
      test4.files/image008.png
  21. BIN
      test4.files/image009.gif
  22. BIN
      test4.files/image009.png
  23. BIN
      test4.files/image010.gif
  24. BIN
      test4.files/image010.png
  25. BIN
      test4.files/image011.gif
  26. BIN
      test4.files/image011.png
  27. BIN
      test4.files/image012.gif
  28. BIN
      test4.files/image012.png
  29. BIN
      test4.files/image013.gif
  30. BIN
      test4.files/image013.png
  31. BIN
      test4.files/image014.gif
  32. BIN
      test4.files/image014.png
  33. BIN
      test4.files/image015.gif
  34. BIN
      test4.files/image015.png
  35. BIN
      test4.files/image016.gif
  36. BIN
      test4.files/image016.png
  37. BIN
      test4.files/image017.gif
  38. BIN
      test4.files/image017.png
  39. BIN
      test4.files/image018.gif
  40. BIN
      test4.files/image018.png
  41. BIN
      test4.files/image019.gif
  42. BIN
      test4.files/image019.png
  43. BIN
      test4.files/image020.gif
  44. BIN
      test4.files/image020.png
  45. BIN
      test4.files/image021.gif
  46. BIN
      test4.files/image021.png
  47. BIN
      test4.files/image022.gif
  48. BIN
      test4.files/image022.png
  49. BIN
      test4.files/image023.gif
  50. BIN
      test4.files/image023.png
  51. BIN
      test4.files/image024.gif
  52. BIN
      test4.files/image024.png
  53. BIN
      test4.files/image025.gif
  54. BIN
      test4.files/image025.png
  55. BIN
      test4.files/image026.gif
  56. BIN
      test4.files/image026.png
  57. BIN
      test4.files/image027.gif
  58. BIN
      test4.files/image027.png
  59. BIN
      test4.files/image028.gif
  60. BIN
      test4.files/image028.png
  61. BIN
      test4.files/image029.gif
  62. BIN
      test4.files/image029.png
  63. BIN
      test4.files/image030.gif
  64. BIN
      test4.files/image030.png
  65. BIN
      test4.files/image031.gif
  66. BIN
      test4.files/image031.png
  67. BIN
      test4.files/image032.gif
  68. BIN
      test4.files/image032.png
  69. BIN
      test4.files/image033.gif
  70. BIN
      test4.files/image033.png
  71. BIN
      test4.files/image034.gif
  72. BIN
      test4.files/image034.png
  73. BIN
      test4.files/image035.gif
  74. BIN
      test4.files/image035.png
  75. BIN
      test4.files/image036.gif
  76. BIN
      test4.files/image036.png
  77. BIN
      test4.files/image037.gif
  78. BIN
      test4.files/image037.png
  79. BIN
      test4.files/image038.gif
  80. BIN
      test4.files/image038.png
  81. BIN
      test4.files/image039.gif
  82. BIN
      test4.files/image039.png
  83. BIN
      test4.files/image040.gif
  84. BIN
      test4.files/image040.png
  85. BIN
      test4.files/image041.gif
  86. BIN
      test4.files/image041.png
  87. BIN
      test4.files/image042.gif
  88. BIN
      test4.files/image042.png
  89. BIN
      test4.files/image043.gif
  90. BIN
      test4.files/image043.png
  91. BIN
      test4.files/image044.gif
  92. BIN
      test4.files/image044.png
  93. BIN
      test4.files/image045.gif
  94. BIN
      test4.files/image045.png
  95. BIN
      test4.files/image046.gif
  96. BIN
      test4.files/image046.png
  97. BIN
      test4.files/image047.gif
  98. BIN
      test4.files/image047.png
  99. BIN
      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))

BIN
test.docx


BIN
test4.docx


BIN
test4.files/image001.gif


BIN
test4.files/image001.png


BIN
test4.files/image002.gif


BIN
test4.files/image002.png


BIN
test4.files/image003.gif


BIN
test4.files/image003.png


BIN
test4.files/image004.gif


BIN
test4.files/image004.png


BIN
test4.files/image005.gif


BIN
test4.files/image005.png


BIN
test4.files/image006.gif


BIN
test4.files/image006.png


BIN
test4.files/image007.gif


BIN
test4.files/image007.png


BIN
test4.files/image008.gif


BIN
test4.files/image008.png


BIN
test4.files/image009.gif


BIN
test4.files/image009.png


BIN
test4.files/image010.gif


BIN
test4.files/image010.png


BIN
test4.files/image011.gif


BIN
test4.files/image011.png


BIN
test4.files/image012.gif


BIN
test4.files/image012.png


BIN
test4.files/image013.gif


BIN
test4.files/image013.png


BIN
test4.files/image014.gif


BIN
test4.files/image014.png


BIN
test4.files/image015.gif


BIN
test4.files/image015.png


BIN
test4.files/image016.gif


BIN
test4.files/image016.png


BIN
test4.files/image017.gif


BIN
test4.files/image017.png


BIN
test4.files/image018.gif


BIN
test4.files/image018.png


BIN
test4.files/image019.gif


BIN
test4.files/image019.png


BIN
test4.files/image020.gif


BIN
test4.files/image020.png


BIN
test4.files/image021.gif


BIN
test4.files/image021.png


BIN
test4.files/image022.gif


BIN
test4.files/image022.png


BIN
test4.files/image023.gif


BIN
test4.files/image023.png


BIN
test4.files/image024.gif


BIN
test4.files/image024.png


BIN
test4.files/image025.gif


BIN
test4.files/image025.png


BIN
test4.files/image026.gif


BIN
test4.files/image026.png


BIN
test4.files/image027.gif


BIN
test4.files/image027.png


BIN
test4.files/image028.gif


BIN
test4.files/image028.png


BIN
test4.files/image029.gif


BIN
test4.files/image029.png


BIN
test4.files/image030.gif


BIN
test4.files/image030.png


BIN
test4.files/image031.gif


BIN
test4.files/image031.png


BIN
test4.files/image032.gif


BIN
test4.files/image032.png


BIN
test4.files/image033.gif


BIN
test4.files/image033.png


BIN
test4.files/image034.gif


BIN
test4.files/image034.png


BIN
test4.files/image035.gif


BIN
test4.files/image035.png


BIN
test4.files/image036.gif


BIN
test4.files/image036.png


BIN
test4.files/image037.gif


BIN
test4.files/image037.png


BIN
test4.files/image038.gif


BIN
test4.files/image038.png


BIN
test4.files/image039.gif


BIN
test4.files/image039.png


BIN
test4.files/image040.gif


BIN
test4.files/image040.png


BIN
test4.files/image041.gif


BIN
test4.files/image041.png


BIN
test4.files/image042.gif


BIN
test4.files/image042.png


BIN
test4.files/image043.gif


BIN
test4.files/image043.png


BIN
test4.files/image044.gif


BIN
test4.files/image044.png


BIN
test4.files/image045.gif


BIN
test4.files/image045.png


BIN
test4.files/image046.gif


BIN
test4.files/image046.png


BIN
test4.files/image047.gif


BIN
test4.files/image047.png


BIN
test4.files/image048.gif


+ 0 - 0
test4.files/image048.png


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