{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Chunk by a set number of charactesr\n",
    "def chunk_by_char(text, chunk_size=150, chunk_overlap=20):\n",
    "    chunks = []\n",
    "    start_idx = 0\n",
    "\n",
    "    while start_idx < len(text):\n",
    "        end_idx = min(start_idx + chunk_size, len(text))\n",
    "\n",
    "        chunk_text = text[start_idx:end_idx]\n",
    "        chunks.append(chunk_text)\n",
    "\n",
    "        start_idx = (\n",
    "            end_idx - chunk_overlap if end_idx < len(text) else len(text)\n",
    "        )\n",
    "\n",
    "    return chunks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Chunk by sentence\n",
    "import re\n",
    "\n",
    "\n",
    "def chunk_by_sentence(text, max_sentences_per_chunk=5, overlap_sentences=1):\n",
    "    sentences = re.split(r\"(?<=[.!?])\\s+\", text)\n",
    "\n",
    "    chunks = []\n",
    "    start_idx = 0\n",
    "\n",
    "    while start_idx < len(sentences):\n",
    "        end_idx = min(start_idx + max_sentences_per_chunk, len(sentences))\n",
    "\n",
    "        current_chunk = sentences[start_idx:end_idx]\n",
    "        chunks.append(\" \".join(current_chunk))\n",
    "\n",
    "        start_idx += max_sentences_per_chunk - overlap_sentences\n",
    "\n",
    "        if start_idx < 0:\n",
    "            start_idx = 0\n",
    "\n",
    "    return chunks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Chunk by section\n",
    "def chunk_by_section(document_text):\n",
    "    pattern = r\"\\n## \"\n",
    "    return re.split(pattern, document_text)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open(\"./report.md\", \"r\") as f:\n",
    "    text = f.read()\n",
    "\n",
    "chunks = chunk_by_char(text)\n",
    "\n",
    "[print(chunk + \"\\n----\\n\") for chunk in chunks]"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".venv",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
