Lewati ke konten utama

LangExtract: Panduan dengan Contoh Praktis

Pelajari cara menyiapkan dan menggunakan LangExtract untuk mengekstrak data terstruktur dan relasi dari teks tidak terstruktur, serta membandingkan pendekatannya dengan pustaka NLP tradisional.
· 12 mnt Baca

Jelajahi bersama AI

Mengekstrak data terstruktur dari dokumen teks menimbulkan masalah besar bagi tim data. Regular expression rusak ketika format berubah, kode parsing kustom melewatkan konteks yang mudah ditangkap manusia, dan solusi-solusi ini butuh perbaikan terus-menerus seiring perubahan sumber data Anda.

LangExtract mengatasinya dengan menggunakan model AI yang dapat membaca teks seperti manusia dan melacak secara tepat dari mana informasi berasal. Anda menjelaskan data apa yang Anda inginkan dengan istilah sederhana disertai beberapa contoh, dan LangExtract melakukan pekerjaan berat untuk memahami dan mengekstrak informasi tersebut.

Dalam tutorial ini, saya akan menjelaskan langkah demi langkah cara menyiapkan LangExtract untuk pengenalan entitas bernama, mengekstrak relasi antar entitas, bekerja dengan berbagai penyedia model AI, dan membandingkan pendekatan LangExtract dengan pustaka NLP tradisional. Anda juga akan belajar cara mendefinisikan tugas ekstraksi, memberikan contoh pelatihan, dan memproses hasil terstruktur untuk alur kerja analisis Anda.

Apa Itu LangExtract?

LangExtract adalah pustaka Python yang mengubah teks berantakan menjadi data terorganisasi menggunakan model AI. Alat pemrosesan teks lama sering bingung oleh konteks — mereka mungkin melihat “Apple” dan menganggapnya buah padahal Anda sedang membaca tentang perusahaan teknologi, atau menemukan “$500” dan menyebutnya harga padahal sebenarnya ID karyawan. Pencocokan pola dasar bisa menemukan alamat email, tetapi tidak bisa menentukan apakah “[email protected]” adalah karyawan saat ini atau hanya seseorang yang disebutkan dalam email lama.

Untuk mengatasi masalah konteks dan akurasi ini, LangExtract memberi Anda:

  • Pelacakan sumber — Menunjukkan dengan tepat dari mana setiap potongan data berasal di teks asli
  • Banyak model AI — Bekerja dengan OpenAI, Anthropic, Google, dan model lokal melalui Ollama
  • Chunking cerdas — Memecah dokumen besar menjadi bagian-bagian dan memproses beberapa bagian sekaligus
  • Percobaan berganda — Menjalankan tugas yang sama beberapa kali untuk menangkap informasi yang terlewat
  • Laporan visual — Membuat halaman HTML tempat Anda dapat mengeklik data untuk melihat asalnya

Visualisasi interaktif LangExtract yang menampilkan ekstraksi karakter Romeo dan Juliet dengan sorotan teks dan atribut entitas

Sumber: GitHub

Alat-alat ini bekerja bersama untuk mengubah cara Anda mengekstrak informasi dari teks. Alih-alih menulis aturan kompleks yang mudah rusak, Anda memberi tahu AI apa yang Anda inginkan menggunakan contoh sederhana. AI membaca teks seperti manusia dan melacak asal setiap informasi. Ini memungkinkan Anda menarik informasi dan relasi yang kompleks yang sebelumnya memerlukan ratusan baris kode.

Kapan Sebaiknya Menggunakan LangExtract?

LangExtract paling efektif ketika Anda perlu mengekstrak informasi kustom yang tidak dapat ditangani dengan baik oleh alat NLP tradisional. Jika Anda bekerja dengan teks spesifik domain di mana pengenalan entitas bernama standar kurang memadai, LangExtract memungkinkan Anda mendefinisikan hal-hal yang penting bagi bisnis Anda tanpa menulis aturan kompleks atau melatih ulang model. Ini sangat berguna saat Anda perlu memahami konteks dan relasi antar bagian informasi, bukan sekadar menemukan entitas individual.

LangExtract adalah pilihan yang baik ketika Anda memiliki:

  • Entitas spesifik domain — Istilah industri, nama produk, atau kategori kustom yang tidak dikenali model pra-latih
  • Relasi kompleks — Informasi yang perlu dikelompokkan, misalnya menghubungkan orang dengan peran dan detail kontaknya
  • Ekstraksi bergantung konteks — Di mana teks yang sama bisa berarti berbeda tergantung informasi sekitarnya
  • Kebutuhan verifikasi sumber — Kebutuhan untuk melacak tepatnya asal setiap potongan data yang diekstrak
  • Jenis dokumen campuran — Format berbeda seperti email, PDF, dan laporan yang memerlukan pendekatan pemrosesan fleksibel
  • Keahlian ML terbatas — Tim yang menginginkan ekstraksi andal tanpa pengetahuan machine learning mendalam

Pertimbangkan alat lain jika Anda mengerjakan tugas NLP yang sudah mapan seperti pengenalan entitas bernama dasar untuk kategori umum, membutuhkan pemrosesan sangat cepat untuk pola sederhana, atau memiliki batasan ketat untuk tidak menggunakan panggilan API eksternal. Pustaka tradisional seperti spaCy unggul untuk tugas NLP standar dengan pemrosesan volume tinggi, sementara LangExtract menonjol saat Anda membutuhkan ekstraksi cerdas dan kustom dengan kompleksitas penyiapan minimal.

Penyiapan LangExtract

Sebelum mulai mengekstrak data, Anda perlu memasang LangExtract dan menyiapkan akses ke model AI. Pustaka ini mendukung beberapa metode instalasi dan bekerja dengan berbagai penyedia AI.

Instalasi

Pasang LangExtract menggunakan pip atau uv. Untuk integrasi OpenAI, gunakan paket extras:

# Using pip
pip install langextract[openai]

# Using uv
uv add langextract[openai]

Ekstra [openai] menyertakan klien Python OpenAI. Untuk penyedia lain, Anda dapat memasang paket dasar dan menambahkan pustaka spesifik penyedia sesuai kebutuhan.

Penyiapan kunci API

LangExtract bekerja dengan beberapa penyedia AI. Siapkan kunci API sebagai variabel lingkungan:

# OpenAI (get your key from https://platform.openai.com/api-keys)
export OPENAI_API_KEY="your-openai-key-here"

# Anthropic (get your key from https://console.anthropic.com/settings/keys) 
export ANTHROPIC_API_KEY="your-anthropic-key-here"

# Google AI (get your key from https://aistudio.google.com/app/apikey)
export GOOGLE_API_KEY="your-google-key-here"

Anda hanya memerlukan kunci untuk penyedia yang akan Anda gunakan. Untuk model lokal melalui Ollama, tidak diperlukan kunci API — cukup pasang dan jalankan Ollama di mesin Anda.

Uji cepat

Verifikasi penyiapan Anda dengan uji sederhana:

import langextract as lx
import textwrap

# 1. Define the prompt and extraction rules
prompt = textwrap.dedent(
   """\
   Extract characters, emotions, and relationships in order of appearance.
   Use exact text for extractions. Do not paraphrase or overlap entities.
   Provide meaningful attributes for each entity to add context."""
)

# 2. Provide a high-quality example to guide the model
examples = [
   lx.data.ExampleData(
       text="ROMEO. But soft! What light through yonder window breaks? It is the east, and Juliet is the sun.",
       extractions=[
           lx.data.Extraction(
               extraction_class="character",
               extraction_text="ROMEO",
               attributes={"emotional_state": "wonder"},
           ),
       ],
   )
]

# The input text to be processed
input_text = "Lady Juliet gazed longingly at the stars, her heart aching for Romeo"

# Run the extraction
result = lx.extract(
   text_or_documents=input_text,
   prompt_description=prompt,
   examples=examples,
   model_id="gpt-4o-mini",
)

print("Extraction successful!")

Melakukan Named Entity Recognition (NER) di LangExtract

Named Entity Recognition (NER) menemukan dan mengklasifikasikan potongan informasi spesifik dalam teks ,  misalnya menemukan semua nama perusahaan, orang, dan lokasi yang disebutkan dalam laporan bisnis.

Alat NER tradisional bekerja dengan kategori yang telah ditentukan seperti “PERSON” atau “ORGANIZATION,” tetapi sering melewatkan entitas yang bergantung konteks dan penting bagi bisnis Anda. LangExtract memungkinkan Anda mendefinisikan jenis entitas kustom dan mengajarkan AI mengenali pola yang spesifik untuk domain Anda.

Mari mengekstrak entitas dari email dukungan pelanggan. Alih-alih kategori generik, kita akan mengidentifikasi entitas khusus dukungan seperti jenis keluhan, nama produk, dan kerangka waktu penyelesaian yang membantu memprioritaskan tiket.

Mendefinisikan tugas ekstraksi

Langkah pertama adalah menjelaskan apa yang ingin Anda ekstrak menggunakan prompt yang jelas. Prompt ini bertindak seperti instruksi untuk analis manusia — semakin spesifik Anda, semakin baik hasil yang didapat:

import langextract as lx
import textwrap

# Define what we want to extract from support emails
prompt = textwrap.dedent("""
   Extract customer support entities from email text.
   Focus on actionable information that helps prioritize and route tickets.
   Use exact text from the email - don't paraphrase or summarize.
   Include helpful attributes that add context for support agents.
""")

Fungsi textwrap.dedent() menghapus indentasi ekstra dari string multi-baris, sehingga prompt Anda lebih mudah dibaca dalam kode sambil tetap bersih saat dikirim ke AI. Tanpanya, AI akan melihat semua spasi ekstra dari indentasi kode Anda.

Prompt ini memberi tahu AI untuk mencari informasi khusus dukungan, menggunakan kutipan persis dari teks, dan menambahkan konteks melalui atribut. Kuncinya adalah bersikap spesifik tentang domain Anda (dukungan pelanggan) dan apa yang membuat informasi berguna (membantu memprioritaskan dan merutekan tiket).

Memberikan contoh ekstraksi

Contoh mengajarkan AI secara tepat apa yang Anda inginkan dan bagaimana memformat hasil. Setiap contoh menunjukkan kepada AI sepotong teks dan entitas persis yang ingin Anda ekstrak darinya:

# Create examples that show the AI what to extract
examples = [
   lx.data.ExampleData(
       text="My laptop screen keeps flickering. I bought it 3 months ago and need this fixed urgently for my presentation tomorrow.",
       extractions=[
           lx.data.Extraction(
               extraction_class="product",
               extraction_text="laptop",
               attributes={"issue": "screen flickering", "urgency": "high"}
           ),
           lx.data.Extraction(
               extraction_class="timeline",
               extraction_text="3 months ago",
               attributes={"context": "purchase_date"}
           ),
           lx.data.Extraction(
               extraction_class="urgency_indicator",
               extraction_text="urgently for my presentation tomorrow",
               attributes={"priority": "high", "deadline": "tomorrow"}
           )
       ]
   )
]

Setiap objek ExampleData berisi sampel teks dan daftar objek Extraction. Objek Extraction menentukan tiga hal:

  • extraction_class: Jenis entitas (seperti "product" atau "timeline")
  • extraction_text: Kata-kata persis dari teks asli
  • attributes: Konteks tambahan yang membantu memahami entitas dengan lebih baik

Atribut inilah yang membedakan LangExtract dari NER tradisional. Alih-alih hanya menemukan “laptop,” kita dapat menangkap bahwa ia memiliki masalah “screen flickering” dan menandainya sebagai urgensi tinggi.

Menjalankan ekstraksi

Sekarang Anda dapat menjalankan ekstraksi pada teks baru menggunakan prompt dan contoh Anda. LangExtract akan menerapkan apa yang dipelajari untuk menemukan entitas serupa:

# Sample support email to analyze
support_email = """
Subject: WiFi adapter not working after Windows update

Hi support team,

My USB WiFi adapter stopped working completely after yesterday's Windows update.
I've tried restarting my computer multiple times but no luck. This is blocking me
from working from home today. I have an important client call at 2 PM and really
need internet access. The adapter worked perfectly before the update.

Thanks,
Mike Chen
"""

# Run the extraction
result = lx.extract(
   text_or_documents=support_email,
   prompt_description=prompt,
   examples=examples,
   model_id="gpt-4o-mini"
)

print("Extraction completed successfully!")

Keluaran:

INFO:absl:Finalizing annotation for document ID doc_435b1cd5.
INFO:absl:Document annotation completed.
✓ Extracted 4 entities (3 unique types)
 • Time: 3.34s
 • Speed: 123 chars/sec
 • Chunks: 1
Extraction completed successfully!

Fungsi lx.extract() mengambil teks Anda, menerapkan instruksi prompt, dan menggunakan contoh untuk memandu ekstraksi. Fungsi ini mengembalikan objek hasil yang berisi semua entitas yang ditemukan, beserta lokasi persisnya di teks asli.

Anda dapat bereksperimen dengan model berbeda dengan mengubah parameter model_id. Model seperti "claude-3-haiku" atau "gpt-4o" mungkin memberi hasil berbeda tergantung kompleksitas teks dan kebutuhan Anda.

Bekerja dengan Data Hasil Ekstraksi di LangExtract

Setelah ekstraksi selesai, LangExtract mengembalikan objek hasil yang berisi semua entitas yang ditemukan dengan lokasi dan atribut persisnya. Kekuatan sesungguhnya terletak pada cara Anda mengakses, menganalisis, dan membagikan data terstruktur ini.

Mengakses entitas yang diekstrak

Objek hasil menyimpan semua entitas yang ditemukan dalam properti extractions. Setiap ekstraksi berisi teks entitas, tipenya, lokasi dalam dokumen asli, dan atribut apa pun:

# Look at all extracted entities
for extraction in result.extractions:
   print(f"Type: {extraction.extraction_class}")
   print(f"Text: '{extraction.extraction_text}'")
   print(f"Location: chars {extraction.char_interval.start_pos}-{extraction.char_interval.end_pos}")
   print(f"Attributes: {extraction.attributes}")
   print("---")

Keluaran:

Type: product
Text: 'USB WiFi adapter'
Location: chars 78-94
Attributes: {'issue': 'not working after Windows update', 'previous_status': 'worked perfectly before the update'}
---
Type: timeline
Text: 'yesterday'
Location: chars 128-137
Attributes: {'context': 'Windows update'}
---
Type: urgency_indicator
Text: 'blocking me from working from home today'
Location: chars 227-268
Attributes: {'priority': 'high', 'context': 'work from home'}
---
Type: urgency_indicator
Text: 'important client call at 2 PM'
Location: chars 280-309
Attributes: {'priority': 'high', 'deadline': '2 PM today'}
---

Setiap objek ekstraksi melacak asal informasi secara tepat menggunakan char_interval, yang menunjukkan posisi mulai dan akhir di teks asli. Pelacakan sumber ini memungkinkan Anda memverifikasi hasil dan memahami konteks.

Menganalisis pola entitas

Anda dapat mengelompokkan dan menghitung entitas untuk memahami pola dalam data Anda:

from collections import Counter

# Count different entity types
entity_types = Counter(e.extraction_class for e in result.extractions)
print("Entity breakdown:")
for entity_type, count in entity_types.items():
   percentage = (count / len(result.extractions)) * 100
   print(f"  {entity_type}: {count} entities ({percentage:.1f}%)")

# Find high-priority support tickets
urgent_entities = [
   e for e in result.extractions
   if e.extraction_class == "urgency_indicator"
   and e.attributes.get("priority") == "high"
]
print(f"\nFound {len(urgent_entities)} high-priority indicators")

Keluaran:

Entity breakdown:
 product: 1 entities (25.0%)
 timeline: 1 entities (25.0%)
 urgency_indicator: 2 entities (50.0%)

Found 2 high-priority indicators

Analisis ini membantu Anda dengan cepat melihat pola seperti jenis produk mana yang menghasilkan tiket dukungan terbanyak atau berapa banyak permintaan mendesak yang Anda terima.

Menyimpan hasil ekstraksi

LangExtract menyimpan hasil dalam format JSONL (JSON Lines), di mana setiap baris berisi data ekstraksi satu dokumen. Format ini cocok untuk alat pemrosesan data dan memudahkan penggabungan hasil dari banyak ekstraksi:

# Save results to a JSONL file
lx.io.save_annotated_documents(
   [result],
   output_name="support_ticket_extractions.jsonl",
   output_dir="."
)

JSONL menyimpan setiap dokumen pada baris terpisah sebagai objek JSON lengkap. Tidak seperti berkas JSON biasa yang berisi satu array besar, berkas JSONL dapat diproses baris demi baris, sehingga ideal untuk dataset besar. Anda dapat membuka berkas ini di editor teks apa pun atau memuatnya ke alat analisis data seperti pandas.

Membuat visualisasi HTML interaktif

Visualisasi HTML adalah fitur yang membuat LangExtract benar-benar menonjol. Ini membuat laporan interaktif yang menyoroti entitas yang diekstrak di teks asli dan memungkinkan Anda mengeklik hasilnya:

# Generate interactive HTML visualization
html_content = lx.visualize("support_ticket_extractions.jsonl")

# Save the HTML file
with open("support_analysis.html", "w") as f:
   if hasattr(html_content, "data"):
       f.write(html_content.data)  # For Jupyter notebooks
   else:
       f.write(html_content)  # For regular Python scripts

print("HTML visualization saved as 'support_analysis.html'")

Keluaran:

HTML visualization saved as 'support_analysis.html'

Antarmuka visualisasi HTML LangExtract yang menampilkan entitas yang diekstrak dengan sorotan berwarna dan panel atribut yang dapat diklik

Visualisasi HTML menampilkan teks asli Anda dengan sorotan berwarna untuk setiap jenis entitas. Anda dapat mengeklik teks yang disorot untuk melihat atribut yang diekstrak, menavigasi antar entitas menggunakan kontrol, dan memverifikasi bahwa AI telah mengidentifikasi informasi penting dengan benar. Ini memudahkan pemeriksaan cepat hasil dan membangun kepercayaan pada pipeline ekstraksi Anda.

Visualisasi ini mencakup legenda yang menampilkan setiap jenis entitas, kontrol navigasi untuk berpindah antar entitas, dan informasi atribut terperinci untuk setiap ekstraksi. Pendekatan interaktif ini membuat pemahaman dan validasi hasil jauh lebih mudah dibanding melihat data JSON mentah.

Ekstraksi Relasi di LangExtract

Entitas dukungan pelanggan yang kita ekstrak bekerja dengan baik secara individual, tetapi tidak memberi gambaran lengkap. Saat pelanggan menyebut “MacBook Pro saya tahun 2021 bermasalah pada baterai,” Anda perlu memahami bahwa produk, tahun model, dan masalahnya merupakan satu kesatuan kasus dukungan. Menemukan potongan ini secara terpisah tidak membantu — Anda memerlukan relasi di antara mereka.

NLP tradisional menangani ini dengan buruk karena memperlakukan setiap entitas sebagai informasi terisolasi. Anda bisa mengekstrak “MacBook Pro”, “2021”, dan “masalah baterai” sebagai entitas terpisah, tetapi kemudian Anda memerlukan aturan kompleks untuk mengetahui detail mana yang terkait dengan produk mana. Pendekatan ini cepat runtuh saat menangani banyak produk atau pelanggan dalam teks yang sama.

LangExtract mengatasinya dengan mengekstrak relasi saat langkah awal alih-alih mencoba menghubungkan entitas setelahnya. Anda dapat mengelompokkan informasi terkait menggunakan atribut bersama sambil tetap melacak dari mana setiap bagian berasal di teks asli. Mari kita coba mengekstrak informasi karyawan dari dokumen HR di mana kita perlu menghubungkan orang dengan peran, departemen, dan detail kontaknya.

Menyiapkan ekstraksi relasi

Untuk contoh ini, kita akan mengekstrak informasi karyawan dari pengumuman perusahaan di mana beberapa detail tentang setiap orang perlu dihubungkan:

import langextract as lx
import textwrap

# Define relationship extraction prompt
prompt = textwrap.dedent("""
   Extract employee information from company announcements.
   Group related details about each person using employee_group attributes.
   Connect names, titles, departments, and contact info for each employee.
   Use exact text from the announcement - don't paraphrase.
""")

# Create examples showing how to group related information
examples = [
   lx.data.ExampleData(
       text="Sarah Johnson, our new Marketing Director, will lead the digital campaigns team. You can reach Sarah at [email protected] for any marketing questions.",
       extractions=[
           lx.data.Extraction(
               extraction_class="person",
               extraction_text="Sarah Johnson",
               attributes={"employee_group": "Sarah Johnson"}
           ),
           lx.data.Extraction(
               extraction_class="job_title",
               extraction_text="Marketing Director",
               attributes={"employee_group": "Sarah Johnson"}
           ),
           lx.data.Extraction(
               extraction_class="department",
               extraction_text="digital campaigns team",
               attributes={"employee_group": "Sarah Johnson"}
           ),
           lx.data.Extraction(
               extraction_class="contact",
               extraction_text="[email protected]",
               attributes={"employee_group": "Sarah Johnson", "type": "email"}
           )
       ]
   )
]

Atribut employee_group bertindak sebagai sistem penghubung—semua entitas dengan nilai employee_group yang sama milik orang yang sama. Ini memungkinkan Anda mengekstrak informasi kompleks dan multi-bagian sambil tetap melacak detail mana yang saling berkaitan.

Menjalankan ekstraksi relasi

Sekarang mari mengekstrak dari pengumuman perusahaan dengan beberapa karyawan:

# Sample HR announcement with multiple employees
hr_announcement = """
We're excited to announce two new hires joining our team this month.

Mike Chen joins us as Senior Software Engineer in our Backend Development group. Mike brings 8 years of Python experience and will focus on API architecture. Please welcome Mike - he'll be working from our Seattle office and you can reach him at [email protected].

Additionally, Lisa Rodriguez starts as Product Manager for our Mobile Apps division. Lisa previously worked at TechStart Inc and has extensive experience with user research. Her office phone is 555-0199 and email is [email protected].
"""

# Extract relationships
result = lx.extract(
   text_or_documents=hr_announcement,
   prompt_description=prompt,
   examples=examples,
   model_id="gpt-4o-mini"
)

print(f"Extracted {len(result.extractions)} entities")

Keluaran:

✓ Extraction processing complete

INFO:absl:Finalizing annotation for document ID doc_a349ae1d.
INFO:absl:Document annotation completed.
✓ Extracted 10 entities (4 unique types)
 • Time: 8.57s
 • Speed: 67 chars/sec
 • Chunks: 1
Extracted 10 entities

Bekerja dengan grup relasi

Setelah ekstraksi, Anda dapat mengelompokkan entitas terkait untuk melihat informasi lengkap bagi setiap karyawan. Ini memerlukan sedikit kode Python untuk mengorganisasi kembali entitas tersebar menjadi grup logis:

from collections import defaultdict

# Group entities by employee_group
employee_groups = defaultdict(list)
for extraction in result.extractions:
   group_id = extraction.attributes.get("employee_group")
   if group_id:
       employee_groups[group_id].append(extraction)

# Print organized employee information
for employee, details in employee_groups.items():
   print(f"\n=== {employee} ===")
   for detail in details:
       print(f"{detail.extraction_class}: {detail.extraction_text}")
       if detail.attributes.get("type"):
           print(f"  Type: {detail.attributes['type']}")

Keluaran:

=== Mike Chen ===
person: Mike Chen
job_title: Senior Software Engineer
department: Backend Development group
contact: [email protected]
 Type: email
contact: Seattle office
 Type: location

=== Lisa Rodriguez ===
person: Lisa Rodriguez
job_title: Product Manager
department: Mobile Apps division
contact: [email protected]
 Type: email
contact: 555-0199
 Type: phone

Berikut yang dilakukan kode ini langkah demi langkah:

  1. defaultdict(list) membuat kamus yang setiap entri barunya otomatis berupa daftar kosong
  2. extraction.attributes.get("employee_group") mengambil ID grup dari atribut setiap entitas secara aman, mengembalikan None jika tidak ada
  3. employee_groups[group_id].append(extraction) menambahkan setiap entitas ke daftar untuk grupnya
  4. Loop bertingkat kemudian mencetak informasi lengkap setiap grup, diorganisasikan per karyawan

defaultdict adalah koleksi Python yang secara otomatis membuat entri yang hilang. Saat Anda mengakses employee_groups["Mike Chen"] untuk pertama kali, ia otomatis membuat daftar kosong untuk karyawan tersebut. Ini menghemat Anda dari keharusan memeriksa apakah setiap karyawan sudah ada di kamus.

Pendekatan pengelompokan ini memungkinkan Anda membangun kembali profil karyawan lengkap dari informasi tersebar dalam teks asli, sambil mempertahankan lokasi sumber persis untuk setiap potongan data.

Membuat visualisasi relasi

Visualisasi HTML menjadi lebih berharga dengan data relasi, karena menampilkan entitas individual dan keterkaitannya:

# Save the relationship extraction results
lx.io.save_annotated_documents(
   [result],
   output_name="employee_relationships.jsonl",
   output_dir="."
)

# Generate HTML visualization showing relationships
html_content = lx.visualize("employee_relationships.jsonl")
with open("employee_relationships.html", "w") as f:
   if hasattr(html_content, "data"):
       f.write(html_content.data)
   else:
       f.write(html_content)

print("Relationship visualization saved as 'employee_relationships.html'")

Visualisasi ekstraksi relasi LangExtract yang menampilkan informasi karyawan dikelompokkan oleh entitas berwarna dan atribut yang terhubung

Visualisasi relasi menyoroti bagaimana berbagai potongan informasi terhubung membentuk catatan karyawan yang lengkap, memudahkan verifikasi bahwa AI telah mengidentifikasi dan mengelompokkan detail terkait dari pengumuman asli dengan benar.

Menggunakan LangExtract dengan Berbagai Penyedia Model

LangExtract bekerja dengan beberapa penyedia model AI, masing-masing menawarkan kompromi berbeda antara biaya, kecepatan, dan akurasi. Model Gemini dari Google bekerja langsung dengan dukungan skema bawaan, sehingga menjadi opsi termudah untuk sebagian besar tugas ekstraksi. GPT dari OpenAI sering memberikan akurasi lebih tinggi tetapi memerlukan konfigurasi tambahan dan biaya per ekstraksi yang lebih besar.

# Using Google Gemini (default and recommended)
result_gemini = lx.extract(
   text_or_documents=employee_text,
   prompt_description=prompt,
   examples=examples,
   model_id="gemini-2.5-flash"  # Fast and cost-effective
)

# Using OpenAI GPT models
result_openai = lx.extract(
   text_or_documents=employee_text,
   prompt_description=prompt,
   examples=examples,
   model_id="gpt-4o-mini",
   fence_output=True,              # Required for OpenAI
   use_schema_constraints=False    # OpenAI doesn't support constraints
)

Untuk pemrosesan lokal atau ketika Anda ingin menghindari biaya API, Anda dapat menjalankan model secara lokal menggunakan Ollama. Model lokal bekerja baik untuk tugas ekstraksi yang lebih sederhana dan memberi Anda kendali penuh atas data, meski biasanya berjalan lebih lambat dan mungkin kurang akurat dibanding opsi berbasis cloud.

# Using local models with Ollama (requires Ollama installed)
result_local = lx.extract(
   text_or_documents=employee_text,
   prompt_description=prompt,
   examples=examples,
   model_id="gemma2:2b",                    # Local Gemma model
   model_url="http://localhost:11434",     # Ollama server
   fence_output=False,                     # Local models don't need fencing
   use_schema_constraints=False            # Disable constraints
)

Skalasi ke Produksi

Teks dunia nyata tidak seperti contoh bersih kita. Anda menerima laporan 50 halaman dengan format berantakan, email pelanggan penuh typo, dan PDF dengan spasi aneh. Beberapa dokumen memiliki ribuan kata tersebar di berbagai bagian, dan informasi penting bisa tersembunyi di mana saja.

LangExtract menangani situasi berantakan ini dengan tiga alat utama: menjalankan banyak dokumen sekaligus, mencoba ekstraksi beberapa kali, dan memecah dokumen besar menjadi bagian lebih kecil. Alih-alih memproses satu dokumen per waktu, Anda dapat mengerjakan banyak dokumen bersama-sama, sehingga semuanya jauh lebih cepat.

# Settings for processing lots of real documents
result = lx.extract(
   text_or_documents=document_batch,
   prompt_description=prompt,
   examples=examples,
   model_id="gemini-2.5-flash",
   max_workers=20,           # Work on many documents at once
   extraction_passes=3,      # Try extraction 3 times
   max_char_buffer=1000      # Break big text into small pieces
)

Pengaturan max_workers mengontrol berapa banyak dokumen yang diproses secara bersamaan. Lebih banyak worker berarti hasil lebih cepat, tetapi juga lebih mahal dan bisa mengenai batas API. Mulailah dengan 10–20 worker dan evaluasi hasilnya.

Beberapa kali pass ekstraksi membantu menemukan informasi yang mungkin terlewat pada percobaan pertama. LangExtract menjalankan ekstraksi beberapa kali dan menggabungkan hasilnya. Ini menangkap lebih banyak detail tetapi memakan waktu lebih lama dan biaya lebih besar.

Memecah dokumen menjadi chunk membantu untuk teks panjang. Pengaturan max_char_buffer memotong dokumen besar menjadi bagian lebih kecil yang lebih cocok untuk model AI. Chunk kecil (1000–2000 karakter) menangkap lebih banyak detail, sementara chunk besar (3000–5000 karakter) mempertahankan lebih banyak konteks namun bisa melewatkan hal-hal tertentu.

# Different settings for different types of documents

# For important documents that need careful review
detailed_result = lx.extract(
   text_or_documents=legal_documents,
   extraction_passes=5,      # Try 5 times for accuracy
   max_char_buffer=800,      # Small chunks for detail
   max_workers=10           # Fewer workers to avoid limits
)

# For quick processing of simple documents
quick_result = lx.extract(
   text_or_documents=email_batch,
   extraction_passes=1,      # Single pass for speed
   max_char_buffer=3000,     # Bigger chunks for speed
   max_workers=30           # More workers for faster results
)

Pekerjaan produksi berarti menghadapi masalah. Dokumen bisa memiliki kesalahan encoding, koneksi jaringan bisa gagal, dan API bisa membatasi kecepatan pemrosesan. Pantau pekerjaan ekstraksi Anda, tambahkan logika retry untuk dokumen gagal, dan lacak berapa banyak yang Anda belanjakan pada berbagai penyedia AI.

Saat bekerja dengan berbagai jenis dokumen, siapkan aturan ekstraksi berbeda untuk masing-masing. Kontrak hukum memerlukan prompt berbeda dengan email pelanggan. Laporan keuangan memerlukan ukuran chunk berbeda dengan posting media sosial. Bangun pipeline terpisah untuk setiap jenis dokumen alih-alih mencoba membuat satu sistem menangani semuanya.

LangExtract vs. Pustaka NLP Lain

LangExtract mengambil pendekatan berbeda dibanding pustaka NLP tradisional. Sementara kebanyakan pustaka bergantung pada model pra-latih atau sistem berbasis aturan, LangExtract menggunakan Large Language Models yang dapat memahami konteks dan makna seperti manusia. Mari bandingkan dengan tiga pustaka NLP Python populer untuk memahami kapan Anda memilih LangExtract dibanding opsi lain.

spaCy

spaCy berfokus pada kecepatan dan tugas NLP siap produksi seperti tokenisasi, part-of-speech tagging, dan pengenalan entitas bernama. spaCy hadir dengan model pra-latih yang mengenali entitas umum seperti orang, organisasi, dan lokasi, tetapi kesulitan dengan entitas spesifik domain atau kategori kustom. spaCy unggul dalam memproses teks dalam jumlah besar dengan cepat, namun Anda perlu melatih ulang model atau menulis aturan kompleks untuk mengekstrak informasi kustom.

LangExtract menghilangkan kompleksitas ini dengan memungkinkan Anda mendefinisikan entitas kustom melalui contoh dan prompt sederhana, sekaligus menyediakan lokasi sumber persis yang tidak dilacak oleh spaCy.

NLTK (Natural Language Toolkit)

NLTK (Natural Language Toolkit) dirancang untuk pendidikan dan riset, menawarkan beragam algoritma dan dataset NLP. Ia menyediakan blok bangunan untuk pemrosesan teks namun memerlukan pengetahuan pemrograman signifikan untuk membangun solusi lengkap. NLTK cocok untuk mempelajari konsep NLP dan membuat prototipe, tetapi membangun sistem ekstraksi siap produksi memerlukan penggabungan banyak komponen NLTK dan penulisan kode yang substansial.

LangExtract menyediakan solusi lengkap secara langsung — Anda mendefinisikan apa yang Anda inginkan melalui contoh alih-alih mengodekan algoritme, dan mendapatkan visualisasi interaktif tanpa pekerjaan pengembangan tambahan.

Transformers (Hugging Face)

Transformers (Hugging Face) menyediakan akses ke model transformer mutakhir untuk berbagai tugas NLP, termasuk pengenalan entitas bernama dan question answering. Meskipun kuat, ini memerlukan keahlian machine learning untuk fine-tuning model pada domain spesifik, serta tidak menyediakan pelacakan sumber atau ekstraksi relasi bawaan. Anda perlu menangani deployment model, mengelola format model berbeda, dan membangun alat visualisasi sendiri.

LangExtract mengabstraksi kompleksitas bekerja dengan berbagai model AI, menangani pelacakan sumber secara otomatis, dan menyediakan ekstraksi relasi melalui pengelompokan atribut sederhana alih-alih arsitektur model yang kompleks.

Fitur

LangExtract

spaCy

NLTK

Transformers

Kompleksitas penyiapan

Prompt + contoh sederhana

Pelatihan model/aturan

Pengodean algoritme

Fine-tuning model

Entitas kustom

Definisi bahasa alami

Perlu pelatihan ulang

Penulisan aturan manual

Fine-tuning model

Pelacakan sumber

Otomatis dengan posisi presisi

Tidak tersedia

Implementasi manual

Implementasi manual

Ekstraksi relasi

Pengelompokan bawaan

Penulisan aturan kompleks

Pengodean manual

Pengembangan model kustom

Pemahaman konteks

Didukung LLM

Berbasis pola

Berbasis aturan

Bergantung model

Visualisasi

HTML interaktif

Butuh alat eksternal

Butuh alat eksternal

Butuh alat eksternal

Kurva belajar

Rendah (berbasis contoh)

Sedang (pengetahuan NLP)

Tinggi (algoritme)

Tinggi (keahlian ML)

Terbaik untuk

Ekstraksi spesifik domain

Pipeline NLP umum

Riset/pembelajaran

Aplikasi AI kustom

Kesimpulan

LangExtract mengubah ekstraksi teks dari menulis aturan kompleks menjadi berdiskusi dengan AI tentang data Anda. Anda telah mempelajari cara menyiapkan ekstraksi entitas kustom menggunakan prompt dan contoh sederhana, mengelompokkan informasi terkait melalui ekstraksi relasi, dan membuat visualisasi interaktif yang menunjukkan tepatnya asal setiap potongan data. Pustaka ini menangani tantangan produksi seperti pemrosesan paralel dan chunking dokumen, sehingga praktis untuk aplikasi dunia nyata dengan teks yang berantakan dan tidak konsisten.

Apakah Anda memproses tiket dukungan pelanggan, menganalisis dokumen hukum, atau mengekstrak wawasan dari makalah riset, LangExtract memberikan pendekatan yang lebih intuitif dibanding pustaka NLP tradisional. Alih-alih menghabiskan waktu untuk melatih model atau menulis aturan, Anda dapat fokus mendefinisikan informasi apa yang penting bagi kasus penggunaan spesifik Anda. Mulailah dengan ekstraksi sederhana pada data teks Anda sendiri, lalu lakukan skala dengan teknik produksi yang dibahas dalam tutorial ini.

Bexruz (Bex) Tuychiev

Penulis

Bexruz (Bex) Tuychiev

Saya adalah kreator konten data science dengan pengalaman lebih dari 2 tahun dan salah satu dengan jumlah pengikut terbesar di Medium. Saya suka menulis artikel mendalam tentang AI dan ML dengan sedikit gaya sarkastik—karena harus ada sesuatu untuk membuatnya tidak terlalu membosankan. Saya telah menghasilkan lebih dari 130 artikel dan satu kursus di DataCamp, dengan satu lagi sedang dalam proses. Konten saya telah dilihat oleh lebih dari 5 juta pasang mata, dan 20 ribu di antaranya menjadi pengikut di Medium dan LinkedIn. 

Topik

Terkait

blogs

Tutorial Korelasi di R

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

blogs

Spaghetti Plot dan Jalur Badai