Python统计Langchain Document空pageContent元素数量及删除方法
解决Langchain Document空pageContent的统计与过滤问题
统计空pageContent元素的数量
加载完文档后,直接遍历列表统计符合条件的元素即可,这里会把空字符串、仅含空白字符的情况都算做空内容:
docs = load_docs_from_jsonl("你的文件路径.jsonl") empty_count = sum(1 for doc in docs if not doc.pageContent.strip()) print(f"空pageContent的元素数量:{empty_count}")
删除空pageContent的元素
有两种处理方式,按需选择:
方式一:加载后过滤
如果已经加载了所有文档,用列表推导式直接过滤掉空内容的元素:
filtered_docs = [doc for doc in docs if doc.pageContent.strip()]
方式二:加载时直接过滤(更高效)
修改原加载函数,在生成Document对象前就判断内容是否有效,避免无效元素占用内存:
import json from langchain.schema import Document from typing import Iterable def load_docs_from_jsonl(file_path)->Iterable[Document]: array = [] with open(file_path, 'r') as jsonl_file: for line in jsonl_file: data = json.loads(line) # 检查pageContent存在且去除空白后非空 if data.get("pageContent") and data["pageContent"].strip(): obj = Document(**data) array.append(obj) return array
进阶:加载时同时统计空元素数量
如果想一次完成加载、统计、过滤,可修改函数返回过滤后的文档和空元素数量:
import json from langchain.schema import Document from typing import Iterable, Tuple def load_docs_from_jsonl(file_path)->Tuple[Iterable[Document], int]: array = [] empty_count = 0 with open(file_path, 'r') as jsonl_file: for line in jsonl_file: data = json.loads(line) page_content = data.get("pageContent", "") if page_content.strip(): obj = Document(**data) array.append(obj) else: empty_count += 1 return array, empty_count # 使用示例 docs, empty_num = load_docs_from_jsonl("你的文件路径.jsonl") print(f"过滤后剩余文档数:{len(docs)},空内容元素总数:{empty_num}")
内容的提问来源于stack exchange,提问作者AAA
相关产品推荐
相关产品推荐

