乐于分享
好东西不私藏

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

本文最后更新于2026-03-13,某些文章具有时效性,若有错误或已失效,请在下方留言或联系老夜

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

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

Code代码切割

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

"cpp",
"go",
"java",
"kotlin",
"js",
"ts",
"php",
"proto",
"python",
"rst",
"ruby",
"rust",
"scala",
"swift",
"markdown",
"latex",
"html",
"sol",
"csharp",
"cobol",
"c",
"lua",
"perl",
"haskell"

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

RecursiveCharacterTextSplitter.get_separators_for_language

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

RecursiveCharacterTextSplitter.from_language

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

pip install -qU langchain-text-splitters
from langchain_text_splitters import (
    Language,
    RecursiveCharacterTextSplitter,
)

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

[e.value for e in Language]
['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']

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

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

编程语言切割示例

Python

以下是使用 PythonTextSplitter 的示例:

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 文本分割器的示例:

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 文本分割器的示例:

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 文本分割器的示例:

markdown_text = """
# 🦜️🔗 LangChain

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

## 什么是 LangChain?

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

作为一个快速发展的开源项目,我们非常欢迎贡献。
"""
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 文本的示例:

latex_text = """
\documentclass{article}

\begin{document}

\maketitle

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

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

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

\end{document}
"""
latex_splitter = RecursiveCharacterTextSplitter.from_language(
    language=Language.MARKDOWN, chunk_size=60, chunk_overlap=0
)
latex_docs = latex_splitter.create_documents([latex_text])
latex_docs
[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 文本分割器的示例:

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>
"""
html_splitter = RecursiveCharacterTextSplitter.from_language(
    language=Language.HTML, chunk_size=60, chunk_overlap=0
)
html_docs = html_splitter.create_documents([html_text])
html_docs
[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 文本分割器的示例:

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
[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# 文本分割器的示例:

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
[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 文本分割器的示例:

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 文本分割器的示例:

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;
}"""

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 文本分割器的示例:

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
[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 文本分割器的示例:

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
[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代码文本切割器

猜你喜欢

  • 暂无文章