DEV Community

Cover image for Membangun Knowledge Graph CTI Multi-PDF Otomatis di Google Colab
ahmadasroni38
ahmadasroni38

Posted on

Membangun Knowledge Graph CTI Multi-PDF Otomatis di Google Colab

Panduan Lengkap: Membangun Knowledge Graph CTI Multi-PDF Otomatis di Google Colab

Daftar Isi

  1. Pendahuluan
  2. Arsitektur Solusi dan Alur Utama
  3. 1. Instalasi dan Import Dependensi
  4. 2. Konfigurasi Terpusat dengan CTIConfig
  5. 3. Ekstraksi Teks PDF dengan PDFProcessor
  6. 4. Batch Processing PDF dari Google Drive
  7. 5. Named Entity Recognition (NER) Multi-Sumber
  8. 6. Penyusunan Knowledge Graph
  9. 7. Pipeline Utama: Dari PDF ke Knowledge Graph & Ekspor
  10. 8. Penutup dan Tips Praktis

1. Pendahuluan

Cyber Threat Intelligence (CTI) sangat membutuhkan proses otomatis untuk membaca laporan PDF, melakukan ekstraksi informasi, dan membangun knowledge graph dari dokumen-dokumen tersebut. Blog ini membahas langkah-langkah terstruktur untuk membangun pipeline end-to-end: dari ekstraksi teks, entitas, hingga visualisasi dan ekspor graph, khususnya untuk file PDF di Google Drive.


2. Arsitektur Solusi dan Alur Utama

Pipeline terdiri dari 7 bagian utama:

  1. Instalasi dan Import Library
  2. Konfigurasi Global
  3. Ekstraksi Teks PDF
  4. Batch Processing PDF
  5. Ekstraksi Entitas (NER)
  6. Membangun Knowledge Graph
  7. Main Pipeline & Ekspor

Diagram alur:

PDFs (Google Drive)
        │
        ▼
Ekstraksi Teks (pdfplumber)
        │
        ▼
Ekstraksi Entitas (spaCy & regex custom)
        │
        ▼
Analisis Relasi (Co-occurrence, dsb)
        │
        ▼
Knowledge Graph (NetworkX)
        │
        ▼
Ekspor (CSV, GraphML)
Enter fullscreen mode Exit fullscreen mode

3. Instalasi dan Import Dependensi

Langkah pertama adalah instalasi library, baik untuk NLP, graph, maupun visualisasi.

!pip install -q numpy pandas==2.1.4 pdfplumber==0.10.3 spacy==3.7.4 networkx==3.2.1 matplotlib==3.7.4 tqdm==4.66.1 ipywidgets==8.1.2 pyvis==0.3.2
!python -m spacy download en_core_web_sm
Enter fullscreen mode Exit fullscreen mode

Import semua library yang dibutuhkan:

import os
import re
import json
import hashlib
from datetime import datetime
from collections import defaultdict, Counter
import pandas as pd
import pdfplumber
import spacy
import networkx as nx
from tqdm.notebook import tqdm
from pyvis.network import Network
from IPython.display import display, HTML
Enter fullscreen mode Exit fullscreen mode

Mount Google Drive untuk akses data dan ekspor hasil:

from google.colab import drive
drive.mount('/content/drive')
Enter fullscreen mode Exit fullscreen mode

4. Konfigurasi Terpusat dengan CTIConfig

Semua parameter pipeline (mulai dari lokasi file, regex NER, hingga parameter graph) dikelola dalam satu class CTIConfig supaya mudah diubah dan konsisten.

Contoh parameter utama:

  • Lokasi folder Google Drive (data dan hasil)
  • Regex custom untuk NER (misal: Threat Actor, Malware, MITRE Technique)
  • Pengaturan text processing (min/max paragraph, sentence segmentation)
  • Parameter graph (jenis relasi, besar node, dsb)
  • Metadata default (misal: SHA-1, tahun, title)

Contoh kode:

class CTIConfig:
    def __init__(self):
        self.min_paragraph_length = 50
        self.max_paragraph_length = 2000
        self.ner_model = "en_core_web_sm"
        self.custom_entity_types = {
            "THREAT_ACTOR": r"(APT\d+|APT-\w+|Group\d+|Wicked Rose|NCPH)",
            ...
        }
        self.drive_root = "/content/drive/MyDrive/Disertasi/Buda Hartawan"
        self.source_dir = os.path.join(self.drive_root, "DatasetCTI")
        self.export_dir = os.path.join(self.drive_root, "CTI_Results")
        ...
Enter fullscreen mode Exit fullscreen mode

5. Ekstraksi Teks PDF dengan PDFProcessor

Class ini bertugas membuka satu file PDF dan mengekstrak teks per halaman dengan quality control:

  • Hanya halaman dengan teks cukup panjang yang diambil
  • Teks dinormalisasi & bisa dipotong per kalimat atau paragraf
  • Setiap segmen teks diberi hash unik untuk tracking

Tahapan:

  1. Buka PDF, baca tiap halaman.
  2. Validasi panjang teks → simpan atau abaikan.
  3. Setelah semua halaman, lakukan normalisasi dan segmentasi (kalimat/paragraf).
  4. Hasil akhir: list blok teks siap NER.

Contoh kode:

with pdfplumber.open(file_path) as pdf:
    for page in pdf.pages:
        text = page.extract_text()
        if text and len(text) > self.config.min_paragraph_length/2:
            ...
Enter fullscreen mode Exit fullscreen mode

6. Batch Processing PDF dari Google Drive

Untuk memproses banyak dokumen sekaligus:

  • Scan folder Google Drive, cari semua file PDF
  • Otomatis generate metadata (SHA-1, tahun, judul) dari nama file
  • Proses ekstraksi teks pada semua file dengan progress bar

Fitur:

  • Otomatis skip file yang bukan PDF
  • Metadata dokumen tetap terhubung ke hasil ekstraksi

Contoh kode:

for filename in sorted(os.listdir(self.config.source_dir)):
    if filename.lower().endswith('.pdf'):
        ...
Enter fullscreen mode Exit fullscreen mode

7. Named Entity Recognition (NER) Multi-Sumber

Ekstraksi entitas dilakukan dengan dua pendekatan:

  • spaCy NER: Model pretrained untuk English (en_core_web_sm)
  • Regex custom: Untuk entitas khusus CTI (misal: APT, malware, teknik MITRE)

Fitur:

  • Entitas didedup berdasarkan teks terpanjang
  • Setiap entitas tetap terhubung ke dokumen dan segmen asal

Contoh kode:

for ent in doc.ents:
    ...
for ent_type, pattern in self.custom_patterns.items():
    for match in pattern.finditer(text):
        ...
Enter fullscreen mode Exit fullscreen mode

8. Penyusunan Knowledge Graph

Knowledge graph dibangun dengan NetworkX, tipe MultiDiGraph:

  • Node: entitas, dokumen
  • Edge: relasi antar entitas (co-occurrence, dsb), entitas ke dokumen (DOC_REF)
  • Fitur: perhitungan statistik (degree, centrality, pagerank, clustering, dsb)
  • Semua node dan edge menyimpan info metadata (type, source, evidence, dsb)

Contoh kode pembuatan edge:

self.graph.add_edge(
    rel['source'],
    rel['target'],
    type=rel['type'],
    evidence=str(rel.get('evidence')),
    weight=float(rel.get('weight', 1.0)),
    documents=documents_str
)
Enter fullscreen mode Exit fullscreen mode

9. Pipeline Utama: Dari PDF ke Knowledge Graph & Ekspor

Alur utama pipeline:

  1. Inisialisasi config, batch processor, NER
  2. Temukan semua PDF di Google Drive
  3. Ekstrak teks dari semua dokumen
  4. Ekstrak entitas NER dari semua blok teks
  5. Relasi (co-occurrence) antar entitas dalam blok yang sama
  6. Bangun graph (node, edge, metrik)
  7. Ekspor hasil ke Google Drive (CSV node/edge, GraphML, metadata JSON)

Contoh ekspor hasil:

pd.DataFrame(nodes_data).to_csv(os.path.join(export_dir, f"kg_nodes.csv"), index=False)
pd.DataFrame(edges_data).to_csv(os.path.join(export_dir, f"kg_edges.csv"), index=False)
nx.write_graphml(kg.graph, os.path.join(export_dir, "knowledge_graph.graphml"))
Enter fullscreen mode Exit fullscreen mode

Output bisa dibuka di Gephi, Cytoscape, atau jaringan visual lainnya.


10. Penutup dan Tips Praktis

  • Pastikan Google Drive sudah termount dan file PDF sudah ada di folder sumber.
  • Edit regex NER sesuai kebutuhan domain/riset Anda agar hasil extraction optimal.
  • Gunakan hasil ekspor (CSV/GraphML) untuk analisis lanjutan atau visualisasi di tools lain.
  • Pipeline ini modular: Anda bisa menambah preprocessing, entitas baru, atau tipe relasi dengan mudah.
  • Debug dengan print/screenshot bila ada error pada file tertentu.

FAQ Singkat

  • Q: Bagaimana menambah entitas baru? A: Tambahkan regex pada config.custom_entity_types.
  • Q: Bagaimana menambah jenis relasi? A: Tambah pada config.relationship_types dan logika pembuatan edge di pipeline.
  • Q: Bisa dijalankan di komputer lokal? A: Ya, selama struktur folder sesuai dan dependencies terinstall.

Top comments (0)