Close Menu
    Trending
    • Blazing-Fast ML Model Serving with FastAPI + Redis (Boost 10x Speed!) | by Sarayavalasaravikiran | AI Simplified in Plain English | Jul, 2025
    • AI Knowledge Bases vs. Traditional Support: Who Wins in 2025?
    • Why Your Finance Team Needs an AI Strategy, Now
    • How to Access NASA’s Climate Data — And How It’s Powering the Fight Against Climate Change Pt. 1
    • From Training to Drift Monitoring: End-to-End Fraud Detection in Python | by Aakash Chavan Ravindranath, Ph.D | Jul, 2025
    • Using Graph Databases to Model Patient Journeys and Clinical Relationships
    • Cuba’s Energy Crisis: A Systemic Breakdown
    • AI Startup TML From Ex-OpenAI Exec Mira Murati Pays $500,000
    AIBS News
    • Home
    • Artificial Intelligence
    • Machine Learning
    • AI Technology
    • Data Science
    • More
      • Technology
      • Business
    AIBS News
    Home»Machine Learning»Membuat Policy Assistant System dengan Sentence Transformer dan Chroma DB | by Nevan Rayyandithya | Apr, 2025
    Machine Learning

    Membuat Policy Assistant System dengan Sentence Transformer dan Chroma DB | by Nevan Rayyandithya | Apr, 2025

    Team_AIBS NewsBy Team_AIBS NewsApril 28, 2025No Comments5 Mins Read
    Share Facebook Twitter Pinterest LinkedIn Tumblr Reddit Telegram Email
    Share
    Facebook Twitter LinkedIn Pinterest Email


    Pemrosesan per Halaman (Skenario 1)

    Inisialisasi fungsi penyimpanan dibuat berbeda sesuai dengan skenarionya masing-masing. Berikut merupakan penyimpanan information berdasarkan per halaman:

    def store_page_in_chromadb(textual content, doc_id, page_num, total_pages):
    strive:
    if not textual content.strip():
    print(f"Skipping {doc_id} - Web page {page_num + 1}: No legitimate textual content extracted.")
    return

    page_id = f"{doc_id}_page_{page_num + 1}"

    # Pembuatan db pada Chroma
    assortment.upsert(
    ids=[page_id], # Distinctive ID per halaman
    paperwork=[text], # Information teks mentah
    metadatas=[{"source": "pdf", "page": page_num + 1}] # Metadata
    )
    print(f"Textual content from {doc_id} - Web page {page_num + 1} saved in ChromaDB!")

    besides Exception as e:
    print(f"Error storing web page {page_num + 1} in ChromaDB: {e}")

    ID halaman akan dibuat format {doc_id}_page_{page_num + 1} karena jumlah halaman dokumen tidak mungkin dimulai dari 0. Walaupun hanya sekedar sampul dokumen, tetap hitungannya dimulai dari 1. Metode pengunggahan information menggunakan perintah upsert() agar jika ada perubahan pada information dengan nama atau ID yang sama, tidak terjadi penyimpanan duplikat.

    # Pemrosesan PDF
    def process_pdf(pdf_path):
    doc_id = pdf_path.cut up("/")[-1].cut up(".")[0]
    strive:
    doc = fitz.open(pdf_path)
    total_pages = len(doc)

    with pdfplumber.open(pdf_path) as pdf:
    for page_num in vary(total_pages):
    full_page_text = extract_text_and_tables(doc, pdf.pages[page_num], page_num)

    store_page_in_chromadb(full_page_text, doc_id, page_num, total_pages)

    print(f"Whole paperwork in ChromaDB: {assortment.depend()}")
    print(f"Processed {pdf_path} efficiently!n")

    besides Exception as e:
    print(f"Error processing {pdf_path}: {e}")

    Pemrosesan dokumen PDF akan diambil terlebih dahulu alamat di mana dokumen tersebut berada. Misalnya memiliki dokumen pada C:/Paperwork/Folder_A1/A1.pdf, alamat akan dipisah berdasarkan tanda /, dan diambil bagian yang paling belakang sehingga didapatkan A1.pdf. Alamat yang sudah didapatkan dipisah lagi berdasarkan tanda . dan akhirnya didapatkan A1 sebagai nama ID untuk disimpan dalam Chroma. Dokumen akan dipisah setiap halamannya dan disimpan dalam Chroma.

    Pemrosesan per Bagian Judul (Skenario 2)

    Metode penyimpanan pada skenario ini menyerupai penyimpanan pada skenario 1. Yang membedakan hanya nama ID beserta pembagian isi dari dokumen PDF.

    def store_page_in_chromadb(textual content, doc_id, metadata):
    strive:
    if not textual content.strip():
    print(f"Skipping {doc_id}: No legitimate textual content extracted.")
    return

    assortment.upsert(
    ids=[doc_id],
    paperwork=[text],
    metadatas=[metadata]
    )
    print(f"Textual content from {doc_id} saved in ChromaDB!")

    besides Exception as e:
    print(f"Error storing {doc_id} in ChromaDB: {e}")

    Pada skenario 2, terdapat sebuah fungsi khusus berupa manual_sections(). Fungsi ini ditujukan untuk membuat batasan halaman per judul secara guide supaya respon memiliki hasil akurasi relevansi yang baik dengan pertanyaan yang diberikan nantinya.

    # Definisikan part secara guide untuk setiap PDF
    def manual_sections():
    return {
    "Doc1": {
    "COVER": (1, 1),
    "LEMBAR PENGESAHAN DOKUMEN": (2, 2),
    "DAFTAR ISI": (3, 3),
    "KATA PENGANTAR": (4, 4),
    "DAFTAR ISTILAH": (5, 5),
    "PENDAHULUAN": (6, 7),
    "Isi": (8, 10)
    "LAMPIRAN": (11, 12)
    },
    "Doc2": {
    "COVER": (1, 1),
    "LEMBAR PENGESAHAN DOKUMEN": (2, 2),
    "DAFTAR ISI": (3, 3),
    "KATA PENGANTAR": (4, 4),
    "DAFTAR ISTILAH": (5, 5),
    "PENDAHULUAN": (6, 7),
    "Isi": (8, 10)
    "LAMPIRAN": (11, 12)
    }
    }

    Untuk penamaan dokumen, judul isi, dan halaman dapat disesuaikan dengan dokumen PDF yang digunakan. Fungsi manual_sections() juga digunakan pada skenario 3. Untuk pemrosesan dokumen PDF pada skenario 2 ini memiliki konfigurasi yang sedikit berbeda dari skenario pertama. Berikut merupakan inisialisasi process_pdf() pada skenario 2:

    # Pemrosesan file dalam folder
    def process_pdf(pdf_path):
    original_filename = os.path.splitext(os.path.basename(pdf_path))[0]
    strive:
    doc = fitz.open(pdf_path)
    sections = manual_sections().get(original_filename, {})

    with pdfplumber.open(pdf_path) as pdf:
    if sections:
    for section_name, (start_page, end_page) in sections.objects():
    combined_text = ""
    for page_num in vary(start_page - 1, end_page):
    full_page_text = extract_text_and_tables(doc, pdf.pages[page_num], page_num)
    combined_text += full_page_text + "n"
    if start_page == end_page:
    page_id = f"{original_filename}_{section_name}_page_{start_page}"
    metadata = {"supply": "pdf", "part": section_name, "page_range": f"Web page {start_page}"}
    store_page_in_chromadb(full_page_text.strip(), page_id, metadata)
    else:
    page_id = f"{original_filename}_{section_name}_page_{start_page}_to_{end_page}"
    metadata = {"supply": "pdf", "part": section_name, "page_range": f"Web page {start_page} to {end_page}"}
    store_page_in_chromadb(combined_text.strip(), page_id, metadata)

    print(f"Whole paperwork in ChromaDB: {assortment.depend()}")
    print(f"Processed {pdf_path} efficiently!n")

    besides Exception as e:
    print(f"Error processing {pdf_path}: {e}")

    Pemrosesan pada skenario 2 ini menyimpan dokumen dengan format {nama}_{judul bagian}_{halaman}. Jika halaman awal sama dengan halaman akhir, letak halaman hanya akan dicetak halaman mulainya. Misal daftar isi terletak pada halaman 3 dengan format pada manual_sections() berbentuk ”DAFTAR ISI”: (3, 3), maka nama yang akan disimpan pada Chroma berupa Doc1_section_DAFTAR ISI_page_3. Jika tidak, akan mencetak Doc1_section_DAFTAR ISI_page_3_to_4.

    Contoh Warning Output pada pemrosesan PDF

    Pemrosesan Bagian Judul dengan Ringkasan (Skenario 3)

    Metode penyimpanan pada skenario 3 ini memerlukan API OpenAI sebagai pembuat ringkasan dari isi dokumen yang kita berikan. Sayangnya, dibutuhkan untuk melakukan pembayaran untuk mendapatkan token API dari OpenAI. Untuk membuat token, pergi ke halaman Sign Up untuk membuat akun terlebih dahulu atau log in. Nantinya Anda akan diarahkan ke halaman dashboard dan Klik tombol “Create new secret key” untuk membuat token undertaking Anda.

    Tampilan Halaman Pembuatan Token API pada OpenAI

    Untuk pemilihan mannequin yang sesuai dengan kebutuhan undertaking, segala kelebihan beserta kemampuan kinerja mannequin dan fashions pricing dapat dilihat pada laman OpenAI documentaries bagian Models. Untuk inisialisasi OpenAI consumer, dapat dilihat pada fungsi di bawah berikut:

    consumer = openai.OpenAI(api_key="token_API_anda")

    def summarize_text(textual content):

    summary_prompt = f"Ringkas informasi berikut secara singkat dan jelas:nn{textual content[:3000]}" # Mencegah token melewati batas generate

    response = consumer.chat.completions.create(
    mannequin="gpt-4.1-mini",
    messages=[{"role": "system", "content": "Anda adalah asisten yang ahli dalam merangkum teks."},
    {"role": "user", "content": summary_prompt}],
    max_tokens=200 # Batas panjang response
    )

    return response.decisions[0].message.content material

    Consumer OpenAI akan membuat ringkasan dan menyertakan sebagian teks asli dari isi dokumen hingga 3000 karakter pertama sesuai perintah yang diberikan pada summary_prompt. Batas ditetapkan pada 3000 karakter supaya tidak melebihi batas output token maksimal dan mengurangi harga pricing per kata. Panjang ringkasan yang akan dihasilkan juga dibatasi mencapai 200 token. Hasil yang paling relevan (alternative[0]) akan diberikan kepada LLM untuk disimpan dalam Chroma.

    def store_page_in_chromadb(textual content, doc_id, metadata):
    strive:
    if not textual content.strip():
    print(f"Skipping {doc_id}: No legitimate textual content extracted.")
    return

    abstract = summarize_text(textual content)
    combined_text = f"nRingkasan:n{abstract}nnTeks Lengkap:n{textual content}"

    metadata["summary"] = abstract
    metadata["original_text"] = textual content
    metadata["combined_text"] = combined_text

    assortment.upsert(
    ids=[doc_id],
    paperwork=[combined_text],
    metadatas=[metadata]
    )
    print(f"Saved {doc_id} in ChromaDB!")

    besides Exception as e:
    print(f"Error storing {doc_id}: {e}")

    Metode penyimpanan information pada Chroma di skenario 3 ini menyatukan teks asli dengan ringkasan di dalam metadata yang sama (combined_text). Information yang telah disatukan itulah yang disimpan dalam Chroma. Untuk cara pemrosesan dokumen PDF (process_pdf(pdf_path)), metodenya sama dengan pemrosesan dokumen PDF yang ada pada skenario 2.



    Source link

    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Previous ArticleHow Armenia is trying to build a Silicon Valley in the Caucasus
    Next Article I Stopped Chasing Time. Managing Energy Changed Everything
    Team_AIBS News
    • Website

    Related Posts

    Machine Learning

    Blazing-Fast ML Model Serving with FastAPI + Redis (Boost 10x Speed!) | by Sarayavalasaravikiran | AI Simplified in Plain English | Jul, 2025

    July 2, 2025
    Machine Learning

    From Training to Drift Monitoring: End-to-End Fraud Detection in Python | by Aakash Chavan Ravindranath, Ph.D | Jul, 2025

    July 1, 2025
    Machine Learning

    Credit Risk Scoring for BNPL Customers at Bati Bank | by Sumeya sirmula | Jul, 2025

    July 1, 2025
    Add A Comment
    Leave A Reply Cancel Reply

    Top Posts

    Blazing-Fast ML Model Serving with FastAPI + Redis (Boost 10x Speed!) | by Sarayavalasaravikiran | AI Simplified in Plain English | Jul, 2025

    July 2, 2025

    I Tried Buying a Car Through Amazon: Here Are the Pros, Cons

    December 10, 2024

    Amazon and eBay to pay ‘fair share’ for e-waste recycling

    December 10, 2024

    Artificial Intelligence Concerns & Predictions For 2025

    December 10, 2024

    Barbara Corcoran: Entrepreneurs Must ‘Embrace Change’

    December 10, 2024
    Categories
    • AI Technology
    • Artificial Intelligence
    • Business
    • Data Science
    • Machine Learning
    • Technology
    Most Popular

    Cut Business Travel Costs for Good with OneAir Elite

    June 20, 2025

    Invasion of the Home Humanoid Robots

    April 4, 2025

    Clampdown on fake Google reviews announced

    January 25, 2025
    Our Picks

    Blazing-Fast ML Model Serving with FastAPI + Redis (Boost 10x Speed!) | by Sarayavalasaravikiran | AI Simplified in Plain English | Jul, 2025

    July 2, 2025

    AI Knowledge Bases vs. Traditional Support: Who Wins in 2025?

    July 2, 2025

    Why Your Finance Team Needs an AI Strategy, Now

    July 2, 2025
    Categories
    • AI Technology
    • Artificial Intelligence
    • Business
    • Data Science
    • Machine Learning
    • Technology
    • Privacy Policy
    • Disclaimer
    • Terms and Conditions
    • About us
    • Contact us
    Copyright © 2024 Aibsnews.comAll Rights Reserved.

    Type above and press Enter to search. Press Esc to cancel.