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 dan RecursiveCharacterTextSplitter dari modul langchain_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;
   }
}
"""

# 분할하고 결과를 출력합니다.
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}')]

Last updated