如何提取LangChain相似性搜索输出中的page_content等字段数据
从LangChain相似性搜索结果提取指定字段的方法
LangChain的相似性搜索(比如similarity_search_with_score()方法)返回结果通常是嵌套结构,以下分两种场景给出提取page_content、metadata、source、page及score字段的方法:
场景1:返回结果为(Document实例, 分数)的元组列表
这是最常见的情况,搜索返回的列表中每个元素是元组,第一个元素是Document对象,第二个是相似度分数。直接通过对象属性提取即可:
示例代码
# 假设similarity_results是搜索返回的结果列表 extracted_data = [] for doc, score in similarity_results: extracted_item = { "page_content": doc.page_content, "metadata": doc.metadata, "source": doc.metadata.get("source"), "page": doc.metadata.get("page"), "score": score } extracted_data.append(extracted_item)
关键说明
doc.page_content:直接获取文档的内容文本doc.metadata:获取完整的元数据字典,source和page字段通常嵌套在这里(具体取决于文档加载时的配置)- 使用
dict.get()方法是为了避免字段不存在时抛出KeyError,如果你的场景中这些字段必存在,可以直接用doc.metadata["source"]
场景2:返回结果为包含Document字符串与分数的子列表
如果你的结果是字符串形式的Document(比如打印输出的文本),需要先解析字符串内容:
示例代码
import ast extracted_data = [] for doc_str, score in similarity_results: # 提取page_content content_start_idx = doc_str.find("page_content='") + len("page_content='") content_end_idx = doc_str.find("', metadata=") page_content = doc_str[content_start_idx:content_end_idx] # 解析metadata字符串为字典 meta_start_idx = doc_str.find("metadata=") + len("metadata=") meta_end_idx = doc_str.rfind(")") metadata_str = doc_str[meta_start_idx:meta_end_idx] metadata = ast.literal_eval(metadata_str) extracted_item = { "page_content": page_content, "metadata": metadata, "source": metadata.get("source"), "page": metadata.get("page"), "score": score } extracted_data.append(extracted_item)
关键说明
- 通过字符串切片定位
page_content和metadata的位置 - 使用
ast.literal_eval()安全地将metadata的字符串转为字典(禁止使用eval(),避免安全风险)
内容的提问来源于stack exchange,提问作者Satyam Singh
相关产品推荐
相关产品推荐

