
LangChainใฎTextSplitterใ่ฉฆใ
ใLangChainใใฎใTextSplitterใใใใญในใใใฉใฎใใใซๅๅฒใใใใใพใจใใพใใใ
ๅๅ
1. TextSplitter
ใTextSplitterใใฏ้ทใใใญในใใใใฃใณใฏใซๅๅฒใใใใใฎใฏใฉในใงใใ
ๅฆ็ใฎๆตใใฏใๆฌกใฎใจใใใงใใ
(1) ใปใใฌใผใฟ(ใใใฉใซใใฏ"\n\n")ใงใใใญในใใๅฐใใชใใฃใณใฏใซๅๅฒใ
(2) ๅฐใใชใใฃใณใฏใ็นๅฎใตใคใบใซใชใใพใงใใผใธใใๅคงใใชใใฃใณใฏใไฝๆใ
2. CharacterTextSplitter
ใปใใฌใผใฟใงๅๅฒใใฆใๆๅญๆฐใงใใผใธใใTextSplitterใงใใ
from langchain.text_splitter import CharacterTextSplitter
text_splitter = CharacterTextSplitter(
separator = "\n\n", # ใปใใฌใผใฟ
chunk_size = 11, # ใใฃใณใฏใฎๆๅญๆฐ
chunk_overlap = 0, # ใใฃใณใฏใชใผใใผใฉใใใฎๆๅญๆฐ
)ใปใใฌใผใฟใชใใฎใใญในใใฏๅๅฒใใใพใใใ
print(text_splitter.split_text("ใใใใใใใใใใใใใใใใใใใใใ"))['ใใใใใใใใใใใใใใใใใใใใใ']ใปใใฌใผใฟใฎใใใงใใฃใณใฏใฎๆๅญๆฐใ11ใซใใใจใๆฌกใฎใใใซๅๅฒใใใพใใ
10ใซใใใจใใใใใใ\n\nใใใใใใใใปใใใซใชใใพใใใ
(ใปใใฌใผใฟใฏ1ๆๅญใจใซใฆใณใใใใฆใ๏ผ)
print(text_splitter.split_text("ใใใใใ\n\nใใใใใ\n\nใใใใใ\n\nใใใ\n\nใใใ"))['ใใใใใ\n\nใใใใใ', 'ใใใใใ\n\nใใใ\n\nใใใ']ใใฃใณใฏใชใผใใผใฉใใใฎๆๅญๆฐใ5ใซใใใจใๆฌกใฎใใใซๅๅฒใใใพใใ
ใใใใใใใใชใฉใใฃใณใฏๅไฝใงใชใผใใผใฉใใใใใฆใใพใใ
print(text_splitter.split_text("ใใใใใ\n\nใใใใใ\n\nใใใใใ\n\nใใใ\n\nใใใ"))['ใใใใใ\n\nใใใใใ', 'ใใใใใ\n\nใใใใใ', 'ใใใใใ\n\nใใใ', 'ใใใ\n\nใใใ']3. RecursiveCharacterTextSplitter
ใใฃใณใฏใตใคใบใฎๅถ้ใไธๅใใพใงๅๅธฐ็ใซๅๅฒใใTextSplitterใงใใ
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(
chunk_size = 11, # ใใฃใณใฏใฎๆๅญๆฐ
chunk_overlap = 0, # ใใฃใณใฏใชใผใใผใฉใใใฎๆๅญๆฐ
)ใปใใฌใผใฟใฎใชใใใญในใใๅๅฒใงใใพใใ
(ใใฃใณใฏใฎๆๅญๆฐ11ใ ใใฉ9ๆๅญใงๅๅฒ๏ผ)
print(text_splitter.split_text("ใใใใใใใใใใใใใใใใใใใใใ"))['ใใใใใใใใใ', 'ใใใใใใใใใ', 'ใใใ']ใใฃใณใฏใชใผใใผใฉใใใฎๆๅญๆฐใ5ใซใใใจใๆฌกใฎใใใซๅๅฒใใใพใใ
ใใใใใใใใชใฉ5ๆๅญๅไฝใงใชใผใใผใฉใใใใใฆใใพใใ
print(text_splitter.split_text("ใใใใใใใใใใใใใใใใใใใใใ"))['ใใใใใใใใใใ', 'ใใใใใใใใใใ', 'ใใใใใใใใใใ', 'ใใใใใใ']4. tiktoken (OpenAI) Length Function
OpenAIใฎใใผใฏใใคใถใผใซใใTextSplitterใงใใ
text_splitter = CharacterTextSplitter.from_tiktoken_encoder(
separator = "\n\n", # ใปใใฌใผใฟ
chunk_size=14, # ใใฃใณใฏใฎใใผใฏใณๆฐ
chunk_overlap=0 # ใใฃใณใฏใชใผใใผใฉใใใฎใใผใฏใณๆฐ
)ใฏใใใซใใปใใฌใผใฟๅๅฒใใๅฐใใใใฃใณใฏใฎใใผใฏใณๆฐใ็ขบ่ชใใพใใ
import tiktoken
enc = tiktoken.get_encoding("gpt2")
print(len(enc.encode("ใใใใใ")))
print(len(enc.encode("ใใใใใ")))
print(len(enc.encode("ใใใใใ")))
print(len(enc.encode("ใใใ")))
print(len(enc.encode("ใใใ")))7
6
7
6
4ใปใใฌใผใฟใชใใฎใใญในใใฏๅๅฒใใใพใใใ
print(text_splitter.split_text("ใใใใใใใใใใใใใใใใใใใใใ"))['ใใใใใใใใใใใใใใใใใใใใใ']ใปใใฌใผใฟใฎใใใงใใฃใณใฏใฎใใผใฏใณๆฐใ11ใซใใใจใๆฌกใฎใใใซๅๅฒใใใพใใ
print(text_splitter.split_text("ใใใใใ\n\nใใใใใ\n\nใใใใใ\n\nใใใ\n\nใใใ"))['ใใใใใ\n\nใใใใใ', 'ใใใใใ\n\nใใใ', 'ใใใ']ใใฃใณใฏใชใผใใผใฉใใใฎๆๅญๆฐใ6ใซใใใจใๆฌกใฎใใใซๅๅฒใใใพใใ
ใใใใใใใใฏ6ใใผใฏใณใชใฎใงใชใผใใผใฉใใใใใใใใใใใใใฏ7ใใผใฏใณใชใฎใงใชใผใใผใฉใใใใใพใใใ
print(text_splitter.split_text("ใใใใใ\n\nใใใใใ\n\nใใใใใ\n\nใใใ\n\nใใใ"))['ใใใใใ\n\nใใใใใ', 'ใใใใใ\n\nใใใใใ', 'ใใใ\n\nใใใ']ใใฎไปใฎTextSplitter
ใใฎไปใฎTextSplitterใฏใๆฌกใฎใจใใใงใใ
4.1 HuggingFace Length Function
HuggingFaceใฎใใผใฏใใคใถใผใซใใTextSplitterใงใใ
text_splitter = CharacterTextSplitter.from_huggingface_tokenizer(
GPT2TokenizerFast.from_pretrained("gpt2"),
chunk_size=100, # ใใฃใณใฏใฎใใผใฏใณๆฐ
chunk_overlap=0 # ใใฃใณใฏใชใผใใผใฉใใใฎใใผใฏใณๆฐ
)4.2 NLTKTextSplitter
NLTKใซใใTextSplitterใงใใ
from langchain.text_splitter import NLTKTextSplitter
text_splitter = NLTKTextSplitter(
chunk_size=1000 # ใใฃใณใฏใฎใใผใฏใณๆฐ
)4.3 SpacyTextSplitter
SpacyใซใใTextSplitterใงใใ
from langchain.text_splitter import SpacyTextSplitter
text_splitter = SpacyTextSplitter(
chunk_size=1000 # ใใฃใณใฏใฎใใผใฏใณๆฐ
)