05. Code Splitting Python Markdown Java Cpp C Go JS Latex Etc

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.

Terminal
%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.
Python
from langchain_text_splitters import (
    Language,
    RecursiveCharacterTextSplitter,
)

Ambil daftar lengkap bahasa yang didukung.

Python
# Mendapatkan daftar lengkap bahasa yang didukung.
[e.value for e in Language]
Output
['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.
Python
# Anda dapat memeriksa pemisah yang digunakan untuk bahasa tertentu.
RecursiveCharacterTextSplitter.get_separators_for_language(Language.PYTHON)
Output
['\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
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
python_docs = python_splitter.create_documents([PYTHON_CODE])
python_docs
Output
['\nclass ', '\ndef ', '\n\tdef ', '\n\n', '\n', ' ', '']
[Document(page_content='def hello_world():\n    print("Hello, World!")'), Document(page_content='hello_world()')]
Python
for doc in python_docs:
    print(doc.page_content, end="\n==================\n")
Output
def hello_world():
    print("Hello, World!")
==================
hello_world()
==================

JS

Berikut adalah contoh penggunaan text splitter untuk JS.

Python
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
Output
[Document(page_content='function helloWorld() {\n  console.log("Hello, World!");\n}'), Document(page_content='helloWorld();')]

TS

Berikut adalah contoh penggunaan text splitter untuk TS.

Python
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
Output
[Document(page_content='function helloWorld(): void {'), Document(page_content='console.log("Hello, World!");\n}'), Document(page_content='helloWorld();')]

Markdown

Python
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. 🙏
"""
Python
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
Output
[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.

Python
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.

Python
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
Output
[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.

Python
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

Python
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
Output
[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.
Python
SOL_CODE

Simpan dalam sebuah variable

Python
RecursiveCharacterTextSplitter

Memecah kode Solidity menjadi unit chunk menggunakan

Python
sol_splitter

Membuat splitter

Python
language

Atur parameter.

Python
Language.SOL

Tentukan bahasa Solidity dengan mengatur parameter.

Python
chunk_size

Atur ukuran chunk menjadi 128 untuk menentukan ukuran maksimum setiap chunk

Python
chunk_overlap

Atur overlap menjadi 0 untuk menghilangkan duplikasi antara chunk

Python
sol_splitter.create_documents()

Menggunakan metode

Python
SOL_CODE

Bagi menjadi unit chunk, dan simpan chunk yang telah dibagi.

Python
sol_docs

Simpan dalam sebuah variabel.

Python
sol_docs

Cetak variabel tersebut untuk memeriksa chunk kode Solidity yang telah dibagi.

Python
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
Output
[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#:

Python
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
Output
[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}')]