如何加载 HTML
超文本标记语言 HTML 是用于设计在网页浏览器中显示的文档的标准标记语言。
本内容介绍如何将 HTML 文档加载到 LangChain 的
Document
对象中,以便我们可以在后续流程中使用这些对象。
解析 HTML 文件通常需要专用工具。这里我们通过 Unstructured 展示解析过程。有关与其他服务(如 FireCrawl)的集成,请查看集成页面。
预备知识
本指南假设您已熟悉以下概念:
安装
- npm
- yarn
- pnpm
npm i @langchain/community @langchain/core
yarn add @langchain/community @langchain/core
pnpm add @langchain/community @langchain/core
配置
尽管 Unstructured 有开源版本,但您仍需提供一个 API 密钥才能访问该服务。要使一切正常运行,请按照以下两个步骤操作:
- 下载并启动 Docker 容器:
docker run -p 8000:8000 -d --rm --name unstructured-api downloads.unstructured.io/unstructured-io/unstructured-api:latest --port 8000 --host 0.0.0.0
- 在此处获取免费的 API 密钥和 API URL,并在您的环境中设置(根据 Unstructured 网站说明,分配您的 API 密钥和 URL 可能需要一个小时):
export UNSTRUCTURED_API_KEY="..."
# 将下方替换为您邮件中的 `Full URL`
export UNSTRUCTURED_API_URL="https://<ORG_NAME>-<SECRET>.api.unstructuredapp.io/general/v0/general"
使用 Unstructured 加载 HTML
import { UnstructuredLoader } from "@langchain/community/document_loaders/fs/unstructured";
const filePath =
"../../../../libs/langchain-community/src/tools/fixtures/wordoftheday.html";
const loader = new UnstructuredLoader(filePath, {
apiKey: process.env.UNSTRUCTURED_API_KEY,
apiUrl: process.env.UNSTRUCTURED_API_URL,
});
const data = await loader.load();
console.log(data.slice(0, 5));
[
Document {
pageContent: 'Word of the Day',
metadata: {
category_depth: 0,
languages: [Array],
filename: 'wordoftheday.html',
filetype: 'text/html',
category: 'Title'
}
},
Document {
pageContent: ': April 10, 2023',
metadata: {
emphasized_text_contents: [Array],
emphasized_text_tags: [Array],
languages: [Array],
parent_id: 'b845e60d85ff7d10abda4e5f9a37eec8',
filename: 'wordoftheday.html',
filetype: 'text/html',
category: 'UncategorizedText'
}
},
Document {
pageContent: 'foible',
metadata: {
category_depth: 1,
languages: [Array],
parent_id: 'b845e60d85ff7d10abda4e5f9a37eec8',
filename: 'wordoftheday.html',
filetype: 'text/html',
category: 'Title'
}
},
Document {
pageContent: 'play',
metadata: {
category_depth: 0,
link_texts: [Array],
link_urls: [Array],
link_start_indexes: [Array],
languages: [Array],
filename: 'wordoftheday.html',
filetype: 'text/html',
category: 'Title'
}
},
Document {
pageContent: 'noun',
metadata: {
category_depth: 0,
emphasized_text_contents: [Array],
emphasized_text_tags: [Array],
languages: [Array],
filename: 'wordoftheday.html',
filetype: 'text/html',
category: 'Title'
}
}
]