微信扫码
与创始人交个朋友
我要投稿
我们将文本切分定义为五个层级:
Level 1: Character Splitting - 简单的字符长度切分
Level 2: Recursive Character Text Splitting - 通过分隔符切分,然后递归合并
Level 3: Document Specific Splitting - 针对不同文档格式切分 (PDF, Python, Markdown)
Level 4: Semantic Splitting - 语义切分
Level 5: Agentic Splitting-使用代理实现自动切分
本篇文章将介绍字符切分的概念和实现。虽然简单,但有助于我们理解一些参数和整体概念。
字符切分概念
字符分割是分割文本的最基本形式。它是简单地将文本分成n个字符大小的块的过程,而不考虑其内容或形式。
不建议在任何应用程序中使用这种方法,但它是我们理解基础知识的一个很好的起点。
优点:简单容易
缺点:非常死板,没有考虑到文本的结构
两个小概念:
Chunk Size(块大小)-块中包含的字符数量。50、100、10万等等。
Chunk Overlap(块重叠)-为了避免重要信息被切开成多个部分,希望有连续块重叠,overlap就是重叠块的大小。
下面看个例子,来看看字符切分逻辑:
text = "2024年一季度公司实现营业收入24.56亿元(-12.60%),实现归母净利润19.54亿元(-3.70%),扣非后归母净利润19.37亿元(+2.38%),基本每股收益0.12元,(-3.36%)。"
chunks = []
chunk_size = 35
for i in range(0, len(text), chunk_size):
chunk = text[i:i + chunk_size] # 每隔35是一个块
chunks.append(chunk)
print(chunks)
在实际工程使用中,我们都不是孤立的切分文本,而是对文档进行切分,下面我们使用langchain和llama_index来演示这个过程。
LangChain实现
from langchain.text_splitter import CharacterTextSplitter
text_splitter = CharacterTextSplitter(chunk_size=35, chunk_overlap=0, separator='', strip_whitespace=False)print(text_splitter.split_text(text))
text_splitter = CharacterTextSplitter(chunk_size=35, chunk_overlap=5, separator='', strip_whitespace=False)st = text_splitter.split_text(text)pprint(st)
加入separator
先利用separator将文档切分成小块,再使用长度对小块进行切割:
text_splitter = CharacterTextSplitter(chunk_size=35, chunk_overlap=0, separator=',', strip_whitespace=False)print(text_splitter.split_text(text))
LLama-Index实现
from llama_index.core.text_splitter import SentenceSplitterfrom llama_index.core import SimpleDirectoryReader
构建切分器
splitter = SentenceSplitter(chunk_size=200,chunk_overlap=15,)
加载文档
documents = SimpleDirectoryReader(input_files=["./test.txt"]).load_data()
切分文档
nodes = splitter.get_nodes_from_documents(documents)
nodes里面不仅包含了切分的文本信息,也包含了很多额外的相关内容。可以去探索...
至此,你已经学会了字符切分的全部概念和实战,让我们下篇继续吧。
如果对内容有什么疑问和建议可以私信和留言,也可以添加我加入大模型交流群,一起讨论大模型在创作、RAG和agent中的应用。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-07-18
2024-05-05
2024-07-09
2024-05-19
2024-07-09
2024-06-20
2024-07-07
2024-07-07
2024-07-08
2024-07-09
2024-11-25
2024-11-06
2024-11-06
2024-11-05
2024-11-04
2024-10-27
2024-10-25
2024-10-21