Fragmentation de code
Ce chapitre présente le diviseur de texte de code de LangChain. Si vous avez besoin de découper un code en extraits de code, vous devriez étudier attentivement le contenu de ce chapitre. CodeTextSplitter prend en charge la fragmentation de code pour plusieurs langages de programmation.
Installation des dépendances
%pip install -qU langchain-text-splitters
Ensuite, importez l'énumération "Language" et voyez quels langages de programmation sont pris en charge pour la fragmentation de code.
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
Voici un exemple d'utilisation de PythonTextSplitter pour découper du code.
PYTHON_CODE = """
def hello_world():
print("Hello, World!")
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("Hello, World!")', metadata={}), Document(page_content='# Appeler la fonction\\\\nhello_world()', metadata={})]
JS
Voici un exemple d'utilisation du découpeur de texte JS pour diviser du code JS.
JS_CODE = """
function helloWorld() {
console.log("Hello, World!");
}
// Appeler la fonction
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}', metadata={}),
Document(page_content='// Appeler la fonction\nhelloWorld();', metadata={})]
Markdown
Voici un exemple de fractionnement du code Markdown.
markdown_text = """
⚡ Construction d'applications avec LLMs via la composabilité ⚡
\`\`\`bash
pip install langchain
\`\`\`
En tant que projet open source dans un domaine en évolution rapide, nous sommes extrêmement ouverts aux contributions.
"""
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='⚡ Construction d'applications avec LLMs via la composabilité ⚡', metadata={}),
Document(page_content='## Installation rapide', metadata={}),
Document(page_content="```bash\n# J'espère que ce bloc de code ne sera pas divisé", metadata={}),
Document(page_content='pip install langchain', metadata={}),
Document(page_content='```', metadata={}),
Document(page_content='En tant que projet open source dans un domaine en évolution rapide, nous', metadata={}),
Document(page_content='sommes extrêmement ouverts aux contributions.', metadata={})]
# Exemple de fractionnement de texte Latex
latex_text = """ \documentclass{article}
\begin{document}
\maketitle
\section{Introduction} Les grands modèles de langage (GML) sont un type de modèle d'apprentissage automatique qui peut être entraîné sur d'énormes quantités de données textuelles pour générer un langage semblable à celui des humains. Ces dernières années, les GML ont réalisé des avancées significatives dans une variété de tâches de traitement du langage naturel, notamment la traduction de langues, la génération de texte et l'analyse des sentiments.
\subsection{Histoire des GML} Les premiers GML ont été développés dans les années 1980 et 1990, mais ils étaient limités par la quantité de données pouvant être traitées et la puissance de calcul disponible à l'époque. Cependant, au cours de la dernière décennie, des progrès matériels et logiciels ont rendu possible l'entraînement de GML sur des ensembles de données massifs, conduisant à des améliorations significatives des performances.
\subsection{Applications des GML} Les GML ont de nombreuses applications dans l'industrie, y compris les chatbots, la création de contenu et les assistants virtuels. Ils peuvent également être utilisés dans le milieu universitaire pour la recherche en linguistique, en psychologie et en linguistique computationnelle.
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>
En tant que projet open source dans un domaine en pleine évolution, nous sommes extrêmement ouverts aux contributions.
</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>⚡ Building applications with LLMs through composability ⚡', metadata={}),
Document(page_content='</p>\n </div>', metadata={}),
Document(page_content='<div>\n En tant que projet open source dans un domaine en pleine', metadata={}),
Document(page_content='évolution, nous sommes extrêmement ouverts aux contributions.', 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={})
]