Kod Bölme
Bu bölüm, LangChain'in kod metni bölücüsünü tanıtır. Kodu kod parçacıklarına ayırmak istiyorsanız, bu bölümün içeriğini dikkatlice incelemelisiniz. CodeTextSplitter, birden fazla programlama diline yönelik kod bölme işlemini destekler.
Bağımlılıkların Kurulumu
%pip install -qU langchain-text-splitters
Daha sonra, "Language" numaralandırmasını içe aktarın ve kod bölme için hangi programlama dillerinin desteklendiğini görün.
from langchain_text_splitters import (
Language,
RecursiveCharacterTextSplitter,
)
[e.value for e in Language]
['cpp', 'go', 'java', 'js', 'php', 'proto', 'python', 'rst', 'ruby', 'rust', 'scala', 'swift', 'markdown', 'latex', 'html', 'sol']
RecursiveCharacterTextSplitter.get_separators_for_language(Language.PYTHON)
['\\nclass ', '\\ndef ', '\\n\\tdef ', '\\n\\n', '\\n', ' ', '']
Python
İşte PythonTextSplitter'ın kodu nasıl böldüğüne dair bir örnek.
PYTHON_CODE = """
def hello_world():
print("Merhaba, Dünya!")
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(page_content='def hello_world():\\\\n print("Merhaba, Dünya!")', metadata={}), Document(page_content='# Fonksiyonu çağır\\\\nhello_world()', metadata={})]
JS
JS kodunu bölmek için JS metin bölücüsünü kullanmanın bir örneği aşağıda verilmiştir.
JS_CODE = """
function helloWorld() {
console.log("Merhaba, Dünya!");
}
// Fonksiyonu çağır
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("Merhaba, Dünya!");\n}', metadata={}), Document(page_content='// Fonksiyonu çağır\nhelloWorld();', metadata={})]
Markdown
Markdown kodunu bölmek için aşağıda bir örnek bulunmaktadır.
markdown_text = """
⚡ LLM'ler aracılığıyla birleşebilirlikle uygulamalar oluşturma ⚡
\`\`\`bash
pip install langchain
\`\`\`
Hızla gelişen bir alandaki açık kaynaklı bir proje olarak katkılara son derece açığız.
"""
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(page_content='# ?️? LangChain', metadata={}), Document(page_content='⚡ LLM\'ler aracılığıyla birleşebilirlikle uygulamalar oluşturma ⚡', metadata={}), Document(page_content='## Hızlı Kurulum', metadata={}), Document(page_content="```bash\n# Umarım bu kod bloğu bölünmez", metadata={}), Document(page_content='pip install langchain', metadata={}), Document(page_content='```', metadata={}), Document(page_content='Hızla gelişen bir alandaki açık kaynaklı bir proje olarak', metadata={}), Document(page_content='katkılara son derece açığız.', metadata={})]
latex_metni = """
\documentclass{article}
\begin{document}
\maketitle
\section{Giriş}
Büyük dil modelleri (LLM'ler), insan benzeri dil oluşturmak için geniş miktarda metin verisinde eğitilebilen bir tür makine öğrenme modelidir. Son yıllarda LLM'ler, dil çevirisi, metin oluşturma ve duygu analizi dahil olmak üzere çeşitli doğal dil işleme görevlerinde önemli ilerlemeler kaydetmişlerdir.
\subsection{LLM'lerin Tarihi}
İlk LLM'ler 1980'ler ve 1990'larda geliştirildi, ancak o zamanlar mevcut olan veri miktarı ve hesaplama gücü ile sınırlıydılar. Ancak son on yılda, donanım ve yazılımda yaşanan ilerlemeler, büyük veri kümeleri üzerinde LLM'lerin eğitilmesini mümkün kılarak performansta önemli gelişmelere yol açmıştır.
\subsection{LLM'lerin Uygulamaları}
LLM'ler, sohbet robotları, içerik oluşturma ve sanal asistanlar da dahil olmak üzere endüstride birçok uygulamaya sahiptir. Ayrıca, dilbilim, psikoloji ve hesaplamalı dilbilim alanlarındaki araştırmalar için akademide de kullanılabilirler.
\end{document}
"""
latex_splitter = RecursiveCharacterTextSplitter.from_language(
language=Language.TURKISH, chunk_size=60, chunk_overlap=0
)
latex_documents = latex_splitter.create_documents([latex_metni])
latex_documents
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>⚡ Kompozisyon ile LLM'lerle uygulamalar oluşturma ⚡</p>
</div>
<div>
Hızla gelişen bir alanda açık kaynak bir proje olarak katkılara son derece açığız.
</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(page_content='<!DOCTYPE html>\n<html>', metadata={}),
Document(page_content='<head>\n <title>🌐 LangChain</title>', metadata={}),
Document(page_content='<style>\n body {\n font-family: Arial', metadata={}),
Document(page_content=', sans-serif;\n }\n h1 {', metadata={}),
Document(page_content='color: darkblue;\n }\n </style>\n </head', metadata={}),
Document(page_content='>', metadata={}),
Document(page_content='<body>', metadata={}),
Document(page_content='<div>\n <h1>🌐 LangChain</h1>', metadata={}),
Document(page_content='<p>⚡ Kompozisyon ile LLM\'lerle uygulamalar oluşturma ⚡', metadata={}),
Document(page_content='</p>\n </div>', metadata={}),
Document(page_content='<div>\n Hızla gelişen bir alanda açık kaynak bir proje olarak katkılara son derece açığız.', metadata={}),
Document(page_content='</div>\n </body>\n</html>', metadata={})]
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(page_content='pragma solidity ^0.8.20;', metadata={}),
Document(page_content='contract HelloWorld {\n function add(uint a, uint b) pure public returns(uint) {\n return a + b;\n }\n}', metadata={})
]