此 文本分割器 是通用文本的推荐选择。它由一个字符列表参数化。它按顺序尝试分割,直到块足够小。默认列表是 ["\n\n", "\n", " ", ""]。这具有尽可能保持所有段落(然后是句子,然后是单词)在一起的效果,因为这些通常看起来是语义关联性最强的文本片段。
- 文本如何分割:按字符列表。
- 如何测量块大小:按字符数。
下面展示示例用法。
pip install -qU langchain-text-splitters
要直接获取字符串内容,请使用 .split_text.
要创建 LangChain Document 对象(例如,用于下游任务),请使用 .create_documents.
from langchain_text_splitters import RecursiveCharacterTextSplitter
# Load example document
with open("state_of_the_union.txt") as f:
state_of_the_union = f.read()
text_splitter = RecursiveCharacterTextSplitter(
# Set a really small chunk size, just to show.
chunk_size=100,
chunk_overlap=20,
length_function=len,
is_separator_regex=False,
)
texts = text_splitter.create_documents([state_of_the_union])
print(texts[0])
print(texts[1])
page_content='Madam Speaker, Madam Vice President, our First Lady and Second Gentleman. Members of Congress and'
page_content='of Congress and the Cabinet. Justices of the Supreme Court. My fellow Americans.'
print(text_splitter.split_text(state_of_the_union)[:2])
['Madam Speaker, Madam Vice President, our First Lady and Second Gentleman. Members of Congress and',
'of Congress and the Cabinet. Justices of the Supreme Court. My fellow Americans.']
让我们来看一下上面为 RecursiveCharacterTextSplitter:
- -
chunk_size设置的参数:块的最大大小,其中大小由length_function. - -
chunk_overlap:块之间的目标重叠。重叠块有助于减少上下文被分割到不同块时的信息丢失。 - -
length_function:确定块大小的函数。 - -
is_separator_regex:分隔符列表(默认为["\n\n", "\n", " ", ""])是否应被解释为正则表达式。
分割没有词边界的语言文本
某些书写系统没有 词边界,例如中文、日文和泰文。使用默认分隔符列表 ["\n\n", "\n", " ", ""] 分割文本可能导致单词被分割到不同块中。要保持单词在一起,可以覆盖分隔符列表以包含额外的标点符号:
- * 添加 ASCII 句点 "
.", Unicode 全角) 句点 "."(用于中文文本),以及 表意文字句点 "。"(用于日文和中文) - * 添加 零宽空格 用于泰文、缅文、高棉文和日文。
- * 添加 ASCII 逗号 "
,"、Unicode 全角逗号 "," 和 Unicode 表意文字逗号 "、"
text_splitter = RecursiveCharacterTextSplitter(
separators=[
"\n\n",
"\n",
" ",
".",
",",
"\u200b", # Zero-width space
"\uff0c", # Fullwidth comma
"\u3001", # Ideographic comma
"\uff0e", # Fullwidth full stop
"\u3002", # Ideographic full stop
"",
],
# Existing args
)