检查其他资源
- 为这个问题添加了一个非常描述性的标题。
- 使用集成搜索在LangChain文档中进行了搜索。
- 使用GitHub搜索查找类似的问题,但没有找到。
- 我确信这是LangChain中的一个bug,而不是我的代码。
- 通过更新到LangChain的最新稳定版本(或特定集成包)无法解决此bug。
示例代码
#1st key code
loader = UnstructuredWordDocumentLoader(self.file_path, mode="paged", strategy="fast", infer_table_structure=EXTRACT_TABLES)
#2ed key code
def create_documents(
self, texts: List[str], metadatas: Optional[List[dict]] = None
) -> List[Document]:
"""Create documents from a list of texts."""
_metadatas = metadatas or [{}] * len(texts)
documents = []
for i, text in enumerate(texts):
index = 0
previous_chunk_len = 0
for chunk in self.split_text(text):
metadata = copy.deepcopy(_metadatas[i])
if self._add_start_index:
offset = index + previous_chunk_len - self._chunk_overlap
index = text.find(chunk, max(0, offset))
metadata["start_index"] = index
previous_chunk_len = len(chunk)
new_doc = Document(page_content=chunk, metadata=metadata)
documents.append(new_doc)
return documents
错误信息和堆栈跟踪(如果适用)
- 无响应*
描述
使用 from langchain_community.document_loaders import UnstructuredWordDocumentLoader
解析带有大表格的word文件,然后得到 Document
对象。如果参数 infer_table_structure=True
是默认参数,每个文档元数据属性都包含一个 text_as_html
属性,这是一个大对象。
然后当使用 TextSplitter
将文档分割成块时,每个块文档都会深度复制一次元数据。
如果有很多块,内存会急剧增加,最后出现oom,程序将终止。
系统信息
langchain==0.2.3
langchain-community==0.2.4
langchain-core==0.2.5
langchain-text-splitters==0.2.1
3条答案
按热度按时间iyr7buue1#
这个问题可能是由于元数据中的text_as_html属性导致的,它是一个大型对象,不必要地进行了深度复制。
要解决这个问题,你可以尝试以下方法:在创建UnstructuredWordDocumentLoader时,设置infer_table_structure=False,如下所示:
loader = UnstructuredWordDocumentLoader(self.file_path, mode="paged", strategy="fast", infer_table_structure=False)
这将阻止生成text_as_html属性并减少内存使用。
如果这个问题仍然存在,请再次评论此问题,我将进一步调查此问题。
ngynwnxp2#
谢谢,是的,我试过这个方法,它解决了问题。我认为在深度复制元数据时,有些情况下可能需要有选择地忽略某些属性。例如,有时需要同时设置
infer_table_structure=True
和拆分文本。9rygscc13#
很高兴听到这个消息 😊