CodeTextSplitter를 사용하면 다양한 프로그래밍 언어로 작성된 코드를 분할할 수 있습니다.
이를 위해서는 Language enum을 import하고, 해당하는 프로그래밍 언어를 지정해주면 됩니다.
RecursiveCharacterTextSplitter를 사용하여 텍스트를 분할하는 예제입니다.
langchain_text_splitters모듈에서Language와RecursiveCharacterTextSplitter클래스를 임포트합니다.RecursiveCharacterTextSplitter는 텍스트를 문자 단위로 재귀적으로 분할하는 텍스트 분할기입니다.
지원되는 언어의 전체 목록을 가져옵니다.
RecursiveCharacterTextSplitter 클래스의 get_separators_for_language 메서드를 사용하여 특정 언어에 사용되는 구분자(separators)를 확인할 수 있습니다.
- 예시에서는
Language.PYTHON열거형 값을 인자로 전달하여 Python 언어에 사용되는 구분자를 확인합니다.
# 주어진 언어에 대해 사용되는 구분자를 확인할 수 있습니다.
RecursiveCharacterTextSplitter.get_separators_for_language(Language.PYTHON)0.1 Python
RecursiveCharacterTextSplitter 사용한 예제는 다음과 같습니다.
RecursiveCharacterTextSplitter를 사용하여 Python 코드를 문서 단위로 분할합니다.language매개변수에Language.PYTHON을 지정하여 Python 언어를 사용합니다.chunk_size를 50으로 설정하여 각 문서의 최대 크기를 제한합니다.chunk_overlap을 0으로 설정하여 문서 간의 중복을 허용하지 않습니다.
PYTHON_CODE = """
def hello_world():
print("Hello, World!")
hello_world()
"""
python_splitter = RecursiveCharacterTextSplitter.from_language(
language=Language.PYTHON, chunk_size=50, chunk_overlap=0
)Document 를 생성합니다. 생성된 Document 는 리스트 형태로 반환됩니다.
0.2 JS
다음은 JS 텍스트 분할기를 사용한 예시입니다
0.3 TS
다음은 TS 텍스트 분할기를 사용한 예시입니다.
0.4 Markdown
다음은 Markdown 텍스트 분할기를 사용한 예시입니다.
1 빠르게 발전하는 분야의 오픈 소스 프로젝트 입니다. 많관부 🙏
““”
분할하고 결과를 출력합니다.
```python
md_splitter = RecursiveCharacterTextSplitter.from_language(
# 마크다운 언어를 사용하여 텍스트 분할기 생성
language=Language.MARKDOWN,
# 청크 크기를 60으로 설정
chunk_size=60,
# 청크 간 중복되는 부분이 없도록 설정
chunk_overlap=0,
)
# 마크다운 텍스트를 분할하여 문서 생성
md_docs = md_splitter.create_documents([markdown_text])
# 생성된 문서 출력
md_docs
1.1 Latex
LaTeX는 문서 작성을 위한 마크업 언어로, 수학 기호와 수식을 표현하는 데 널리 사용됩니다.
다음은 LaTeX 텍스트의 예시입니다.
latex_text = """
\documentclass{article}
\begin{document}
\maketitle
\section{Introduction}
% LLM은 방대한 양의 텍스트 데이터로 학습하여 사람과 유사한 언어를 생성할 수 있는 기계 학습 모델의 한 유형입니다.
% 최근 몇 년 동안 LLM은 언어 번역, 텍스트 생성, 감성 분석 등 다양한 자연어 처리 작업에서 상당한 발전을 이루었습니다.
\subsection{History of LLMs}
% 초기 LLM은 1980년대와 1990년대에 개발되었지만, 처리할 수 있는 데이터 양과 당시 사용 가능한 컴퓨팅 능력으로 인해 제한되었습니다.
% 그러나 지난 10년 동안 하드웨어와 소프트웨어의 발전으로 대규모 데이터 세트에 대해 LLM을 학습시킬 수 있게 되었고, 이는 성능의 큰 향상으로 이어졌습니다.
\subsection{Applications of LLMs}
% LLM은 챗봇, 콘텐츠 생성, 가상 어시스턴트 등 산업 분야에서 많은 응용 분야를 가지고 있습니다.
% 또한 언어학, 심리학, 컴퓨터 언어학 연구를 위해 학계에서도 사용될 수 있습니다.
\end{document}
"""분할하고 결과를 출력합니다.
latex_splitter = RecursiveCharacterTextSplitter.from_language(
# 마크다운 언어를 사용하여 텍스트를 분할합니다.
language=Language.LATEX,
# 각 청크의 크기를 60자로 설정합니다.
chunk_size=60,
# 청크 간의 중복되는 문자 수를 0으로 설정합니다.
chunk_overlap=0,
)
# latex_text를 분할하여 문서 목록을 생성합니다.
latex_docs = latex_splitter.create_documents([latex_text])
# 생성된 문서 목록을 출력합니다.
latex_docs1.2 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>⚡ Building applications with LLMs through composability ⚡</p>
</div>
<div>
As an open-source project in a rapidly developing field, we are extremely open to contributions.
</div>
</body>
</html>
"""분할하고 결과를 출력합니다.
1.3 Solidity
Solidity 텍스트 분할기를 사용한 예제는 다음과 같습니다:
- Solidity 코드를 문자열 형태로
SOL_CODE변수에 저장합니다. RecursiveCharacterTextSplitter를 사용하여 Solidity 코드를 청크 단위로 분할하는sol_splitter를 생성합니다.language매개변수를Language.SOL로 설정하여 Solidity 언어를 지정합니다.chunk_size를 128로 설정하여 각 청크의 최대 크기를 지정합니다.chunk_overlap을 0으로 설정하여 청크 간의 중복을 없앱니다.
sol_splitter.create_documents()메서드를 사용하여SOL_CODE를 청크 단위로 분할하고, 분할된 청크를sol_docs변수에 저장합니다.sol_docs를 출력하여 분할된 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_docs1.4 C
C# 텍스트 분할기를 사용한 예제는 다음과 같습니다.
C_CODE = """
using System;
class Program
{
static void Main()
{
Console.WriteLine("Enter a number (1-5):");
int input = Convert.ToInt32(Console.ReadLine());
for (int i = 1; i <= input; i++)
{
if (i % 2 == 0)
{
Console.WriteLine($"{i} is even.");
}
else
{
Console.WriteLine($"{i} is odd.");
}
}
Console.WriteLine("Goodbye!");
}
}
"""
# 분할하고 결과를 출력합니다.
c_splitter = RecursiveCharacterTextSplitter.from_language(
language=Language.CSHARP, chunk_size=128, chunk_overlap=0
)
c_docs = c_splitter.create_documents([C_CODE])
c_docs