Source code for langchain_community.document_loaders.parsers.generic

"""用于通用/辅助解析器的代码。

该模块包含一些逻辑,可帮助组装更复杂的解析器。
"""
from typing import Iterator, Mapping, Optional

from langchain_core.documents import Document

from langchain_community.document_loaders.base import BaseBlobParser
from langchain_community.document_loaders.blob_loaders.schema import Blob


[docs]class MimeTypeBasedParser(BaseBlobParser): """使用`mime`类型来解析blob的解析器。 这个解析器适用于简单的流水线,其中mime类型足以确定如何解析blob。 要使用,根据mime类型配置处理程序,并将它们传递给初始化程序。 示例: .. code-block:: python from langchain_community.document_loaders.parsers.generic import MimeTypeBasedParser parser = MimeTypeBasedParser( handlers={ "application/pdf": ..., }, fallback_parser=..., )""" # noqa: E501
[docs] def __init__( self, handlers: Mapping[str, BaseBlobParser], *, fallback_parser: Optional[BaseBlobParser] = None, ) -> None: """定义一个解析器,使用 mime-types 来确定如何解析一个 blob。 参数: handlers: 从 mime-types 到函数的映射,这些函数接受一个 blob,解析它并返回一个文档。 fallback_parser: 如果在 handlers 中找不到 mime-type,则使用的 fallback_parser 解析器。如果提供了此解析器,它将用于解析在 handlers 中找不到的所有 mime-types 的 blobs。 如果未提供,则在 handlers 中找不到 mime-type 时将引发 ValueError。 """ self.handlers = handlers self.fallback_parser = fallback_parser
[docs] def lazy_parse(self, blob: Blob) -> Iterator[Document]: """从一个 blob 中加载文档。""" mimetype = blob.mimetype if mimetype is None: raise ValueError(f"{blob} does not have a mimetype.") if mimetype in self.handlers: handler = self.handlers[mimetype] yield from handler.lazy_parse(blob) else: if self.fallback_parser is not None: yield from self.fallback_parser.lazy_parse(blob) else: raise ValueError(f"Unsupported mime type: {mimetype}")