07. Pemisahan Teks Header HTML(HTMLHeaderTextSplitter)

HTMLHeaderTextSplitter

Secara konseptual mirip dengan MarkdownHeaderTextSplitter, HTMLHeaderTextSplitter adalah generator chunk yang "sadar struktur" yang membagi teks pada tingkat elemen dan menambahkan metadata untuk setiap header.

Ini menambahkan metadata "terkait" ke setiap chunk.

HTMLHeaderTextSplitter dapat mengembalikan chunk berdasarkan elemen atau menggabungkan elemen dengan metadata yang sama, dengan tujuan untuk:

  • (a) Mengelompokkan teks terkait secara semantik (kurang lebih) dan

  • (b) Mempertahankan informasi kaya konteks yang terkandung dalam struktur dokumen.

1. Saat menggunakan string HTML

pip install -qU langchain-text-splitters
  • Tentukan tag header yang akan menjadi kriteria pemisahan dan nama yang sesuai dalam daftar headers_to_split_on sebagai tuple.

  • Buat objek HTMLHeaderTextSplitter dan teruskan daftar tag header ke parameter headers_to_split_on.

from langchain_text_splitters import HTMLHeaderTextSplitter

html_string = """
<!DOCTYPE html>
<html>
<body>
    <div>
        <h1>Foo</h1>
        <p>Beberapa teks pengantar tentang Foo.</p>
        <div>
            <h2>Seksi utama Bar</h2>
            <p>Beberapa teks pengantar tentang Bar.</p>
            <h3>Subseksi 1 dari Bar</h3>
            <p>Beberapa teks tentang topik pertama dari Bar.</p>
            <h3>Subseksi 2 dari Bar</h3>
            <p>Beberapa teks tentang topik kedua dari Bar.</p>
        </div>
        <div>
            <h2>Baz</h2>
            <p>Beberapa teks tentang Baz</p>
        </div>
        <br>
        <p>Beberapa teks penutup tentang Foo</p>
    </div>
</body>
</html>
"""

headers_to_split_on = [
    ("h1", "Header 1"),  # Tentukan tag header dan nama mereka untuk pemisahan.
    ("h2", "Header 2"),
    ("h3", "Header 3"),
]

# Buat objek HTMLHeaderTextSplitter untuk membagi teks HTML berdasarkan header yang ditentukan.
html_splitter = HTMLHeaderTextSplitter(headers_to_split_on=headers_to_split_on)
# Bagi string HTML dan simpan hasilnya dalam variabel html_header_splits.
html_header_splits = html_splitter.split_text(html_string)
# Cetak hasil pemisahan.
for header in html_header_splits:
    print(f"{header.page_content}")
    print(f"{header.metadata}", end="\n=====================\n")

2. Ini adalah kasus menghubungkan dengan splitter lain dalam sebuah pipeline dan memuat HTML dari URL web

Dalam contoh ini, prosesnya melibatkan memuat konten HTML dari URL web dan kemudian menghubungkannya dengan splitter lain dalam sebuah pipeline untuk pemrosesan.

Batasan

HTMLHeaderTextSplitter berupaya menangani perbedaan struktural antara dokumen HTML, tetapi terkadang mungkin melewatkan header tertentu.

Sebagai contoh, algoritma ini mengasumsikan bahwa header selalu berada "di atas" teks yang relevan, artinya mereka terletak di sibling nodes sebelumnya, ancestor nodes, atau kombinasi dari ini.

Dalam artikel berita berikut (pada saat penulisan ini), teks judul utama ditandai sebagai "h1," tetapi dapat dilihat dalam subtree yang terpisah dari elemen teks yang diharapkan.

Akibatnya, elemen "h1" dan teks terkaitnya tidak muncul dalam metadata chunk, tetapi jika ada, elemen "h2" dan teks terkait dapat dilihat.

Last updated