LangChain:基于文档结构的的Code代码文本切割器

代码文本分割器集成指南。根据编程代码语言自己的风格对 Code 进行分隔,可以切割的更完整,大模型可以更好的理解代码逻辑。

Code代码切割

RecursiveCharacterTextSplitter 包含了预构建的分隔符列表,这些列表对于分割特定编程语言的文本非常有用。支持的语言存储在 langchain_text_splitters.Language 枚举中。包括:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
"cpp",
"go",
"java",
"kotlin",
"js",
"ts",
"php",
"proto",
"python",
"rst",
"ruby",
"rust",
"scala",
"swift",
"markdown",
"latex",
"html",
"sol",
"csharp",
"cobol",
"c",
"lua",
"perl",
"haskell"

要查看特定语言的分隔符列表,请将此枚举中的值传入

1
RecursiveCharacterTextSplitter.get_separators_for_language

要实例化一个为特定语言定制的分割器,请将枚举中的值传入

1
RecursiveCharacterTextSplitter.from_language

下面我们将演示各种语言的示例。

1
pip install -qU langchain-text-splitters
1
2
3
4
from langchain_text_splitters import (
Language,
RecursiveCharacterTextSplitter,
)

要查看所有支持语言的完整列表:

1
[e.value for e in Language]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
['cpp',
'go',
'java',
'kotlin',
'js',
'ts',
'php',
'proto',
'python',
'rst',
'ruby',
'rust',
'scala',
'swift',
'markdown',
'latex',
'html',
'sol',
'csharp',
'cobol',
'c',
'lua',
'perl',
'haskell',
'elixir',
'powershell',
'visualbasic6']

还可以查看特定语言使用的分隔符:

1
RecursiveCharacterTextSplitter.get_separators_for_language(Language.PYTHON)
1
['\nclass ', '\ndef ', '\n\tdef ', '\n\n', '\n', ' ', '']

编程语言切割示例

Python

以下是使用 PythonTextSplitter 的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
PYTHON_CODE = """
def hello_world():
print("Hello, World!")

# 调用函数
hello_world()
"""
python_splitter = RecursiveCharacterTextSplitter.from_language(
language=Language.PYTHON, chunk_size=50, chunk_overlap=0
)
python_docs = python_splitter.create_documents([PYTHON_CODE])
python_docs
[Document(metadata={}, page_content='def hello_world():\n print("Hello, World!")'),
Document(metadata={}, page_content='# 调用函数\nhello_world()')]

JS

以下是使用 JS 文本分割器的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
JS_CODE = """
function helloWorld() {
console.log("Hello, World!");
}

// 调用函数
helloWorld();
"""

js_splitter = RecursiveCharacterTextSplitter.from_language(
language=Language.JS, chunk_size=60, chunk_overlap=0
)
js_docs = js_splitter.create_documents([JS_CODE])
js_docs
[Document(metadata={}, page_content='function helloWorld() {\n console.log("Hello, World!");\n}'),
Document(metadata={}, page_content='// 调用函数\nhelloWorld();')]

TS

以下是使用 TypeScript 文本分割器的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
TS_CODE = """
function helloWorld(): void {
console.log("Hello, World!");
}

// 调用函数
helloWorld();
"""

ts_splitter = RecursiveCharacterTextSplitter.from_language(
language=Language.TS, chunk_size=60, chunk_overlap=0
)
ts_docs = ts_splitter.create_documents([TS_CODE])
ts_docs

[Document(metadata={}, page_content='function helloWorld(): void {'),
Document(metadata={}, page_content='console.log("Hello, World!");\n}'),
Document(metadata={}, page_content='// 调用函数\nhelloWorld();')]

Markdown

以下是使用 Markdown 文本分割器的示例:

1
2
3
4
5
6
7
8
9
10
11
12
markdown_text = """
# 🦜️🔗 LangChain

⚡ 通过可组合性构建基于 LLM 的应用程序 ⚡

## 什么是 LangChain?

# 希望这个代码块不会被分割
LangChain 是一个用于...的框架。

作为一个快速发展的开源项目,我们非常欢迎贡献。
"""
1
2
3
4
5
6
7
8
9
10
11
md_splitter = RecursiveCharacterTextSplitter.from_language(
language=Language.MARKDOWN, chunk_size=60, chunk_overlap=0
)
md_docs = md_splitter.create_documents([markdown_text])
md_docs
[Document(metadata={}, page_content='# 🦜️🔗 LangChain'),
Document(metadata={}, page_content='⚡ 通过可组合性构建基于 LLM 的应用程序 ⚡'),
Document(metadata={}, page_content='## 什么是 LangChain?'),
Document(metadata={}, page_content="# 希望这个代码块不会被分割"),
Document(metadata={}, page_content='LangChain 是一个用于...的框架。'),
Document(metadata={}, page_content='作为一个快速发展的开源项目,我们非常欢迎贡献。')]

Laex

以下是使用 LaTeX 文本的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
latex_text = """
\documentclass{article}

\begin{document}

\maketitle

\section{引言}
大型语言模型(LLM)是一种机器学习模型,可以在大量文本数据上进行训练,以生成类似人类的语言。近年来,LLM 在多种自然语言处理任务中取得了显著进展,包括语言翻译、文本生成和情感分析。

\subsection{LLM 的历史}
最早的 LLM 是在 20 世纪 80 年代和 90 年代开发的,但受限于当时可处理的数据量和可用的计算能力。然而,在过去十年中,硬件和软件的进步使得在大型数据集上训练 LLM 成为可能,从而显著提高了性能。

\subsection{LLM 的应用}
LLM 在工业界有许多应用,包括聊天机器人、内容创作和虚拟助手。它们也可用于学术界的语言学、心理学和计算语言学研究。

\end{document}
"""
1
2
3
4
5
6
latex_splitter = RecursiveCharacterTextSplitter.from_language(
language=Language.MARKDOWN, chunk_size=60, chunk_overlap=0
)
latex_docs = latex_splitter.create_documents([latex_text])
latex_docs

1
2
3
4
5
6
7
8
9
10
11
[Document(metadata={}, page_content='\\documentclass{article}\n\n\x08egin{document}\n\n\\maketitle'),
Document(metadata={}, page_content='\\section{引言}'),
Document(metadata={}, page_content='大型语言模型(LLM)是一种机器学习模型,可以在大量文本数据上进行训练,以'),
Document(metadata={}, page_content='生成类似人类的语言。近年来,LLM 在多种自然语言处理任务中取得了显著进展,包括语言翻译、文本'),
Document(metadata={}, page_content='生成和情感分析。'),
Document(metadata={}, page_content='\\subsection{LLM 的历史}'),
Document(metadata={}, page_content='最早的 LLM 是在 20 世纪 80 年代和 90 年代开发的,但受限于当时'),
Document(metadata={}, page_content='可处理的数据量和可用的计算能力。然而,在过去十年中,硬件和软件的进步使得在大型数据集上训练 LLM 成为可能,从而显著提高了性能。'),
Document(metadata={}, page_content='\\subsection{LLM 的应用}'),
Document(metadata={}, page_content='LLM 在工业界有许多应用,包括聊天机器人、内容创作和虚拟助手。它们也可用于学术界的语言学、心理学和计算语言学研究。'),
Document(metadata={}, page_content='\\end{document}')]

HTML

以下是使用 HTML 文本分割器的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
html_text = """
<!DOCTYPE html>
<html>
<head>
<title>🦜️🔗 LangChain</title>
<style>
body {
font-family: Arial, sans-serif;
}
h1 {
color: darkblue;
}
</style>
</head>
<body>
<div>
<h1>🦜️🔗 LangChain</h1>
<p>⚡ 通过可组合性构建基于 LLM 的应用程序 ⚡</p>
</div>
<div>
作为一个快速发展的开源项目,我们非常欢迎贡献。
</div>
</body>
</html>
"""
1
2
3
4
5
6
html_splitter = RecursiveCharacterTextSplitter.from_language(
language=Language.HTML, chunk_size=60, chunk_overlap=0
)
html_docs = html_splitter.create_documents([html_text])
html_docs

1
2
3
4
5
6
7
8
9
10
11
12
[Document(metadata={}, page_content='<!DOCTYPE html>\n<html>'),
Document(metadata={}, page_content='<head>\n <title>🦜️🔗 LangChain</title>'),
Document(metadata={}, page_content='<style>\n body {\n font-family: Aria'),
Document(metadata={}, page_content='l, sans-serif;\n }\n h1 {'),
Document(metadata={}, page_content='color: darkblue;\n }\n </style>\n </head'),
Document(metadata={}, page_content='>'),
Document(metadata={}, page_content='<body>'),
Document(metadata={}, page_content='<div>\n <h1>🦜️🔗 LangChain</h1>'),
Document(metadata={}, page_content='<p>⚡ 通过可组合性构建基于 LLM 的应用程序 ⚡'),
Document(metadata={}, page_content='</p>\n </div>'),
Document(metadata={}, page_content='<div>\n 作为一个快速发展的开源项目,我们非常欢迎贡献。'),
Document(metadata={}, page_content='</div>\n </body>\n</html>')]

Solidity

以下是使用 Solidity 文本分割器的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SOL_CODE = """
pragma solidity ^0.8.20;
contract HelloWorld {
function add(uint a, uint b) pure public returns(uint) {
return a + b;
}
}
"""

sol_splitter = RecursiveCharacterTextSplitter.from_language(
language=Language.SOL, chunk_size=128, chunk_overlap=0
)
sol_docs = sol_splitter.create_documents([SOL_CODE])
sol_docs
1
2
[Document(metadata={}, page_content='pragma solidity ^0.8.20;'),
Document(metadata={}, page_content='contract HelloWorld {\n function add(uint a, uint b) pure public returns(uint) {\n return a + b;\n }\n}')]

C#

以下是使用 C# 文本分割器的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
C_CODE = """
using System;
class Program
{
static void Main()
{
int age = 30; // 根据需要更改年龄值

// 对年龄进行分类,不进行任何控制台输出
if (age < 18)
{
// 年龄小于18岁
}
else if (age >= 18 && age < 65)
{
// 年龄为成年人
}
else
{
// 年龄为老年人
}
}
}
"""
c_splitter = RecursiveCharacterTextSplitter.from_language(
language=Language.CSHARP, chunk_size=128, chunk_overlap=0
)
c_docs = c_splitter.create_documents([C_CODE])
c_docs
1
2
3
4
5
[Document(metadata={}, page_content='using System;'),
Document(metadata={}, page_content='class Program\n{\n static void Main()\n {\n int age = 30; // 根据需要更改年龄值'),
Document(metadata={}, page_content='// 对年龄进行分类,不进行任何控制台输出\n if (age < 18)\n {\n // 年龄小于18岁'),
Document(metadata={}, page_content='}\n else if (age >= 18 && age < 65)\n {\n // 年龄为成年人\n }\n else\n {'),
Document(metadata={}, page_content='// 年龄为老年人\n }\n }\n}')]

Haskell

以下是使用 Haskell 文本分割器的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
HASKELL_CODE = """
main :: IO ()
main = do
putStrLn "Hello, World!"
-- 一些示例函数
add :: Int -> Int -> Int
add x y = x + y
"""
haskell_splitter = RecursiveCharacterTextSplitter.from_language(
language=Language.HASKELL, chunk_size=50, chunk_overlap=0
)
haskell_docs = haskell_splitter.create_documents([HASKELL_CODE])
haskell_docs
[Document(metadata={}, page_content='main :: IO ()'),
Document(metadata={}, page_content='main = do\n putStrLn "Hello, World!"\n-- 一些'),
Document(metadata={}, page_content='示例函数\nadd :: Int -> Int -> Int\nadd x y'),
Document(metadata={}, page_content='= x + y')]

PHP

以下是使用 PHP 文本分割器的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
PHP_CODE = """<?php
namespace foo;
class Hello {
public function __construct() { }
}
function hello() {
echo "Hello World!";
}
interface Human {
public function breath();
}
trait Foo { }
enum Color
{
case Red;
case Blue;
}"""

1
2
3
4
5
6
7
8
9
10
11
12
php_splitter = RecursiveCharacterTextSplitter.from_language(
language=Language.PHP, chunk_size=50, chunk_overlap=0
)
php_docs = php_splitter.create_documents([PHP_CODE])
php_docs
[Document(metadata={}, page_content='<?php\nnamespace foo;'),
Document(metadata={}, page_content='class Hello {'),
Document(metadata={}, page_content='public function __construct() { }\n}'),
Document(metadata={}, page_content='function hello() {\n echo "Hello World!";\n}'),
Document(metadata={}, page_content='interface Human {\n public function breath();\n}'),
Document(metadata={}, page_content='trait Foo { }\nenum Color\n{\n case Red;'),
Document(metadata={}, page_content='case Blue;\n}')]

PowerShell

以下是使用 PowerShell 文本分割器的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
POWERSHELL_CODE = """
$directoryPath = Get-Location

$items = Get-ChildItem -Path $directoryPath

$files = $items | Where-Object { -not $_.PSIsContainer }

$sortedFiles = $files | Sort-Object LastWriteTime

foreach ($file in $sortedFiles) {
Write-Output ("Name: " + $file.Name + " | Last Write Time: " + $file.LastWriteTime)
}
"""
powershell_splitter = RecursiveCharacterTextSplitter.from_language(
language=Language.POWERSHELL, chunk_size=100, chunk_overlap=0
)
powershell_docs = powershell_splitter.create_documents([POWERSHELL_CODE])
powershell_docs

1
2
3
4
5
[Document(metadata={}, page_content='$directoryPath = Get-Location\n\n$items = Get-ChildItem -Path $directoryPath'),
Document(metadata={}, page_content='$files = $items | Where-Object { -not $_.PSIsContainer }'),
Document(metadata={}, page_content='$sortedFiles = $files | Sort-Object LastWriteTime'),
Document(metadata={}, page_content='foreach ($file in $sortedFiles) {'),
Document(metadata={}, page_content='Write-Output ("Name: " + $file.Name + " | Last Write Time: " + $file.LastWriteTime)\n}')]

Visual Basic 6

以下是使用 Visual Basic 6 文本分割器的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
VISUALBASIC6_CODE = """Option Explicit

Public Sub HelloWorld()
MsgBox "Hello, World!"
End Sub

Private Function Add(a As Integer, b As Integer) As Integer
Add = a + b
End Function
"""
visualbasic6_splitter = RecursiveCharacterTextSplitter.from_language(
Language.VISUALBASIC6,
chunk_size=128,
chunk_overlap=0,
)
visualbasic6_docs = visualbasic6_splitter.create_documents([VISUALBASIC6_CODE])
visualbasic6_docs

1
2
3
[Document(metadata={}, page_content='Option Explicit'),
Document(metadata={}, page_content='Public Sub HelloWorld()\n MsgBox "Hello, World!"\nEnd Sub'),
Document(metadata={}, page_content='Private Function Add(a As Integer, b As Integer) As Integer\n Add = a + b\nEnd Function')]

LangChain:基于文档结构的的Code代码文本切割器

http://blog.gxitsky.com/2026/03/12/AI-LangChain-024-TextSpliter-Code/

作者

光星

发布于

2026-03-12

更新于

2026-03-12

许可协议

评论