Browse Source

增加空解析器,兜底未支持文档类型解析

jianzhang 4 months ago
parent
commit
79f8d06840
2 changed files with 32 additions and 4 deletions
  1. 27 0
      mildoc_index/parser/none_parser.py
  2. 5 4
      mildoc_index/parser/simple_object_parser.py

+ 27 - 0
mildoc_index/parser/none_parser.py

@@ -0,0 +1,27 @@
+import sys, os
+
+sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+from parser.document_parser import DocumentParser
+from logger.logging import setup_logging
+
+logger = setup_logging()
+
+class NoneParser(DocumentParser):
+    """空解析器"""
+    
+    def parse(self, data: bytes) -> str:
+        """返回空字符串"""
+        logger.info(f"空解析器,不解析数据,默认返回空字符串")
+        return ""
+    
+    def supports(self, content_type: str) -> bool:
+        """空解析器,默认支持所有类型,不检查内容类型"""
+        return True
+
+
+if __name__ == "__main__":
+    parser = NoneParser()
+    with open("../data/HR.pdf", "rb") as f:
+        data = f.read()
+    result = parser.parse(data)
+    print(result[:200])

+ 5 - 4
mildoc_index/parser/simple_object_parser.py

@@ -13,7 +13,7 @@ from parser.office_parser import OfficeParser
 from parser.pdf_parser import PDFParser
 from parser.markdown_parser import MarkdownParser
 from parser.text_parser import TextParser
-
+from parser.none_parser import NoneParser
 from logger.logging import setup_logging
 
 load_dotenv()
@@ -42,7 +42,8 @@ class SimpleObjectParser:
             OfficeParser(),          # markitdown解析Office文档(Word、Excel、PowerPoint)
             #MinerUParser(),          # MinerU解析器,专门处理PDF,暂不开启
             MarkdownParser(),        # Markdown解析器,
-            TextParser(),            # 纯文本解析器作为最后的备选
+            TextParser(),            # 纯文本解析器
+            NoneParser(),            # 空解析器, 作为最后的备选
         ]
     
     def add_parser(self, parser: DocumentParser):
@@ -195,8 +196,8 @@ class SimpleObjectParser:
             # 选择合适的解析器
             parser = self._get_parser(content_type)
             if not parser:
-                logger.info(f"警告: 未找到适合 {content_type} 的解析器,尝试使用文本解析器")
-                parser = TextParser()
+                logger.info(f"警告: 未找到适合 {content_type} 的解析器,使用空解析器兜底")
+                parser = NoneParser()
             
             # 解析文档内容
             logger.info(f"使用解析器: {parser.__class__.__name__}")