05. Code Splitting (Python, Markdown, JAVA, C++, C#, GO, JS, Latex, etc.)
Split code
Anda dapat membagi kode yang ditulis dalam berbagai bahasa pemrograman menggunakan CodeTextSplitter.
Untuk melakukan ini, impor enum Language
dan tentukan bahasa pemrograman yang sesuai.
%pip install -qU langchain-text-splitters
Berikut adalah contoh pemecahan teks menggunakan RecursiveCharacterTextSplitter
- Impor kelas
Language
danRecursiveCharacterTextSplitter
dari modullangchain_text_splitters
. RecursiveCharacterTextSplitter
adalah pemisah teks yang memecah teks secara rekursif pada level karakter.
from langchain_text_splitters import (
Language,
RecursiveCharacterTextSplitter,
)
Ambil daftar lengkap bahasa yang didukung.
# Mendapatkan daftar lengkap bahasa yang didukung.
[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']
Anda dapat memeriksa pemisah yang digunakan untuk bahasa tertentu dengan menggunakan metode get_separators_for_language
dari kelas RecursiveCharacterTextSplitter
.
- Dalam contoh ini, nilai enum
Language.PYTHON
diteruskan sebagai argumen untuk memeriksa pemisah yang digunakan untuk bahasa Python.
# Anda dapat memeriksa pemisah yang digunakan untuk bahasa tertentu.
RecursiveCharacterTextSplitter.get_separators_for_language(Language.PYTHON)
['\nclass ', '\ndef ', '\n\tdef ', '\n\n', '\n', ' ', '']
Python
Berikut adalah contoh penggunaan RecursiveCharacterTextSplitter
:
- Membagi kode Python menjadi unit dokumen menggunakan
RecursiveCharacterTextSplitter
. - Tentukan
Language.PYTHON
untuk parameter language untuk menggunakan bahasa Python. - Atur
chunk_size
menjadi 50 untuk membatasi ukuran maksimum setiap dokumen. - Atur
chunk_overlap
menjadi 0 untuk mencegah tumpang tindih antar dokumen.
PYTHON_CODE = """
def hello_world():
print("Hello, World!")
hello_world()
"""
python_splitter = RecursiveCharacterTextSplitter.from_language(
language=Language.PYTHON, chunk_size=50, chunk_overlap=0
)
Buat Document
. Document
yang dihasilkan akan dikembalikan dalam bentuk daftar (list).
python_docs = python_splitter.create_documents([PYTHON_CODE])
python_docs
['\nclass ', '\ndef ', '\n\tdef ', '\n\n', '\n', ' ', '']
[Document(page_content='def hello_world():\n print("Hello, World!")'), Document(page_content='hello_world()')]
for doc in python_docs:
print(doc.page_content, end="\n==================\n")
def hello_world():
print("Hello, World!")
==================
hello_world()
==================
JS
Berikut adalah contoh penggunaan text splitter untuk 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(page_content='function helloWorld() {\n console.log("Hello, World!");\n}'), Document(page_content='helloWorld();')]
TS
Berikut adalah contoh penggunaan text splitter untuk TS.
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(page_content='function helloWorld(): void {'), Document(page_content='console.log("Hello, World!");\n}'), Document(page_content='helloWorld();')]
Markdown
markdown_text = """
# 🦜️🔗 LangChain
⚡ Build ultra-fast applications leveraging LLM ⚡
## Quick Installation
```bash
pip install langchain
Ini adalah proyek open-source di bidang yang berkembang pesat. Mohon perhatiannya dan dukungannya. 🙏
"""
md_splitter = RecursiveCharacterTextSplitter.from_language(
# Membuat pemisah teks menggunakan bahasa Markdown
language=Language.MARKDOWN,
# Mengatur ukuran chunk menjadi 60
chunk_size=60,
# Mengatur tidak ada tumpang tindih antara chunk
chunk_overlap=0,
)
# Membagi teks Markdown dan membuat dokumen
md_docs = md_splitter.create_documents([markdown_text])
# Cetak dokumen yang dihasilkan
md_docs
[Document(page_content='# 🦜️🔗 LangChain'), Document(page_content='⚡ Membangun aplikasi super cepat menggunakan LLM ⚡'), Document(page_content='## Instalasi Cepat'), Document(page_content='```bash\npip install langchain'), Document(page_content='Ini adalah proyek open-source di bidang yang berkembang'), Document(page_content='pesat. Mohon perhatiannya dan dukungannya. 🙏')]
Latex
LaTeX adalah bahasa markup yang digunakan untuk pembuatan dokumen, yang banyak digunakan untuk mengekspresikan simbol dan persamaan matematika.
Berikut adalah contoh teks LaTeX.
latex_text = r"""
\documentclass{article}
\begin{document}
\maketitle
\section{Introduction}
% LLM adalah jenis model pembelajaran mesin yang dilatih pada sejumlah besar data teks dan dapat menghasilkan bahasa yang mirip dengan manusia.
% Dalam beberapa tahun terakhir, LLM telah mencapai kemajuan yang signifikan dalam berbagai tugas pemrosesan bahasa alami, termasuk penerjemahan bahasa, pembuatan teks, dan analisis sentimen.
\subsection{History of LLMs}
% LLM awal dikembangkan pada 1980-an dan 1990-an, tetapi terbatas oleh jumlah data yang dapat mereka proses dan daya komputasi yang tersedia saat itu.
% Namun, kemajuan dalam perangkat keras dan perangkat lunak selama dekade terakhir telah memungkinkan LLM untuk dilatih pada set data besar, yang mengarah pada peningkatan kinerja yang signifikan.
\subsection{Applications of LLMs}
% LLM memiliki banyak aplikasi di berbagai industri, termasuk chatbot, pembuatan konten, dan asisten virtual.
% Mereka juga dapat digunakan di dunia akademis untuk penelitian dalam linguistik, psikologi, dan linguistik komputasional.
\end{document}
"""
Bagi teks dan cetak hasilnya.
latex_splitter = RecursiveCharacterTextSplitter.from_language(
# Memecah teks menggunakan bahasa LaTeX.
language=Language.LATEX,
# Mengatur ukuran setiap chunk menjadi 60 karakter.
chunk_size=60,
# Mengatur jumlah karakter yang tumpang tindih antar chunk menjadi 0.
chunk_overlap=0,
)
# Memecah latex_text dan membuat daftar dokumen.
latex_docs = latex_splitter.create_documents([latex_text])
# Cetak daftar dokumen yang dihasilkan.
latex_docs
[Document(page_content='\\documentclass{article}\n\n\\begin{document}\n\n\\maketitle'), Document(page_content='\\section{Introduction}\n% LLM adalah jenis model'), Document(page_content='pembelajaran mesin yang dilatih pada sejumlah besar data'), Document(page_content='teks dan dapat menghasilkan bahasa yang mirip dengan'), Document(page_content='manusia.\n% Dalam beberapa tahun terakhir, LLM telah'), Document(page_content='mencapai kemajuan yang signifikan dalam berbagai tugas'), Document(page_content='pemrosesan bahasa alami, termasuk penerjemahan bahasa,'), Document(page_content='pembuatan teks, dan analisis sentimen.'), Document(page_content='\\subsection{History of LLMs}\n% LLM awal dikembangkan pada'), Document(page_content='1980-an dan 1990-an, tetapi terbatas oleh jumlah data yang'), Document(page_content='dapat mereka proses dan daya komputasi yang tersedia saat'), Document(page_content='itu.\n% Namun, kemajuan dalam perangkat keras dan perangkat'), Document(page_content='lunak selama dekade terakhir telah memungkinkan LLM untuk'), Document(page_content='dilatih pada set data besar, yang mengarah pada peningkatan'), Document(page_content='kinerja yang signifikan.'), Document(page_content='\\subsection{Applications of LLMs}\n% LLM memiliki banyak'), Document(page_content='aplikasi di berbagai industri, termasuk chatbot, pembuatan'), Document(page_content='konten, dan asisten virtual.\n% Mereka juga dapat digunakan'), Document(page_content='di dunia akademis untuk penelitian dalam linguistik,'), Document(page_content='psikologi, dan linguistik komputasional.\n\n\\end{document}')]
HTML
Berikut adalah contoh penggunaan text splitter untuk 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>⚡ Membangun aplikasi dengan LLM melalui komposabilitas ⚡</p>
</div>
<div>
Sebagai proyek open-source di bidang yang berkembang pesat, kami sangat terbuka untuk kontribusi.
</div>
</body>
</html>
"""
Bagi teks dan cetak hasilnya
html_splitter = RecursiveCharacterTextSplitter.from_language(
# Membuat pemisah teks menggunakan bahasa HTML
language=Language.HTML,
# Mengatur ukuran chunk menjadi 60
chunk_size=60,
# Memastikan tidak ada tumpang tindih antara chunk
chunk_overlap=0,
)
# Membagi teks HTML yang diberikan dan membuat dokumen
html_docs = html_splitter.create_documents([html_text])
# Cetak dokumen yang dihasilkan
html_docs
[Document(page_content='<!DOCTYPE html>\n<html>'), Document(page_content='<head>\n <title>🦜️🔗 LangChain</title>'), Document(page_content='<style>\n body {\n font-family: Aria'), Document(page_content='l, sans-serif; \n }\n h1 {'), Document(page_content='color: darkblue;\n }\n </style>\n </he'), Document(page_content='ad>'), Document(page_content='<body>'), Document(page_content='<div>\n <h1>🦜️🔗 LangChain</h1>'), Document(page_content='<p>⚡ Membangun aplikasi dengan LLM melalui komposabilitas ⚡<'), Document(page_content='/p> \n </div>'), Document(page_content='<div>\n Sebagai proyek open-source di bidang yang'), Document(page_content='berkembang pesat, kami sangat terbuka untuk kontribusi.'), Document(page_content='</div>\n </body>\n</html>')]
Solidity
Berikut adalah contoh penggunaan text splitter untuk Solidity:
- Kode Solidity dalam bentuk string.
SOL_CODE
Simpan dalam sebuah variable
RecursiveCharacterTextSplitter
Memecah kode Solidity menjadi unit chunk menggunakan
sol_splitter
Membuat splitter
language
Atur parameter.
Language.SOL
Tentukan bahasa Solidity dengan mengatur parameter.
chunk_size
Atur ukuran chunk menjadi 128 untuk menentukan ukuran maksimum setiap chunk
chunk_overlap
Atur overlap menjadi 0 untuk menghilangkan duplikasi antara chunk
sol_splitter.create_documents()
Menggunakan metode
SOL_CODE
Bagi menjadi unit chunk, dan simpan chunk yang telah dibagi.
sol_docs
Simpan dalam sebuah variabel.
sol_docs
Cetak variabel tersebut untuk memeriksa chunk kode Solidity yang telah dibagi.
SOL_CODE = """
pragma solidity ^0.8.20;
contract HelloWorld {
function add(uint a, uint b) pure public returns(uint) {
return a + b;
}
}
"""
# Pisahkan dan keluarkan hasilnya.
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(page_content='pragma solidity ^0.8.20;'), Document(page_content='contract HelloWorld { \n function add(uint a, uint b) pure public returns(uint) {\n return a + b;\n }\n}')]
C
Berikut adalah contoh penggunaan text splitter untuk 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!");
}
}
"""
# Membagi kode dan mencetak hasilnya.
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(page_content='using System;'), Document(page_content='class Program\n{\n static void Main()\n {\n Console.WriteLine("Enter a number (1-5):");'), Document(page_content='int input = Convert.ToInt32(Console.ReadLine());\n for (int i = 1; i <= input; i++)\n {'), Document(page_content='if (i % 2 == 0)\n {\n Console.WriteLine($"{i} is even.");\n }\n else'), Document(page_content='{\n Console.WriteLine($"{i} is odd.");\n }\n }\n Console.WriteLine("Goodbye!");'), Document(page_content='}\n}')]