[特殊字符] 大模型(LLMs)RAG 版面分析——文本分块面

一、为什么需要对文本分块?

**当遇到"大象级"文档时...**  
想象你面对一个几百页的文档,就像要吃掉一整头大象!️ 这时候,**文本分块**就是你的"餐刀"。

❗ **两大核心问题**:
1. **信息丢失风险**:一次性处理整个文档就像用渔网捞金鱼,总会漏掉细节!
2. **分块大小限制**:GPT-4的32K窗口就像电梯限载,超重可不行哦!

**分块好处**:
- 提高信息提取精度
- 避免上下文丢失
- 适配模型限制 ⚖️

---

## 二、8种文本分块方法大比拼

### 2.1 基础款:一般文本分块
```python
# 简单粗暴按长度切分
text = "我是很长很长的文本..."
chunk_size = 100
chunks = [text[i:i+chunk_size] for i in range(0, len(text), chunk_size)]

2.2 正则表达式分块(中文特供版)

import re
def split_sentences(text):
    sentence_delimiters = re.compile(u'[。?!;]|\n')
    return [s.strip() for s in sentence_delimiters.split(text) if s.strip()]
​
# 示例输出:
# ['文本分块是自然语言处理...', '这种分割通常是基于...']

2.3 SpaCy学术派分块

import spacy
nlp = spacy.load("zh_core_web_sm")
doc = nlp("文本分块是...")
[s for s in doc.sents]  # 智能句子分割

2.4 LangChain工具包系列

① 字符分割器

from langchain.text_splitter import CharacterTextSplitter
text_splitter = CharacterTextSplitter(
    chunk_size=35, 
    chunk_overlap=0,
    separator=''
)
② 递归字符分割(智能版)

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=100,
    chunk_overlap=20  # 像拼图一样重叠更聪明 
)

2.5 HTML结构分块

from langchain.text_splitter import HTMLHeaderTextSplitter
html_splitter = HTMLHeaderTextSplitter(
    headers_to_split_on=[("h1", "Header 1"), ("h2", "标题2")]
)

2.6 Markdown专家分块

# 标题1
## 标题2
正文内容...

markdown_splitter = MarkdownHeaderTextSplitter(
    headers_to_split_on=[("#","H1"), ("##","H2")]
)

2.7 Python代码分块

from langchain.text_splitter import PythonCodeTextSplitter
python_splitter = PythonCodeTextSplitter(chunk_size=100)
# 自动识别class/def等代码结构

2.8 LaTeX论文分块

\section{Introduction}
内容...

from langchain.text_splitter import LatexTextSplitter
latex_splitter = LatexTextSplitter(chunk_size=100)

彩蛋:向量数据库小贴士

推荐使用LanceDB

  • 开源免费

  • 无服务器架构 ☁️

  • 完美兼容Python生态

import lancedb
db = lancedb.connect("./data")
table = db.create_table("docs", data=[{"vector": embedding, "text": chunk}])

致谢

你可能感兴趣的:(easyui,前端,prompt,数据库,人工智能,自然语言处理,大模型)