# 01. Pemisahan Teks Karakter (CharacterTextSplitter)

## CharacterTextSplitter

Metode ini adalah pendekatan yang paling sederhana.

Pada dasarnya, teks dibagi berdasarkan "\n\n" pada tingkat karakter, dan ukuran chunk diukur berdasarkan jumlah karakter.

* Metode Pemisahan Teks: Berdasarkan karakter tunggal
* Pengukuran Ukuran Chunk: Berdasarkan jumlah karakter

```python
pip install -qU langchain-text-splitters
```

* Buka file `./data/appendix-keywords.txt` dan baca isinya.
* Simpan isi yang dibaca ke dalam variabel `file`.

```python
# Buka file data/appendix-keywords.txt dan buat objek file yang disebut f.
with open("./data/appendix-keywords.txt") as f:
    file = f.read()  # Baca isi file dan simpan dalam variabel file.
```

Cetak sebagian dari isi yang dibaca dari file.

```python
# Cetak sebagian dari isi yang dibaca dari file.
print(file[:500])
```

Output :

{% code overflow="wrap" %}

```
Pencarian Semantik

Definisi: Pencarian semantik adalah metode pencarian yang melampaui pencocokan kata kunci sederhana dengan memahami makna dari pertanyaan pengguna untuk mengembalikan hasil yang relevan.
Contoh: Jika seorang pengguna mencari "planet tata surya," maka akan mengembalikan informasi tentang planet yang terkait seperti "Jupiter" dan "Mars."
Kata Kunci Terkait: Pemrosesan Bahasa Alami, Algoritma Pencarian, Penambangan Data

Embedding

Definisi: Embedding adalah proses mengubah data
```

{% endcode %}

Berikut adalah kode yang membagi teks menjadi beberapa chunk menggunakan `CharacterTextSplitter`.

* Parameter `separator` menetapkan kriteria untuk pembagian. Nilai defaultnya adalah "\n\n".
* Parameter `chunk_size` diatur ke 250, membatasi ukuran maksimum setiap chunk menjadi 250 karakter.
* Parameter `chunk_overlap` diatur ke 50, memungkinkan tumpang tindih 50 karakter antara chunk yang berdekatan.
* Parameter `length_function` diatur ke len, menentukan fungsi yang digunakan untuk menghitung panjang teks.
* Parameter `is_separator_regex` diatur ke False, memperlakukan separator sebagai string biasa dan bukan ekspresi reguler.

```python
from langchain_text_splitters import CharacterTextSplitter

text_splitter = CharacterTextSplitter(
    # Menentukan pemisah yang akan digunakan saat membagi teks. Nilai default adalah "\n\n".
    # separator=" ",
    # Menentukan ukuran maksimum dari chunk teks yang telah dibagi.
    chunk_size=450,
    # Menentukan jumlah karakter yang tumpang tindih antara chunk teks yang telah dibagi.
    chunk_overlap=50,
    # Menentukan fungsi untuk menghitung panjang teks.
    length_function=len,
    # Menentukan apakah pemisah adalah ekspresi reguler.
    is_separator_regex=False,
)
```

* Gunakan `text_splitter` untuk membagi teks `file` menjadi unit dokumen.
* Cetak dokumen pertama `(texts[0])` dari daftar dokumen yang telah dibagi.

```python
# Gunakan text_splitter untuk membagi teks state_of_the_union menjadi dokumen.
texts = text_splitter.create_documents([file])
print(texts[0])  # Cetak dokumen pertama dari dokumen yang telah dibagi.
```

output:

{% code overflow="wrap" %}

```
page_content='Pencarian Semantik

Definisi: Pencarian semantik adalah metode pencarian yang melampaui pencocokan kata kunci sederhana dengan memahami makna dari pertanyaan pengguna untuk mengembalikan hasil yang relevan.
Contoh: Jika seorang pengguna mencari "planet tata surya," maka akan mengembalikan informasi tentang planet yang terkait seperti "Jupiter" dan "Mars."
Kata Kunci Terkait: Pemrosesan Bahasa Alami, Algoritma Pencarian, Penambangan Data'
```

{% endcode %}

Berikut adalah contoh pengiriman metadata bersama dengan dokumen.

Perhatikan bahwa metadata dibagi bersama dengan dokumen.

* Metode `create_documents` menerima daftar data teks dan metadata sebagai argumen.

```python
metadatas = [
    {"document": 1},
    {"document": 2},
]  # Definisikan daftar metadata untuk dokumen.
documents = text_splitter.create_documents(
    [
        file,
        file,
    ],  # Berikan data teks yang akan dibagi sebagai daftar.
    metadatas=metadatas,  # Berikan metadata yang sesuai dengan setiap dokumen.
)
print(documents[0])  # Cetak dokumen pertama dari dokumen yang telah dibagi.
```

output:

{% code overflow="wrap" %}

```
page_content='Pencarian Semantik

Definisi: Pencarian semantik adalah metode pencarian yang melampaui pencocokan kata kunci sederhana dengan memahami makna dari pertanyaan pengguna untuk mengembalikan hasil yang relevan.
Contoh: Jika seorang pengguna mencari "planet tata surya," maka akan mengembalikan informasi tentang planet yang terkait seperti "Jupiter" dan "Mars."
Kata Kunci Terkait: Pemrosesan Bahasa Alami, Algoritma Pencarian, Penambangan Data' metadata={'document': 1}
```

{% endcode %}

Gunakan metode `split_text()` untuk membagi teks.

* `text_splitter.split_text(file)[0]` membagi teks `file` menggunakan `text_splitter` dan mengembalikan elemen pertama dari potongan teks yang telah dibagi.

```python
# Bagi teks file menggunakan text_splitter dan kembalikan elemen pertama dari teks yang telah dibagi.
text_splitter.split_text(file)[0]
```

output:

{% code overflow="wrap" %}

```
Pencarian Semantik

Definisi: Pencarian semantik adalah metode pencarian yang melampaui pencocokan kata kunci sederhana dengan memahami makna dari pertanyaan pengguna untuk mengembalikan hasil yang relevan.
Contoh: Jika seorang pengguna mencari "planet tata surya," maka akan mengembalikan informasi tentang planet yang terkait seperti "Jupiter" dan "Mars."
Kata Kunci Terkait: Pemrosesan Bahasa Alami, Algoritma Pencarian, Penambangan Data
```

{% endcode %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://altero.gitbook.io/langchain-book-by-altero/ch07-text-splitter/01.-pemisahan-teks-karakter-charactertextsplitter.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
