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}")