在现代的人工智能应用中,处理和解析各种格式的文档是一个常见的需求。本文将介绍如何使用 LlamaIndex 库中的各种 NodeParser 来解析不同格式的文档,包括 HTML、JSON 和 Markdown 等。
简单文件节点解析器 (SimpleFileNodeParser)
我们可以使用 SimpleFileNodeParser
来解析简单的文件类型,如 Markdown 文件。下面是一个例子:
from llama_index.core.node_parser import SimpleFileNodeParser
from llama_index.readers.file import FlatReader
from pathlib import Path
# 加载 Markdown 文档
md_docs = FlatReader().load_data(Path("./test.md"))
# 创建解析器实例
parser = SimpleFileNodeParser()
# 从文档中获取节点
md_nodes = parser.get_nodes_from_documents(md_docs)
HTML 节点解析器 (HTMLNodeParser)
HTMLNodeParser
使用 BeautifulSoup 来解析原始 HTML。默认情况下,它会解析一些特定的 HTML 标签。
from llama_index.core.node_parser import HTMLNodeParser
# 创建 HTML 解析器,指定需要解析的标签
parser = HTMLNodeParser(tags=["p", "h1"])
# 从 HTML 文档中获取节点
nodes = parser.get_nodes_from_documents(html_docs)
JSON 节点解析器 (JSONNodeParser)
JSONNodeParser
用于解析原始 JSON 文本。
from llama_index.core.node_parser import JSONNodeParser
# 创建 JSON 解析器实例
parser = JSONNodeParser()
# 从 JSON 文档中获取节点
nodes = parser.get_nodes_from_documents(json_docs)
Markdown 节点解析器 (MarkdownNodeParser)
MarkdownNodeParser
用于解析原始的 Markdown 文本。
from llama_index.core.node_parser import MarkdownNodeParser
# 创建 Markdown 解析器实例
parser = MarkdownNodeParser()
# 从 Markdown 文档中获取节点
nodes = parser.get_nodes_from_documents(markdown_docs)
代码分割器 (CodeSplitter)
CodeSplitter
根据代码的语言将原始代码文本进行分割。
from llama_index.core.node_parser import CodeSplitter
# 创建代码分割器实例
splitter = CodeSplitter(
language="python",
chunk_lines=40, # 每块的行数
chunk_lines_overlap=15, # 块之间的重叠行数
max_chars=1500, # 每块的最大字符数
)
# 从文档中获取节点
nodes = splitter.get_nodes_from_documents(documents)
句子分割器 (SentenceSplitter)
SentenceSplitter
尝试在尊重句子边界的情况下进行文本分割。
from llama_index.core.node_parser import SentenceSplitter
# 创建句子分割器实例
splitter = SentenceSplitter(
chunk_size=1024,
chunk_overlap=20,
)
# 从文档中获取节点
nodes = splitter.get_nodes_from_documents(documents)
使用 Langchain 的节点解析器 (LangchainNodeParser)
你还可以用 Langchain 提供的文本分割器来包装节点解析器。
from langchain.text_splitter import RecursiveCharacterTextSplitter
from llama_index.core.node_parser import LangchainNodeParser
# 创建 Langchain 解析器实例
parser = LangchainNodeParser(RecursiveCharacterTextSplitter())
# 从文档中获取节点
nodes = parser.get_nodes_from_documents(documents)
可能遇到的错误
- 文件路径错误:确保提供的文件路径是正确的,并且文件存在于指定路径。
- 格式不支持:某些解析器可能不支持特定的文档格式,需要根据文档类型选择合适的解析器。
- 依赖库缺失:例如,使用
HTMLNodeParser
时需要安装 BeautifulSoup。可以通过pip install beautifulsoup4
来安装。
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!
参考资料: